USBではホストの主導により通信を行っているのですが 。 ホストは通信の時間割のようなものを想定して予定を 組みます。 その基本となるものが連続した時間を 1ms ごとに区切 ったフレームと言われるものです。
例えばホストが毎フレームに1kバイトのパケットを割 り当てると 1000kバイト/秒 の転送量を保証で きます。
通信はパケットを単位として行います。 パケットは大別してToken、Data、Handshakeの3種類 があります。 この3種類のパケットを下の手順でやり取りして一連 の手順を終了します。 当方ではこの一連の手順をトランザクションと言うこ とにします。
送信 | 受信 |
---|---|
|
|
手順の実行中に次のパケットが来るまでの時間を計測 してUSBの規定時間内に来ない場合はタイムアウトにな ります。
ホストがデバイスの設定をしたり仕様を読み出したり するときに使う転送方式です。 デバイスが接続された直後にはアドレス0、エンドポイ ント0にコントロール転送でやりとりできるようになっ ています。 ホストはこれでデバイスにデバイスリクエストを発行 して前記のことを行います。
3種類のトランザクションを使います。 USBではこれを下のように定義しています。
|
手順は セットアップステージ → データステージ → ステータスステージ
と セットアップステージ → ステータスステージ
があります。
1番目はデータのあるデバイスリクエストに2番目はデ ータのないデバイスリクエストに使います。
TokenパケットにSetupを使うトランザクションです。
Dataパケットはホストが送ります。ここにデバイスリ クエストが入ります。
Handshakeパケットはデバイスが返します。
デバイスリクエストにデータを付加したりデバイスリ クエストがデバイスにデータを要求するときにそのデ ータが入ります。
TokenパケットにINかOUTを使うトランザクションです 。
DataパケットはTokenパケットによってホストが送った りデバイスが送ったりします。
HandshakeパケットはTokenパケットによってホストが 返したりデバイスが返したりします。
コントロール転送を終わらせるトランザクションです。
TokenパケットにINかOUTを使います。
DataパケットはTokenパケットによってホストかデバイ スが送ります。 パケットのデータ数は0にします。
HandshakeパケットはTokenパケットによってホストが 返したりデバイスが返したりします。
転送間隔を指定しない転送方式で実時間性の少ない 転送形態に使う方式です。
通常のトランザクションを使って通信を行います。
使用例としてプリンタの印刷データなど実時間性は低 いが大量のデータ転送に向くとされています。
転送間隔を指定する実時間性の必要な転送形態に使う 方式です。
通常のトランザクションを使って通信を行います。
使用例としてキーやマウスなどの実時間性の高い少量 のデータ転送に向くとされています。
実時間は最速でも最短の転送間隔の 1ms です。
毎フレームで転送を行う実時間性の高い大容量の転送 を行う転送方式です。
通常のトランザクションからHandshakeパケットを除い た短縮したトランザクションを使います。
使用例として音声や動画など大量のデータを一定間隔 で転送する場合に向くとされています。