2014.2.16

前へ
次へ
ホームページトップへ戻る

CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!


[第17回]


●USB信号の解読(2)

[第14回]でUSB信号の解読例をお見せしました。
その解読例はそこでも書きましたように、USBプロトコルの解読という当記事の本来の目的からしますと、あまり参考になる例ではありませんでした。
その後にPIDなどについても説明しましたので、ここであらためてもう一度USB信号の解読例をお見せすることにいたします。

こちらがCPLD+SIMM回路を使って記録したUSB信号データです。



このままでは何が何だかわかりません。
FFが連続しているところはデータが無いところ(無信号の状態)で、そうではないところが何らかのデータが送信、または受信されているところだということは大体想像がつきます。

上のデータを紙と鉛筆を使って解読するとこのようになります。
ほんの少しのところですが、これだけでも手作業で解読するとなると一苦労ですので、最初の07 6C 09 40 からその下の 01 A5 F7 のところまでを解読してみました。



SETUPコマンドが発行されています。
80 06 00 01 はEnumerationのGet Device Descriptorコマンドです。
Enumerationのコマンドについてもそのうち整理して説明をしていきたいと思っています。

上のようにしてホストから発行されるコマンドとそれに対するND80ZV(3.5)の応答を記録し解読していけば、ND80ZV(3.5)がうまく認識されない場合に、どこでおかしくなっているのかがわかるかもしれません。
しかし一度の記録で4MBもあるデータ(バイナリから16進数データのダンプイメージに変換すると33MBにもなります)を紙と鉛筆で解読していたのでは、前にも書きましたが、それこそ寿命が尽きてしまいます。
そういうことなので当然解読プログラムも作りました。

下はその解読プログラム(usbckr.com)を実行したところと、その結果生成された解読リストを表示させているところです。


usbckrを実行したときにシステムエラーが表示されています。
もともとこのプログラムは生のUSBデータを解読するように作成したものですが、もとのデータファイルd6nx_h.binにはUSB信号データだけではなくて、同時にPIC18F14K50の内部の動作を示す値をPORTB、PORTCから出力したものも記録しているので、その部分でエラーが発生しているのです。
これはそのことがわかっていて、でもそのためにデータファイルを分離するのも面倒なので、そのままusbckrに読み込ませるといういささか乱暴なことをした結果表示されたエラーメッセージです。
解読そのものはまともに完了しています。

DOSプロンプト画面で最初に実行しているfdumpは、バイナリファイルを上のほうでお見せしたような16進数のメモリダンプ形式のテキストファイルに変換するプログラムです。
fdump.comもusbckr.comも自作の8086アセンブラで作成しました。

紙と鉛筆を使って解読していたら一生かかってしまうような作業もプログラムを作成して実行させれば瞬時に解読できてしまいます。
こういう用途に使ってこそコンピュータの威力が実感できようというものです。

ところで、上の解読リストをよーく見ていただきますと、一箇所ちょっと気になるところがあるのですが、それがどこだかお分かりになりますでしょうか?

CPLD+SIMMを使ってUSBプロトコルの解析を![第17回]
2014.2.16upload

前へ
次へ
ホームページトップへ戻る