通信概要

時分割

USBではホストの主導により通信を行っているのですが 。 ホストは通信の時間割のようなものを想定して予定を 組みます。 その基本となるものが連続した時間を 1ms ごとに区切 ったフレームと言われるものです。

例えばホストが毎フレームに1kバイトのパケットを割 り当てると 1000kバイト/秒 の転送量を保証で きます。

通信要素

通信はパケットを単位として行います。 パケットは大別してToken、Data、Handshakeの3種類 があります。 この3種類のパケットを下の手順でやり取りして一連 の手順を終了します。 当方ではこの一連の手順をトランザクションと言うこ とにします。

通信手順
送信 受信
  1. ホストがTokenを送る。
  2. ホストが続いてDataを送る。
  3. デバイスはHandshakeを返す。
  1. ホストがTokenを送る。
  2. デバイスがDataを送る。
  3. ホストがHandshakeを返す。

手順の実行中に次のパケットが来るまでの時間を計測 してUSBの規定時間内に来ない場合はタイムアウトにな ります。

通信方式

コントロール転送

ホストがデバイスの設定をしたり仕様を読み出したり するときに使う転送方式です。 デバイスが接続された直後にはアドレス0、エンドポイ ント0にコントロール転送でやりとりできるようになっ ています。 ホストはこれでデバイスにデバイスリクエストを発行 して前記のことを行います。

3種類のトランザクションを使います。 USBではこれを下のように定義しています。

  1. セットアップステージ
  2. データステージ
  3. ステータスステージ

手順は セットアップステージ → データステージ → ステータスステージ
セットアップステージ → ステータスステージ があります。

1番目はデータのあるデバイスリクエストに2番目はデ ータのないデバイスリクエストに使います。

セットアップステージ

TokenパケットにSetupを使うトランザクションです。

Dataパケットはホストが送ります。ここにデバイスリ クエストが入ります。

Handshakeパケットはデバイスが返します。

データステージ

デバイスリクエストにデータを付加したりデバイスリ クエストがデバイスにデータを要求するときにそのデ ータが入ります。

TokenパケットにINかOUTを使うトランザクションです 。

DataパケットはTokenパケットによってホストが送った りデバイスが送ったりします。

HandshakeパケットはTokenパケットによってホストが 返したりデバイスが返したりします。

ステータスステージ

コントロール転送を終わらせるトランザクションです。

TokenパケットにINかOUTを使います。

DataパケットはTokenパケットによってホストかデバイ スが送ります。 パケットのデータ数は0にします。

HandshakeパケットはTokenパケットによってホストが 返したりデバイスが返したりします。

バルク転送

転送間隔を指定しない転送方式で実時間性の少ない 転送形態に使う方式です。

通常のトランザクションを使って通信を行います。

使用例としてプリンタの印刷データなど実時間性は低 いが大量のデータ転送に向くとされています。

インタラプト転送

転送間隔を指定する実時間性の必要な転送形態に使う 方式です。

通常のトランザクションを使って通信を行います。

使用例としてキーやマウスなどの実時間性の高い少量 のデータ転送に向くとされています。

実時間は最速でも最短の転送間隔の 1ms です。

アイソクロナス転送

毎フレームで転送を行う実時間性の高い大容量の転送 を行う転送方式です。

通常のトランザクションからHandshakeパケットを除い た短縮したトランザクションを使います。

使用例として音声や動画など大量のデータを一定間隔 で転送する場合に向くとされています。