Skip to main content

Module usb_txn

Module usb_txn 

Source
Expand description

L1: USB トランザクション完了判定(純粋ロジック)。

§なぜ純粋モジュールにするか

usb_transfer は HCINT のビットを見て「成功/再試行/失敗」を決めるが、 この判断を誤ると

  • NAK を失敗と誤判定 → 正常な「今はデータ無し」で転送を諦める
  • 失敗を成功と誤判定 → 送っていないデータを送信済み扱いし、 データトグルとシーケンス番号がずれる(静かに壊れる
  • STALL を再試行 → 永久ループ のいずれかになる。受信側 (usb_rx_state.rs) で同種の欠陥 (NAK 誤分類でチャネル永久停止)を実際に踏んでいるので、 送信側も同じ形で保証する。

§典拠

USB 2.0 §8.5(Transaction packet sequences)、 DWC2 の HCINT ビット定義。

Enums§

TxnOutcome
トランザクションの判定結果。

Constants§

ACK
BBL_ERR
CH_HALTED
DATA_TGL_ERR
FRM_OVRUN
NAK
NYET
STALL
XACT_ERR
XFER_COMPL
HCINT のビット位置。

Functions§

classify
HCINT からトランザクションの結末を判定する。
should_advance_toggle
この結末でデータトグルを進めてよいか。
should_retry
この結末で再試行してよいか。
transferred_len
転送済みバイト数を求める。requested は要求長、remaining は HCTSIZ の残り。