USB:仕様
FAQ USB 仕様 質問一覧
1.USB仕様全般
- USB1.0とUSB1.1の違いは?
- 1つのUSBコントローラで複合デバイス(低速と高速)をつくれますか?
- USB複合デバイスをつくる場合、1つのUSBコントローラで複合デバイス(低速と高速)を 実現できますか?
- PC2台:周辺1台の場合、切り替えするためのコントロ-ラ-が別々に必要になるのでしょうか?それとも、回路構成で回避可能でしょうか?
2.USB仕様 7章(電気的仕様)
- サスペンドの再開信号が終了してから3msでバストラフィックが再開するのはなぜか?
- デバイスの速度の判別方法は?
- USB仕様1.1において、"シャーシGNDとUSBバスGNDは分離する必要あり" の記述がない理由は?
- リクエストに対するデバイスのレスポンス処理が不可の場合のホストの動作は? タイムアウトでポート使用不可と判断するのですか? それとも、一定の時間をおいて再度、リクエストを転送するのですか?
- ML60852Aはレジューム受信後、何msec以内に立ち上がらなければならないのか?
- サスペンド状態から、復帰する場合のホストからのトリガ信号は?
3.USB仕様 8章 プロトコル層
- 高速/低速の入力信号が同時にデバイスに入力される場合どうなりますか?
- USB規格でのLSBfirstの意味は?(送信データFIFOにデータをWriteする場合LSBFirstでWriteするよう規定されていますが、これはどういうことか?)
4.USB仕様 9章 USBデバイス・フレームワーク
5.マス・ストレージ
- マス・ストレージ・デバイスクラスとは?
- USBでのSCSIはどうなっていますか? また、SCSIの命令コマンドは何バイトになりますか?(UFIクラスを見ましたところ、全ての命令コマンドが10バイトで構成されていました。通常SCICを考えると、6/10/12バイトとそのコマンド毎にバイト数が異なります。
6.他インターフェースとの違い
FAQ USB 仕様 回答
1.USB仕様全般
【 回 答 】
概略は下記の通りです。
- 私どもが理解している変化点は下記の通りです。
- [1] 電気特性の明確化
- [2] EP0ストール / ストール・リカバー・プロトコルの明確化
- [3] インタラプトOUT転送の導入
詳細については、下記のusb forumホームページのドキュメントを参照ください。
http://www.usb.org/developers/ - frequesnty asked question
- Specifications and Compliance : question #2
概略は下記の通りです。
-
【 概 略 】
- USB1.1とUSB1.0両方のハードウェアのシステム・ソフトウェア動作への提案
- 不適切な情報の削除
- 冗長部分の削除
- 定義の改善と仕様中の共通事項の使用のあいまいさを少なくした
- 新機能の追加
-
5章 データフロー
- デフォルト・コントロール・エンドポイントの定義と矛盾のない使用法
- 読みやすくするためにフォーマットを変更
-
6章 機械的特性
- DWG(デバイス・ワーキング・グループ)のケーブル・ワーキング・グループによる書き直し
-
7章 電気的特性
- テスト方法の定義
- 接続イベントの説明(シーケンスとタイミング)
- 低速デバイスでの実際の負荷について記述
-
8章 プロトコル層
- プロトコルに対するファンクション・ストール
- 決定したアイソクロナス・データのトグル方法
-
9章 デバイスフレームワーク
- デバイス状態に対するコマンド処理
- コマンド処理エラーの説明
- リクエスト処理の説明
-
10章 USB ホスト ハードウェア&ソフトウェア
- ホストコントローラ必要条件の説明
- 電力制御/リモート-ウェイクアップ推奨
-
11章 ハブ仕様
- 説明改善のための書き直し
- いろいろなケースをカバーするためにハブに対する仕様の変更
(USB仕様1.0においてカバーされていなかったいろいろなケースをカバーするために変更)
(いろいろなケース=サスペンド/レジュ-ム時のバス状態のリセット/レジュ-ム衝突の評価)
【 回 答 】
- 一般に低速ファンクションと高速ファンクションの両方を持つデバイスを実現することはできません。
【 回 答 】
- 一般に低速ファンクションと高速ファンクションを持つデバイスを実現することはできません。例えば、マウスとバルクインターフェースを複合したインターフェース機能を持つデバイスであれば、高速対応のデバイスで対応できます。この場合、マウスのインターフェースも高速(12Mbps)での通信となります。
【 回 答 】
- USB仕様の要求事項的には、PC2台に周辺1台を組み合わせることはできません。同時に通信が起こるようであれば、それぞれ別のUSBデバイスコントローラが必要になります。
同時には通信をしないということであれば、片方のデバイスを接続する場合にもう一方のデバイスは、バスから電気的もしくは機械的に切り離すということが考えられます。しかし、バスからの切り離しを切り替えスイッチを使用して行う場合、D+/D-ライン上にスイッチを置く事になります。USB仕様としては、D+/D-の信号ライン上にインピーダンス整合のための抵抗とエッジレート調整のためのキャパシタを置くこと以外は認められません。
このような回路を外付けした場合、現象的には、USB仕様の求めるハブ5段&5メートルケーブルでの通信は動作しないと考えられます。USB仕様的には問題があることを認識頂いた上でお客様で判断頂く必要があります
2.USB仕様 7章(電気的仕様)
【 回 答 】
- USB仕様7.1.7.5において、バスが再開された後、ホストは3ms以内にバス・トラフィックの送信を再開してシステムを保留ステートに戻らないようにしなければならない"とあるからです。また、3ms後に来るトラフィックはあくまでもアウェーク直後にサスペンドになることを防止するものであるのでMCUが応答する必要はないと思います。
【 回 答 】
- デバイスの速度判別は、USB仕様7.1.5と11.8.2を見ていただければおわかりいただきますように、デバイスのアップストリームポートのプルアップ抵抗(1.5KΩ)がD+/D-のどちらにあるかで判定されます。ハブ(ホスト)がD+/D-のどちらかの信号線上の電圧をダウンストリームポートで検出します。D+で電圧検出した場合は、高速デバイス(12Mbps)で、D-で電圧検出した場合は、低速デバイス(1.5Mbps)です。
【 回 答 】
- 事情はわかりませんが、USB1.0仕様で記述されていることは、シャーシGNDをAC-GNDに接地する場合のことです。AC-GNDがまちまちであるということは、USB機器に限らないことですから、取りたててUSB仕様として言うべきことではないと考えたのかもしれません。
【 回 答 】
- このご質問に対するご回答は、2つの側面があると思います。
- 1. USB規格において、デバイス側の処理のタイミングがいくつか定義されており、このタイミングの中には、USBコントローラをコントロールするファームウェアに関わるものもあります。例えば、USB 1.1仕様書 7.1.7.1やUSB 1.0仕様書 7.1.4.1のConnect and DisconnectSignalingの項で定義されているUSBデバイスをバスに接続/切断したときのイベント-タイミングの一部は、ソフトウェアの関与が必要になります。このようなUSB規格で定義されているものに対応しないと、ホスト側のUSBデバイス認識処理に失敗します。
- 2. ホストが、接続したUSBデバイスを正常に認識した後、そのUSBデバイスがバス上から取り除かれるまでの通信処理は、そのデバイス毎に用意するデバイスドライバが行います。したがって、ホスト側のデバイスドライバとUSBデバイス側のファームウェアを協調させるようなシステム設計が可能です。USBの転送プロトコル自体は、USBデバイス側の処理が間に合わないことも想定されており、タイムアウトによる中断処理等は、デバイスドライバが行うことで対応できます。
【 回 答 】
- デバイスがレジュームを受けた後、再開回復時間として10msが与えられています。
これについては、USB1.1仕様の7.1.7.5を参照ください。よって、MCUはこの時間内に立ち上がる必要があります。
【 回 答 】
- サスペンド状態から、復帰する場合のホストからのトリガ信号はレジューム信号です。
レジューム信号:20ms以上のKステートに続く低速のEOP[END of Packet]のこと。
(USB仕様7.1.7.5を参照のこと)
3.USB仕様 8章 プロトコル層
【 回 答 】
- USB仕様8.6.5とUSB仕様11.8.4を参照していだだきますとわかりますように、高速データは、低速デバイスには伝送されません。これは、ハブにより制御されます。低速データは、低速デバイスと高速デバイスの両方に伝送されます。データが高速か低速かの判断は、データパケットのPIDにより判断されます。低速データには、必ず特殊PID(PRE PID)が前もって伝送されます。(PRE PID:プリアンブル・パケット・識別子のこと。
詳しくは、USB仕様 8.3.1 表8-1を参照ください)
このPIDによりハブはデータが低速用データであることを認識できます。そして、ハブは対応する低速デバイスにデータを伝送します。低速データは高速デバイスにも入力されますが、PIDにより誤って解釈することはありません。
なぜならば、PRE PIDに続くデータが無効であると判断できるからです。
【 回 答 】
- LSBFirstとは、リトル・エンディアンを意味します。USB規格でのLSBFirstとは、個々のデータフィールドがリトル・エンディアンになっているので、各々のデータ-フィールドは、その順序で書きこむようにしてくださいという意味です。例えば、18バイトの書きこみを行う場合を例にして説明します。
EP0の最大パケットサイズが8バイトの場合には、
8 Bytes --> 8Bytes --> 2 Bytes の順番でデータを書き込みます。各々のデータ・フィールドは、LSBFirstのルールが適用されます。デバイス・ディスクリプタのデータ転送の場合を例に示します。
[デバイス・ディスクリプタ]
bLength 0x12
bDescriptorType 0x01
bcdUSB 0x100
bDeviceClass 0x00
bDevideSubClass 0x00
bDeviceProtocol 0x00
bMaxPacketSize0 0x08
idVendor 0x04d7
idProduct 0x1bd9
bcdDevice 0x0001
iManufacturer 0x00
iProduct 0x00
iSerialNumber 0x00
bNumConfigurations 0x01
というディスクリプタの場合には、以下の順番でデータをホストに転送します。
送信バイト順序 : 実際の値
1バイト目 : 0x12
2バイト目 : 0x01
3バイト目 : 0x00
4バイト目 : 0x01
5バイト目 : 0x00
6バイト目 : 0x00
7バイト目 : 0x00
8バイト目 : 0x08
9バイト目 : 0xd7
10バイト目 : 0x04
11バイト目 : 0xd9
12バイト目 : 0x1b
13バイト目 : 0x01
14バイト目 : 0x00
15バイト目 : 0x00
16バイト目 : 0x00
17バイト目 : 0x00
18バイト目 : 0x01
LSBFirstについては、USB仕様8.1を参照してください。
4.USB仕様 9章 USBデバイス・フレームワーク
【 回 答 】
- 1. デバイスアドレスを送信すると、ホストはデバイスから構成情報
(構成ディスクリプタ)をリードします。
(対応リクエスト→GET_DESCRIPTOR)
↓
2. この構成情報を元にして、ホストはデバイスに構成値を割り当てます。
(対応リクエスト→SET_CONFIGURATION)
この構成値の割り当てにより、エンドポイントは構成ディスクリプタに記述されている特性で使用可能となります。デバイスは構成ディスクリプタで記述されている電力をVBUSから引き出せるようになり、デバイスは使用可能となります。
(詳細については、USB仕様9.1.2を参照ください)
5.マス・ストレージ
【 回 答 】
- Mass Storage Device Classの転送方式には,Control/Bulk/Interrupt Transport(以下CBI転送)とBulk-Only Transport(以下BO転送)があります。マス・ストレージ・デバイスクラスは、どちらかの転送方式により実現されます。
http://www.usb.org/ において、仕様の公開されているデバイスクラスは、使用する転送方式のコマンド/データ部に規格(SFF-8070iやSCSI)で規定される-コマンドを埋め込むことによって実現します。
例えば,CBI転送ではControl Write転送のデバイスクラスリクエストのデータ部に埋め込まれ、BO転送ではBulk-OUT転送のCommand Block Wrapper部にコマンドを埋め込みます。USB Floppy Deviceは、UFIサブクラスとしての仕様が公開されています。
(UFI:USB Floppy Interface)
- サブクラスにBulk-Only転送(以降 BO転送)を用いた場合について説明させて頂きます。命令コマンドサイズは、Control/Bulk/Interrupt Transport(以降 CBI転送)を用いたUFI Rev1.0では12Bytesとなっておりますが、BO転送ではコマンドサイズを指定することが可能です。
Bulk-Only Transport Revision 1.0 の 5.1 Command Block Wrapper (CBW)によりますとCBWのサイズは31byteに固定ですが、命令コマンドサイズを指定するbCBWCBLengthには1から16の値を用いることができ、CBWCBでの指定サイズ以降のデータは無視すべきであるとあります。
--以下、仕様からの内容抜粋です。下記の文章は実際は英文で書かれているので、和訳したものを記しています--
===仕様内容====
bCBWCBLength: CBWCB(Command Block Wrapper Command Block)の有効バイト長。 これは、コマンド・ブロックの有効長を定義している。
合法的な値は1~16(HEX値では01h~10h)です.これらの値以外はリザーブされています。 CBWCB: デバイスにより実行されるコマンドブロックのこと。
デバイスはCBWCBフィールド内の最初のbCBWCBLengthバイト分のデータをコマンド-ブロックと解釈します。このコマンド・ブロックは、bInterfaceSubClassにより確認されたコマンド・セットにより定義されています。
bInterfaceSubClassはBulk‐Only Data Interface Descriptorで記述されています。デバイスにより、サポートされたコマンド・セットが16バイトよりも短い場合は、意味のあるバイトは最初に転送され、オフセット値15(F[H])で始まります。
デバイスはオフセットのバイト数だけCBWCBフィールドの内容を無視します。
(15バイト+bCBWCBLength-1バイト)
===========
上記事項に関しては、仕様書"Universal Serial Bus Mass Storage Class Bulk‐Only Transport Revision 1.0 "を参照ください。
6.他インターフェースとの違い
【 回 答 】
- ご存知のように、USBとIEEE1394は物理的特性、電気的特性、プロトコルが全く異なるインターフェースです。IEEE1394については、関連の資料をごらんください。