usb

USB(Universal Serial Bus)

ホストとデバイスが接続されると,これらの間でコンフィギュレーションが実行される.
通信にはエンドポイントと呼ばれるFIFOを使ってデータをやり取りする.このコンフィグレーションが行われる前はコントロール転送が可能であり,これに対応するのがエンドポイント0(FIFO0)となる. このコンフィギュレーション実行されることでエンドポイントが新たに追加される. コントロール転送以外のデータのやり取りは片方向のみであるため,送信受信でそれぞれ1本ずつ必要になる.
USBの通信速度の種類によって使えるエンドポイントの本数が変わってくる.
ロースピードはFIFO0を除くFIFO1,2のみ,ハイスピードはFIFO1~15まで.
これはUSBの規格上の上限本数であり,USBデバイス機能を備えているマイコンなど実施にデバイスに設定できるエンドポイントの本数はもっと少ないことがあるので注意.
USBの転送モードは全部で4つの転送モードが存在する.

  • コントロール転送
  • バルク転送
  • インタラプト転送
  • アイソクロナス転送

USB全般の情報としてはhttps://www.beyondlogic.org/usbnutshell/usb1.shtmlがよくまとまっているように見える

Power (VBUS)
USB Descriptors

接続したらまずホストとネゴシエーションしてから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を参照のこと.

USB CDCについて
とりメモ Communication Device Class

参考文献

  • usb.txt
  • 最終更新: 2023/12/03
  • by yuqlid