2020年6月26日金曜日

STM32でDCCを作る方向で (25) Broken Pipe error 原因究明

STM32でDCCを作ろう!        INDEXページへ

問題解決したのだけど喜びが湧きません...

USBでBroken pipeが生じて死んでた.開発中のSTM32 DCCをLinuxマシンに接続し、dmesgをみると、USB Audioデバドラが死んで停まっている.
usb 2-2: new high-speed USB device number 123 using xhci_hcd
usb 2-2: New USB device found, idVendor=0000, idProduct=0000
usb 2-2: Product: STM32 Audio Class
usb 2-2: 1:2: cannot get freq (v2): err -32

err-32とは32bitに直すとFFFFFFE0であり、wiresharkによるとBroken pipeの意味がある.Broken pipeの原因はいろいろある.

問題の発生状況をこのように推測している.
1)Broken pipeのせいでHOSTへ返すpacketがロストしている.その結果HOSTは「deviceが死んでるな」と判断してデバドラを停止させている
2)Broken pipeはrandomに生じる
3)FFFFFFE0を出しているのはHOSTなのかdeviceなのかも重要な情報だ.wiresharkが昇りpacketでFFFFFFE0を検知している.ということはBroken pipeを発行したのはSTM32だと思われる

ここまでが材料である.

FFFFFFE0を出しているのがSTM32だとすると、STM32のどこかにBroken pipeの痕跡が残されているはずだ.いろいろ調べているけど見つからない.
1)softwareにはerrorの痕跡が見当たらない
2)レジスタにも痕跡は見当たらない
3)割り込みレジスタにもerror痕跡が見当たらない
4)「手かざし」というオカルト技を駆使するも変化なし

う~ん、give-up.

こうなりゃヤケだと、USB cableを交換してみたら、治ってしまった.ぎゃふん

調査を進めて、結論は、Linuxマシンの特定USB portが死んでいる、であった.別のUSB portに挿すと治る.

4~5日無駄にしました.厄払いが必要だな.

かしこ

11 件のコメント:

  1. >USB cableを交換してみたら、治ってしまった
    コレ結構、「開発あるある」ですね・・・

    >Linuxマシンの特定USB portが死んでいる
    とかく「ポート」と名の付くものは「よく死に」ますね。
    ※自分は昔、「Ethernet HUB」の特定ポートが死んでて、「2、3日を無駄にした」ことがあります。
    (開発がたて込んでる時に限って、よく起きるんだな、コレが)
    「どうしても、うまくいかない原因が分からなく」て、ふと「ケーブルを差し替えた」ら、あっさり動いたという・・・
    ※以来、うまくいかないときは、必ず「ポート差し替え」「ケーブル交換」は、試すことにしています。
    ちなみに、「USBのポートが死んでる」のには遭遇したことはありませんが、何故か
    「USB2.0 としか認識しない、USB 3.0ポート」には出会ったことがあります。

    USBにしろ、Ethernet にしろ、結局は「マージンの大きい、アナログ回路」に過ぎない、
    事がよく判りますね・・・静電気で死んだ(劣化した)のかもしれないし。

    返信削除
    返信
    1. ♪ おしえてください
      この世に生きとし生けるPCの すべてのポートに 限りがあるのならばぁ~
      USBは死にますか Ethernetは死にますか PCIはどうですか COMもそうですか
      おしえてください~♪

      削除
    2. 現在こちらのwindowsマシンはUSBポートが1つ死んでます.

      ♪SATAもそうですか?♪

      削除
  2. 最後までハードを疑わないのはソフト屋の鏡と申せましょう。ダメなソフト屋さんは先ずハードとかノイズを疑いますね。

    返信削除
    返信
    1. ♪ケーブルは死にますか ノイズもそうですか♪

      削除
    2. この前偉いお客さんとzoomしてたら急に回線が切れて、zoomの時間切れか、wifi か、ネット障害かと、調べても分からず、スマホで切り抜けました。
      終わってから調べたところいつも使っているLANケーブルの断線でした。何も触ってないのに。不具合は最悪のタイミングで発生すると言うマーフィーの法則(?)発動でした。

      削除
    3. 電気系は霊力で変調をきたしますので除霊しましょう.

      削除
  3. 一般的には「たかがUSB」と、思われがちなんですが、実はUSBは、
    「デジタル回路/アナログ回路/ソフトウエア(通信プロトコルその他)」の、
    「技術の粋」を集めてつくられてるんですよね。全貌を「本気で」理解しようとすれば、
    このすべての技術への理解を必要とされるという・・・

    ※USB3なんて、「Giga」のオーダーですよ。(実はGbEよりも早いという)
    電波で言ったら「マイクロ波」のオーダーですよ。一般向けには、
    「電子レンジ並みの電波が、ケーブルの中を走っている(ちょっと誇張アリ)」
    と言った方が、インパクトが大きいかも。

    ※この辺りの周波数のアンプって、本気でやるなら「マイクロストリップライン」クラス
    なんですけど、どーなってんでしょうね?
    なんか、CPUクロックが「なんとかギガ」が、当たり前になったあたり(21世紀初頭くらい?)
    からマヒしてる感じですが、冷静に考えるとスゴイ技術です。
    確かに「USB3」辺りから、新製品が「簡単に」出なくなった感はありますが。

    返信削除
    返信
    1. GHzはいろいろ大変ですよね.

      USB2のIC~コネクタまでの配線はなるべく短く並行に配線をするように心がけてはおりますけど、5cmぐらいの撚りリード線でもなんとなく動いてしまうという印象は持っています.

      ですがUSB3はそういう邪な配線だともう無理でしょうね.
      SATAもそうですか、HDMIもそうですか、ってかんじー

      USB4規格は発表されてると思ってますがどんな企画なのかは知らないです.まさか光じゃないと思いますが

      削除
    2. ちょっと気になって調べてみたのですが、USB2.0 (480Mbps)の時点で、既に
      「配線パターンには、『マイクロストリップライン』を使えやゴルァ」との指示が出てますね。
      EZ-USB® FX2LP™ハードウェア設計を成功させるガイド
      https://www.cypress.com/file/435211/download
      ※まぁ、そらそーだよな。物理法則がある限りは、
      「テキトーに配線しても、超スピード出ます!!」などという魔法は無い。
      ※互換性があるはずなので、USB3以後でも「差動インピーダンスは90Ω」
      は、変わってないハズ。50Ωじゃないんですね。

      >5cmぐらいの撚りリード線でもなんとなく動いてしまうという印象
      経験的には、「500MHz以下」だと、インピーダンスが合っている限りは、
      「かなり適当」でも動く印象。それを超えると、プラス
      「見た目の美しさ(笑)」が、必要。「1GHzを超える」と、
      「回路自体をシールド」しないと動かない。(当然、見えなくなる)
      ※動作させながら、回路を弄れない。一々「シールド板」を、外さないと
      (隙間があるとNGなので)ダメなので、とても面倒。

      >USB4規格
      Wikipediaによれば
      「技術的には2018年に仕様が無償公開される運びとなったThunderbolt 3を基盤とし」
      「これまでのUSBシリーズ全てと、Thunderbolt 3との下位互換性を有する」
      ??「Thunderbolt」の項には、
      「技術的にPCI ExpressとDisplayPortを基盤としている」
      とあって、私にはよく判りませんでした(笑い)
      ※なんかもう「差動インターフェース系」は「皆兄弟」と言うことなんでしょうか?
      USB3から、「差動インターフェース複数」になってるんで、確かに、
      「技術的にPCI Express」なんでしょうな。ネゴシエーションの方式が違う位で。

      削除
    3. >「差動インターフェース系」は「皆兄弟」と言うことなんでしょうか?

      同じ人たちが規格を決めてたりしてw

      2000年頃には光へ行くのかなと思ってましたけど、wireも頑張りますね.

      削除