CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!
[第16回]
●USB信号の構造などについて
USB信号を解読するためにはUSB信号の構造や、そこで使われるコードの意味などについて知らねばなりません。
[第14回]の解読例でもSYNC、SOF、DATA0など解説しなければ全く意味不明な用語がいっぱい出てきました。
そこでまずはUSB信号を構成する要素などの説明から始めようとしたのですが…。
はて?
はるかな昔にどこかで同じようなことを書いたような…。
しっかりと書いておりました。
「PICでUSBを!」の[第32回]〜[第35回]あたりにかなり詳しく解説しておりました。
その前後にもUSBに関するあれこれを書いておりますので、お時間がありましたらそれらも合わせてご一読いただければと思います。
あらためて読んでみましたら基本的なことがらにつきましては大体のところは書いてしまっているようです。
ただPID(Packet Identifier、直訳するとパケット識別子)については中途半端に説明したままになっておりましたので、以下にまとめておくことにいたします。
なお以下の説明に登場する用語について特に注釈をつけてないものにつきましては、 「PICでUSBを!」の[第32回]〜[第35回]にて説明をしていますのでご参照ください。
●PID
USBでのデータ伝送はサイズが1msのフレームという一種の枠にはめ込まれて行なわれます。
フレームはまさにその名の通り外枠でデータを運ぶための枠(入れ物)にすぎません。
USB信号を解読する上ではフレームは特に重要なものではありません。
実際フレームの中はがら空きであることも多く、中身がまるで無い空のフレームも沢山見られます。
フレームは1msごとに必ず送られますが、USB接続機器とホストとの間でのデータのやり取りは常時行なわれるとは限らないからです。
空のフレームであってもフレームの始まりを示すSOFというパケットだけは必ず含まれて送られます。
パケットはUSB信号での最小の構成要素で、役割によっていくつかの種類があります。
パケットは同期をとるための同期信号パターン(80H、ビット表現では10000000)で開始されます。
それに続いて送られるのがPIDで4ビットのパターンに続いてそれの1と0を反転した4ビットのPIDが続きます。
PIDはそのパケットの意味を示すもので以下の4種に分けられます。
種類 |
名称 |
コード |
意味 |
発行元 |
トークン |
OUT |
0001 |
ホストから端末へのデータ送出 |
ホスト |
IN |
1001 |
端末に対してデータを送出するよう要求(送信要求) |
ホスト |
SOF |
0101 |
フレームの始まりを示す |
ホスト |
SETUP |
1101 |
Enumerationのセットアップであることを示す |
ホスト |
データ |
DATA0 |
0011 |
偶数データパケット |
ホスト/端末 |
DATA1 |
1011 |
奇数データパケット |
ホスト/端末 |
ハンドシェイク |
ACK |
0010 |
受信成功 |
ホスト/端末 |
NAK |
1010 |
送信または受信準備ができていない(端末がビジーである) |
端末 |
STALL |
1110 |
なんらかの異常の発生を示す |
端末 |
特殊 |
PRE |
1100 |
ロースピード転送可 |
ホスト |
コードは4ビットですが上の表では10通りのコードしかありません。
調べてみましたら上記の他にも割り当てられているPIDコードがあるようです。
しかし当記事で扱うHID通信で出てくるのは今のところ上記に限られています。
上記のうちでもSTALLとPREは実際には扱いません。
ですのでここで理解が必要なのはOUTからNAKまでの8通りということになります。
各パケットについてはUSBプロトコルの解析を進めていく過程で適宜説明を加えていくつもりです。
●パケットのフォーマット
パケットは先頭に8ビットの同期信号パターンとそれに続いて各4ビットのPID、PIDが送られるところまでは全ての種類で共通していますが、その後ろは種類によって異なっています。
以下に各パケットのフォーマットを示します。
(1)SOFパケット
8 4 4 11 5
(2)OUT、IN、SETUPパケット
8 4 4 7 4 5
SYNC |
PID |
PID |
アドレス |
EP番号 |
CRC5 |
(3)DATA0、DATA1パケット
8 4 4 0〜64 16
(4)ACK、NAK、STALLパケット
8 4 4
上記フォーマットの上に記した数値はビット長です。
EP番号はエンドポイントbナす。
CRC5、CRC16は誤り検出用のチェックサムで、なんだかややこしい計算をするようです。
しかしPICの場合にはCRCについてはSIE(USB Serial Interface Engine)がこなしてくれますから、ユーザーがそれを意識する必要は全くありません。
また当記事でのUSBプロトコルの解析でも特に意識する必要はありません。
上のフォーマットにありますように(4)のハンドシェークパケットにはCRCはありません。
CPLD+SIMMを使ってUSBプロトコルの解析を![第16回]
2014.2.14upload
前へ
次へ
ホームページトップへ戻る