2014.4.17

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

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


[第42回]


●Enumeration はじめから終わりまでの記録(9)GET_DESCRIPTOR(STRING)

また何日かお休みしてしまいました。
ここ数日複数の仕事を同時にこなさなくてはならない状況になってしまい、ホームページの更新にまで手が回りませんでした。
その状況は現在でも同時進行形で継続中ですので、しばらくはこんな調子が続きそうです。
とはいえ余り間が空いてしまいますと、「大丈夫か?まだ生きているか?」などとご心配いただくことになってしまいますので、せめて今回は何とか少しだけでも更新することにいたしました。

今回は[第40回]からの続きです。
今までの説明と同様に、少しリストが重なりますが、すでににお見せしたリストの最後のところから後ろのリストをお見せします。

0025850 IN ADRS=04 ENDP=00 
        DATA0  32 C1 6A 3B A0 F4 1E   
0025851 OUT ADRS=04 ENDP=00 
        DATA1  
        ACK 
0025876 SETUP ADRS=04 ENDP=00 
        DATA0  80 06 00 03 00 00 FF 00   GET_DESCRIPTOR 
        ACK 
0025878 IN ADRS=04 ENDP=00 
        NAK 
0025879 IN ADRS=04 ENDP=00 
        NAK 
0025880 IN ADRS=04 ENDP=00 
        DATA1  04 03 09 04 09 78 FB CF   
0025882 OUT ADRS=04 ENDP=00 
        DATA1  
        ACK 

[第40回]はこのリストの始めのところでPICWRITERが送出した
DATA0 32
にホストが値なしのDATA1を送出して、第1回目のGET DESCRIPTOR(CONFIGURATION)を完了したところで終わりました。
ホストからはその後も続いてGET DESCRIPTORリクエストが出されます。

80 06 00 03 00 00 FF 00 です。

最初の 80 06 はGET DESCRIPTORです。
次の 00 03 はその要求がSTRING DESCRIPTORを要求していることを示しています。
コード 03はSTRING DESCRIPTORを示していて、00 はINDEXです。
次の 00 00 はリクエストによって意味が異なりますがこの場合には 00 00 です。
最後の FF 00 は要求しているDESCRIPTORの長さ(バイト数)がFFH(255バイト)であることを示しています。
事実上ホストからは長さを指定しないことになります。
しかしSTRING DESCRIPTORのINDEX 00は一般的には4バイトのデータで返すようです。
ホストから送出されたGET DESCRIPTOR(STRING)リクエストに対して、端末は要求に応えてSTRING DESCRIPTOR(この場合は要求されたINDEX 0)を送ります。

04 03 09 04 です。

ディスクリプタの最初の1バイトはそのディスクリプタの長さを指定します。
ここでは04ですから4バイトであることを示しています。
前にも書きましたがここでデータの解読に使った自作プログラムは適当に手抜きをしていますので、送受信データは実際のサイズに関係なく1行に8バイトを表示します。
ですから上のリストでも8バイトのデータのように見えますが、先頭の1バイトで示していますように、実際のデータは4バイトです。

ディスクリプタの2バイト目は、そのディスクリプタの種類を示しています。
このディスクリプタがホストから要求されたSTRING DESCRIPTOR(コード03)であることを示しています。
ここではINDEXについては表記していませんが、ホストから要求された通り、INDEX 0を送ります。
STRING DESCRIPTORのINDEX 0はそのほかのINDEXと形式が異なっていて、次の第3、第4バイトにはSTRING DESCRIPTORで使用する言語を指定します。
上のリストでは 09 04 です。
コード0409は英語(English)です。
普通は英語を指定するのが無難でしょう。

PICWRITERからそのように出力するとホストから値なしのDATA1が出力されて、STRING DESCRIPTOR(INDEX 0)の送信が完了します。

今回は時間がありませんので、ほんの少しの説明だけですが、ここまでといたします。

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

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