基本構造 | Tokenパケット | Handshakeパケット | 詳細構造 | |||
パケットの保証 | パケットのやりとりの保証 | パケットの終了の認識 |
パケットは基本的に図のような構造になっています。 これを基本として短縮した形も使われます。
SYNCは全パケットで同じ値を使います。 PIDはパケットの種類を示すものでパケットによって違 います。 DATAの大きさはパケットによって異なります。 CRCはパケットの種類によって2種類あります。
このパケットはDATAとCRCが他のパケットと異なってい ます。 DATAは固定で11ビットなのでCRCは5ビットになってい ます。 パケットの総計はSYNCとPIDと合わせていつでも4バイ トになります。
Tokenパケットはトランザクションの先頭にあってホス ト側からのみ送り出されるパケットですDATAでデバイ スのアドレスとエンドポイントを指定します。
このパケットのDATAはバイト単位で大きさが変わります。 CRCは16ビットです。
DATAの大きさはデバイスのエンドポイントの仕様によっ て送り出し側で決定されます。
DATAパケットをホストとデバイスのどちらが送り出す かはTokenパケットのPIDで決まります。 TokenがOUTならホストがDATAパケットを送り出します 。 TokenがINならデバイスがDATAパケットを送り出します 。
DATAパケットがホストから送り出されるときにその受 け手のデバイスの指定についてはTokenの内容からアド レスとエンドポイントが示されています。
このパケットはDATAとCRCがないので2バイトの固定で す。
HandshakeパケットはDATAパケットを受けた側が返しま す。 基本的にはTokenがINならホストが返しTokenがOUTなら デバイスが返します。
パケットの先頭に必ずつける1バイトのデータで80hで す。 この80hの受信中に通信の同期が確立されます。
PIDはパケットの種類を示しており表のものがあります 。 PIDは8ビットです表中の値は4ビットですがこれを下位 の4ビットにして上位はこれを反転した値を配置します 。
TokenのOUTを例にすると 1110 0001b になります。
形式 | 名前 | PID | バイト数 | CRC | 説明 |
---|---|---|---|---|---|
Token | OUT | 0001 | 4 | 5 | ホストがDataパケットを送信する |
IN | 1001 | 〃 | 〃 | ホストがDataパケットを受信する | |
SOF | 0101 | 〃 | 〃 | フレームの開始 | |
SETUP | 1101 | 〃 | 〃 | デバイスリクエスト | |
Data | Data0 | 0011 | 可変 | 16 | 偶数番目のパケット |
Data1 | 1011 | 〃 | 〃 | 奇数番目のパケット | |
Handshake | ACK | 0010 | 2 | なし | 肯定応答 |
NAK | 1010 | 〃 | 〃 | 否定応答 | |
STALL | 1110 | 〃 | 〃 | 停止中 | |
Special | PRE | 1100 |
Handshakeパケット以外のパケットはDATAを持っていま す。
TokenパケットのDATAは通信の進行に必要な情報が置か れています。 デバイスのアドレスやエンドポイントとフレーム番号 などです。 DATAの大きさは11ビットですが5ビットのCRCと合わせ て2バイトです。
DataパケットのDATAは通信したいデータそのものが置 かれます。 DATAの大きさはエンドポイントの仕様により決められ ています。
Tokenパケットは5ビットのCRC、Dataパケットには16ビ ットのCRCを使います。 HandshakeパケットにはCRCがありません。 CRCの計算はDATAから行いますSYNCとPIDは含みません 。
5ビットのCRC f (x)=x5+x2+1
16ビットのCRC f (x)=x16+x15+x2+1
パケットの詳細は図のようになっています。 通信では8ビットのLSBから送り出されます。
通信ではデータが途中で損傷していることがあると考 えて対策されています。 データが損傷していることがわかればデータを送りな おすことも可能です。最も困るのは損傷したデータを 正常なデータと区別できないことです。
PIDは下位の4ビットを反転したものが上位の4ビットに されているのでこの整合がないとパケットと認識され ません。 これによって不確かなパケット認識を防いでいます。
DATAにはCRCが付けられているのでデータに損傷があっ たことを認識できます。
Handshakeパケットで否定応答の結果が返された場合に はDataパケットを送り出した側は次のトランザクショ ンでは次のデータではなく否定応答を受けたトランザ クションのデータを送りなおします。
Dataパケットには2種類のPIDが割り当てられていてこ れを交互に使うことでトランザクションの順番を監視 できるようになっています。奇数→偶数→奇数・・・ と送っていく訳です。
セットアップステージのDataパケットのPIDはData0で す。
データステージのDataパケットのPIDはData1から始ま ります。
ステータスステージのDataパケットはData1です。
DataパケットのPIDはData0から始まります。
DataパケットのPIDはData0から始まります。
DataパケットのPIDはData0だけを使います。 この転送のトランザクションにはHandshakeパケットを 使わないのでデータの検査結果に応じた処理はなくパ ケットの順番を監視する機構も省かれています。
DataパケットはDATAが可変なのでパケットの最後を示 すために通信線が特別の状態になります。 これをEOPと言います。パケットの最後の2ビット期間 この状態になります。パケットの受け手はEOPを1ビッ ト検出するとパケットの最後と認識します。
パケットのデータは同期が確立されていないと読み取 れませんが通信線はデータに2値、EOPに1値の3値を使 えるので EOP は同期確立に関係なく通信線の状態だけ で認識できるようになっています。