パケット

目次
基本構造
Tokenパケット
Handshakeパケット
詳細構造
パケットの保証
パケットのやりとりの保証
パケットの終了の認識

基本構造

FG05L18A.jpg(2943 byte)

パケットは基本的に図のような構造になっています。 これを基本として短縮した形も使われます。

SYNCは全パケットで同じ値を使います。 PIDはパケットの種類を示すものでパケットによって違 います。 DATAの大きさはパケットによって異なります。 CRCはパケットの種類によって2種類あります。

Tokenパケット

このパケットはDATAとCRCが他のパケットと異なってい ます。 DATAは固定で11ビットなのでCRCは5ビットになってい ます。 パケットの総計はSYNCとPIDと合わせていつでも4バイ トになります。

Tokenパケットはトランザクションの先頭にあってホス ト側からのみ送り出されるパケットですDATAでデバイ スのアドレスとエンドポイントを指定します。

Dataパケット

このパケットのDATAはバイト単位で大きさが変わります。 CRCは16ビットです。

DATAの大きさはデバイスのエンドポイントの仕様によっ て送り出し側で決定されます。

DATAパケットをホストとデバイスのどちらが送り出す かはTokenパケットのPIDで決まります。 TokenがOUTならホストがDATAパケットを送り出します 。 TokenがINならデバイスがDATAパケットを送り出します 。

DATAパケットがホストから送り出されるときにその受 け手のデバイスの指定についてはTokenの内容からアド レスとエンドポイントが示されています。

Handshakeパケット

このパケットはDATAとCRCがないので2バイトの固定で す。

HandshakeパケットはDATAパケットを受けた側が返しま す。 基本的にはTokenがINならホストが返しTokenがOUTなら デバイスが返します。

詳細構造

SYNC

パケットの先頭に必ずつける1バイトのデータで80hで す。 この80hの受信中に通信の同期が確立されます。

PID

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


DATA

Handshakeパケット以外のパケットはDATAを持っていま す。

TokenパケットのDATAは通信の進行に必要な情報が置か れています。 デバイスのアドレスやエンドポイントとフレーム番号 などです。 DATAの大きさは11ビットですが5ビットのCRCと合わせ て2バイトです。

DataパケットのDATAは通信したいデータそのものが置 かれます。 DATAの大きさはエンドポイントの仕様により決められ ています。

CRC

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から送り出されます。

FG05C02A.jpg(41219 byte)

パケットの保証

通信ではデータが途中で損傷していることがあると考 えて対策されています。 データが損傷していることがわかればデータを送りな おすことも可能です。最も困るのは損傷したデータを 正常なデータと区別できないことです。

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 は同期確立に関係なく通信線の状態だけ で認識できるようになっています。