2014.4.7

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

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


[第39回]


●Enumeration はじめから終わりまでの記録(7)DEVICE_DESCRIPTOR(最後の2バイト)

前回からの続きです。
前回の終わりのところで、DEVICE DESCRIPTORの最後は2バイトなのですが、解読プログラムの都合で8バイト表示されています、と書きました。
下の部分です。

0025806 SOF FNO=73C
0025806 PRE 
0025811 IN ADRS=04 ENDP=00 
        DATA1  03 02 7F 7E 3B A0 F4 FE // DATA1  03 02 7F 7E 1B 50 7A 80
0025812 OUT ADRS=04 ENDP=00 
        DATA1  
        ACK 

今回はそこのところをもう少し詳しく説明します。
DEVICE DESCRIPTORの最後の2バイトは上のリストで 03 02 のところです。
この2バイトについては前回説明をしました。
ではその後ろには何があるかといいますと、その後ろの2バイトはCRC16になります。
CRCは巡回冗長検査と呼ばれています。
考え方や計算方法は難しくてよくわかりません。
なんでもこの計算からデータの誤りをみつけて補正することもできるのだそうです。
そういうことも余裕があれば考えてみてもよいのですが、今はそんなゆとりはありません。
当然にここはパスいたしまして、その次にいきます。
CRC16の2バイトの次にはデータはありません。
ということでその後ろのところでちょっとデータが乱れているようです。
しかし前後の関係から見るとここにもなにやら意味のある信号がかくれているようです。
そこで以前にちょっと説明しました手作業での解読を試みましたが、ちょいと解読不能でありました。
そこでまた奥の手を使いまして、同時に記録を行なった「予備の記録」のほうを確認しましたところ、そちらが使えることがわかりました。
同じ行の後半に記載したデータです。
その前半4バイトは、前方のデータと同じです。
で、その後半の4バイトを解読してみました。
すると。

1B       50       7A       80
11011000 00001010 01011110 00000001
             |        |
     SYNC     ACK

おお。
SYNCに続いてACKが出現しました。
これで、情報が完全につながりました。
ホストはPICWRITERから送られたDEVICE DESCRIPTORの最後の2バイト(とCRC16)を受け取ると、それにACKを返したあと、DATA1を送出してDEVICE DESCRIPTORの受信を完了しました。

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

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