CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!
[第19回]
●フレームの間隔
ここでちょっと余談です。
前回と前々回にお見せした画像をもう一度見ていただきます。
解読したリストの上半分ぐらいはずっと SOF FNO= が並んでいます。
そのSOFの前には7桁の数字がついています。
この数字は何でしょうか?
実は、各行の先頭についている7桁の数値は、解読するもとのバイナリファイルの先頭からの位置を示しています。
しかしこの数字はただ単にファイルの先頭からのバイト数などを示しているのではなくて、実はバイナリファイルを16進数のメモリダンプ形式に変換してセーブしたテキストファイルをTerapadで開いたときにつけられる行番号に合わせてあるのです。
なんでそんな面倒なことをしているかと言いますと、そうすることで16進ダンプしたデータと上のように翻訳したデータをつきあわせして確認することができるように、と考えたからです。
こちらがTerapadで16進数ダンプファイルを開いて、上の画像と同じ位置を示したものです。
行番号35808にある 03 96 82 01 がSOF FNO=060 です。
プログラムによってコードを解読することで能率は飛躍的に向上しますが、なかには前回説明しましたスタッフビットなどのせいでうまく解読できないところも出てきます(コード解読プログラムは急いで作ったため、いろいろ手抜きがあって、スタッフビットは考慮していません)。
そのような場合には上のように16進数のデータを調べてみると何かがつかめることもあります。
そのためには同じ行番号データをつけておくと便利なのです。
さてこの7桁の数字にはそういう意味があるということを知っていただいた上で、さきほどの画像をもう一度見てください。
フレームナンバーが並んでいる前の数値を見てみます。
34589
34682
34776
34870
34964
のように並んでいます。
各数の差を計算してみてください。
すると…。
93
94
94
94
となります。
大体は94ですがときどき93のところもあります。
これは何でしょうか?
実はこれはフレームの間隔(フレームのサイズ)をあらわしているのです。
94というのは上の画像で見て、16進数データが16個表示されている行が94行ということを意味しています。
つまりフレームの間隔(SOFデータの間隔)は16バイト×94だと計算できます。
16個ある16進数のどの位置にSOFデータがあるかはいつも固定しているわけではありませんから、行数だけで計算するとある程度の誤差を覚悟しなければなりませんが、それでも目安にはなります。
16×94=1504バイトです。
このデータはもともとシリアル変換して送信されてきたものです。
そこで上の計算結果をビットに直してみます。
1504×8=12032ビットになります。
ところでUSBデータのクロックは12MHzでした。
12000000ビット/秒の送信速度です。
その速度で12032を割ってみますと、
12032/12000000≒0.0001(秒)になります。
つまり1msです。
CPLD+SIMM回路で収集したデータを解析することで、フレームが1ms間隔で送出されていることが確認できました。
また逆にそのように確認できたことで、CPLD+SIMM回路は期待通りにかなりの正確さでデータを収集している、ともいえると思います。
CPLD+SIMMを使ってUSBプロトコルの解析を![第19回]
2014.2.18upload
前へ
次へ
ホームページトップへ戻る