CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!
[第11回]
●「不明なデバイス」問題が解決しました!
パラレルポートの説明の途中なのですが。
実はそもそもの目的であります、一部のPCでND80ZV(ND80Z3.5)がUSB接続の際に「不明なデバイス」にされてしまう問題について大きな進展がありましたので、またまた予定変更で申し訳ありませんがしばらくそちらの説明に切り換えて進めさせていただきます。
以前に書きましたように、うまくUSB接続が出来ないPCがあるということで、葛Z術少年出版の吉崎様から昨年の暮れにその接続不能PCを送っていただきました。
それ以来1ヶ月以上あの手この手でUSB接続動作の解析を試みてきました。
解析ツールとしてまず取り組んだのが、本テーマでありますCPLD+SIMMを使ったUSBプロトコル解析ツールです。
なにしろCPLDをさわるのもこれが初めてということもあって、そもそもこのツールがうまく動いてくれるまでにかなりの日数を要してしまいました。
USBプロトコルアナライザなる装置も市販されていることは承知しております。
しかしこれはなかなかに高価な装置です。
おいそれとは手が出せる代物ではありません。
なかには超低価格な製品も販売されているらしいのですが、そういうものはちょっと機能に心配があってやはり購入するのには二の足を踏んでしまいます。
ということで自作USBプロトコルアナライザの製作からスタートいたしました。
その説明もまだ途中なのですが、実際にはすでに出来上がっておりまして、USB信号もそこそこ読み取れるところまでできました。
しかし。
いまひとつのところがまだわかりません。
途中で応答がかみあわなくなって、不明なデバイスにされてしまうところは見て取れます。
しかし、こちらはまともに答えを返しているつもりなのになぜ受け取ってくれないのか、そこが疑問でそのあたりのところは信号を解析してみてもどうにも理解できませんでした。
タイミングの問題なのか、はたまたノイズの問題なのか、USB信号を見ているだけでは今ひとつはっきりしません。
そこで、途中から方針を変更して、先日から書いてきておりますようにPICの動作をモニタしてその動きから追求してみようと考えました。
これはPICプログラムの途中でポートからプログラム位置を示す数値を出力して、それをカメレオンUSBの同期SRAMに記録してあとからその動きを解析しようとするもので、当記事の途中からはその回路の説明に入っております。
実はその回路も完成して、それを使って動作の確認をしましたところ重要なポイントがいくつか明らかになりました。
しかし、それでもまだ不明なところが残っておりまして、依然として「不明なデバイス」はクリアできないままでした。
USB信号が観測できるようになって、どういうやりとりが行なわれているかは大体読み取れるようになりました。
それからPICがどういう動きをしているのかということもモニタできるようになりました。
しかしなにしろ12MHzというスピードでのやり取りですから、リアルタイムでのモニタはとてもできません。
一旦メモリに記録したあとで、データを解析することになります。
当然、USB信号をモニタしたものと、PICの動作をモニタしたものは非同期でかみあっていません。
たとえば、PCからあるコマンドが出力されたその同じタイミングで、PICの側はどう動いて何を処理しているのかが見えれば、もう少し何かが見えてくるのではと考えました。
つまりUSBプロトコルアナライザとPIC動作モニタの合体です。
このあたりのところはもう少し詳細に説明をしませんと、私が何を考えているのかもご理解いただけないとは思いますが、それについてはしばしお待ちいただくことといたしまして、ともかくそのような動作をするものをCPLD+SIMM回路を改造することで作り上げました。
それを使って得られたデータを解析しましたところ、やっと、何が問題だったのか、その原因をつきとめることができました。
そのようにして得られた結果をもとに、これからPICプログラムの修正作業と検証作業にかかりますので、今までUSB接続に問題があったお客様に修正版をお送りできるようになるまでにはもう少し日数が必要です。
が、おそらく問題は解決できたように思いますので、まずはそのご報告だけこうして先にお知らせしております。
●何が問題だったのか?
これから詳細について少しずつ説明をすすめていきますが、そもそも何が問題だったのかにつきまして要約いたしますと。
まずはPICプログラムに不備があったことがそもそもの原因でした。
しかし多くのPCでは、それほど細かい約束事は追求しないで、アバウトな情報を送信することでも接続してくれるらしいために、多くの場合には接続に際しての問題は発生しませんでした。
しかし中には、どうやらOSのレベルというよりは、もっと下層のUSBチップ(CPUチップセット?)のレベルではないかと思われるのですが、非常に厳密な情報を要求するものがあって、それがために「不明なデバイス」にされてしまう場合があるのではと推測しています。
さらにそのようなPCでも、なかには何回か接続を試みているうちに徐々に情報を内部で補正していって、どこかの時点で認識してくれるようになる場合もあるようです。
今回吉崎様からお借りしたPCは、送受信のタイミングが非常に厳しくて、当初の想定をはるかに越えていたためにプログラムがまともに応答できていなかったことに加えて、ちょっと信じられないルールで判定していたらしいことなどが判明しました。
それらに対応できるようにプログラムを修正しましたたところ、まともに認識してくれるようになりました。
そのあたりにつきましても、これから少しずつ説明をしていくことにいたします。
しかし。
文章ばかりですと、どうも肩がこっていきません。
まずは写真をご覧いただくことにいたしましょう。
●自作したツールの写真
カメレオンUSB基板2枚(手前の2枚。ジャノ目基板に接続しているため裏返しになっている)とSIMMを使ってUSB信号を取得中の写真です。
ジャノ目基板の裏側はご覧の通りすさまじい状態です。
途中で何回か追加や変更をしたものですから余計にスパゲッティ状態になってしまいました。
こちらがあとから説明をしておりますカメレオンUSB+ロジアナを利用したPIC動作モニタ(右下)です。
左上はND80ZVです。
最初は写真のように直接PICの足にクリップをつけていましたが、これではPICのプログラムを書き換えるたびにクリップを付け直さなくてはなりません。
そこで。
下のようにND80ZVの基板裏側からPICの信号線を引き出して、クリップを取り付けたままPICの着脱ができるようにしました。
CPLD+SIMMを使ってUSBプロトコルの解析を![第11回]
2014.2.9upload
前へ
次へ
ホームページトップへ戻る