ホストとデバイスが接続されると,これらの間でコンフィギュレーションが実行される.
通信にはエンドポイントと呼ばれるFIFOを使ってデータをやり取りする.このコンフィグレーションが行われる前はコントロール転送が可能であり,これに対応するのがエンドポイント0(FIFO0)となる.
このコンフィギュレーション実行されることでエンドポイントが新たに追加される.
コントロール転送以外のデータのやり取りは片方向のみであるため,送信受信でそれぞれ1本ずつ必要になる.
USBの通信速度の種類によって使えるエンドポイントの本数が変わってくる.
ロースピードはFIFO0を除くFIFO1,2のみ,ハイスピードはFIFO1~15まで.
これはUSBの規格上の上限本数であり,USBデバイス機能を備えているマイコンなど実施にデバイスに設定できるエンドポイントの本数はもっと少ないことがあるので注意.
USBの転送モードは全部で4つの転送モードが存在する.
USB全般の情報としてはhttps://www.beyondlogic.org/usbnutshell/usb1.shtmlがよくまとまっているように見える
接続したらまずホストとネゴシエーションしてからOKもらわないと500mA吸ってはいけない,ネゴシエーション前(接続直後)にホストから吸っていい電流は100mAまで
差動インピーダンスが90Ωになるように配線することを意識する.
コネクタの規格
UBS2.0の通信線のみでなく,CC端子の処理を忘れずに行う必要がある.DFP側のCC端子は5.1kΩの抵抗でプルダウンしておく必要がある.USBの規格書にはRdと記載されている.
CC端子がデバイスの接続検出,コネクタの向きを検出するためである.
CC端子が開放されたまだと,ホスト側はVBUSに5の電源を供給してくれない.
Type-CケーブルはCCが片方しか接続されていないため,どちらがRdを検出したかでもう片方をVCONNとして使う.
これはUSB PDやE-Markのケーブルを使う場合に必要なので,それ以外では特に気にしなくても良さそう.
USBのバス上データをやり取りする.
FT232みたいな仮想COMポートを作るときに必要になる.
CDCクラス内のLineConfigをいじると通信速度の設定が行える.
ODriveはLineConfigで通信速度を115200bpsに固定している.
加えてエンドポイントを送受信それぞれ1本ずつ増やしているっぽい.
usb_cdc_if.c
を参照のこと.
480Mbpsで通信
125usごとにマイクロフレームと呼ばれるフレームが開始される(基本的にホスト側から)
設計の基本は仕様の理解 ――高速シリアル通信を実現するために知っておくべき最低限の知識
http://www.poweredusb.org/pdf/usb20.pdf
USBの通信プロトコル【USB仕様と転送速度】
USBの基礎知識 ――パケットのフォーマットからプロトコルの詳細まで
パケットのフォーマットからプロトコルの詳細まで USB の基礎知識
USBの基本アーキテクチャ
USBポートは電源ではありません
アートワーク
HX3 ハードウェア設計ガイドラインおよび回路図チェックリスト
配線設計の極意
●USBデータ信号の配線のための基本ルール
Full-Speed USB2.0 基板設計ガイドライン
Type-C
USB Type-C(TM) Cable and Connector Specification Revision 1.4, March 29, 2019
USB Type-Cで逆挿入や多様な電力供給が可能に、その仕組みは?
USB Type-C関係の規格・用語を整理
【USB】第5回 既存のUSBコネクターの問題を解消する新規格「USB Type-C」とは (2/2)
AN1953 USB Type-C™ の概要