設計の基本は仕様の理解 ――高速シリアル通信を実現するために知っておくべき最低限の知識

掛須利夫

tag: 組み込み 半導体 実装

技術解説 2004年1月30日

3)トークンとPID

 データ・パケットを識別するための特殊コードとして,USB 2.0のトランザクションにはパケットID(PID)があります.表4に示したように,PIDには使用目的によってさまざまなものがあります.

4)USBパケットとハンドシェーク

 代表的なUSB OUT転送は図20のようなパケット構成になっています.パケットとはデータ転送の最小単位のことです.例えば,図20のパケット1はアウト・トークン(OUT PID),パケット2はデータ(DATA1 PID)です.パケット3はハンドシェークで,デバイスからデータを正常に受信した場合に送られるACK(アクノリッジ)PIDです.パケット4は,トランザクションとしての二つ目のアウト・トークンです.パケット5は直前のOUT PIDに続くデータで,DATA0 PIDになります.パケット6は,デバイスがデータを正常に受信した際はACK PIDを送ります.これで通信が終了します.

 OUT転送については,フルスピード・モードとハイスピード・モードでは動作が異なります.フルスピード・モードではデバイスが動作中でデータ受信できない状態でも,データ・パケットが送出されます.一方,ハイスピード・モードでは新たにPING PIDが追加されました.ホストは最初にOUTエンドポイントに対してPINGトークンを送り,デバイスからACK PIDを受信したときのみ,アウト・トークンとデータを送ります.

 DATA PID(DATA0またはDATA1)はエラー検出に使用されます.これは,たとえ正常受信を示すACK PIDを受け取っても,DATA0とDATA1が交互に届かない場合は,ハンドシェークPIDがホストまたはデバイスからまちがって発行された可能性があり,エラーとなります.

 SETUPトークンはコントロール(CONTROL)転送に使用します.USBデバイスはホストからの8バイトのデバイス・リクエスト(device requests)をデコードします.ハンドシェークPIDはUSB転送のステータスを示します(表5).PRE(プリアンブル)PIDはロースピード・モード対応デバイスで使用されます.しかし,ハイスピード・モード対応デバイスの多くは,ロースピード・モードをサポートしていません.

〔表4〕パケットID
太字はUSB 2.0で追加されたもの.

PIDタイプ PID名称
トークン IN,OUT,SOF,SETUP
データ DATA0,DATA1,DATA2,MDATA
ハンドシェーク ACK,NAK,STALL,NYET
特殊コード PRE,ERR,SPLIT,PING

f20_01.gif
〔図20〕USBバルク転送のパケット構成
パケット1はアウト・トークン,パケット2はデータ,パケット3はハンドシェーク,パケット4は二つ目のアウト・トークンである.パケット5は直前のOUT PIDに続くデータであり,パケット6はデバイスがデータを正常に受信した際はACK PIDを送る.

〔表5〕USB転送のステータス

ハンドシェークPID 意 味
ACK(アクノリッジ) 正常受信の成功を意味する
NACK(ネガティブ・
アクノリッジ)
ビジーなので再送を要求するという意味.一時的な通信エラーを示すが,デバイスとして応答不可能な故障は持っていない
STALL
(ストール)
通信を阻害するトラブルが起きていることを意味する.これは,ホストとデバイスの間でうまく通信できていない状態を示す.例えば,デバイスがホストからのデバイス・リクエストを理解できない場合など
NYET
(ノット・イエット)
ハイスピード・モードのみで使用される.ACKと同じ意味で,直前のデータは正しく受信したが,新たなOUT転送データの受信準備ができていない状態.例えば,エンドポイント・バッファが空いていないときにデバイスから送信される
組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日