USB 傳輸協定深度解析:架構、封包、事務與四大傳輸模式
一、傳輸線結構
USB 線纜包含四線:地線 (GND)、電源線 (VBUS, 5V, 最大 500mA)、D+、D-(差分訊號,3.3V 電平)。資料由低位元先傳送,採 NRZI 編碼(0 翻轉、1 保持),並以位元填充(連續六個 1 插入 0)確保訊號變換。
二、資料階層:域 → 封包 → 事務 → 傳輸
1. 域 — 最小單位,七種類型
- 同步域 (SYNC):8 位元
00000001,時鐘同步。
- 標識域 (PID):4 位元 ID + 4 位元反碼,共 16 種,識別封包類型。
- 位址域 (ADDR):7 位元,裝置位址(0 為預設),故最多 127 裝置。
- 端點域 (ENDP):4 位元,每裝置最多 16 端點。
- 幀號域 (FRAME):11 位元,同步傳輸用。
- 資料域 (DATA):0~1023 位元組,整數位元組長度。
- 檢驗域 (CRC):CRC5 或 CRC16,模 2 除法運算。
2. 封包 — 四大類型
- 令牌封包:IN、OUT、SETUP、SOF,格式
SYNC+PID+ADDR+ENDP+CRC5。
- 資料封包:DATA0、DATA1 交替傳送(同步傳輸固定 DATA0),格式
SYNC+PID+DATA+CRC16。
- 握手封包:ACK、NAK、STALL,格式
SYNC+PID。
- 特殊封包:PRE(前導碼,啟動低速裝置)。
3. 事務 — 三階段
- IN 事務:主機發 IN 令牌 → 裝置回資料/NAK/STALL → 主機回 ACK。
- OUT 事務:主機發 OUT 令牌 → 主機送資料 → 裝置回 ACK/NAK/STALL。
- SETUP 事務:主機發 SETUP 令牌 → 固定 8 位元組 DATA0(標準請求) → 裝置回 ACK。
4. 傳輸 — 四大模式
- 中斷傳輸:鍵盤/滑鼠等 HID 裝置,由 IN/OUT 事務組成。
- 批量傳輸:大量資料,無固定頻寬,總線忙時延後。
- 同步傳輸:即時性音訊/視訊,無握手階段,資料封包固定 DATA0。
- 控制傳輸:最複雜,三階段(Setup、可選 Data、Status),用於列舉、設定裝置。
三、PID 編碼表
USB 1.1 定義 10 種 PID,USB 2.0 擴充至 16 種,涵蓋令牌、資料、握手、特殊封包。
四、裝置列舉流程
六態態:Attached(偵測)、Powered(供電)、Default(位址 0)、Address(分配唯一位址)、Configured(取得描述符、設定)、Suspended(3ms 閒置進入省電)。
五、標準裝置請求 — 11 種命令
結構:bmRequestType(1) + bRequest(1) + wValue(2) + wIndex(2) + wLength(2)。包含 GET_STATUS、CLEAR_FEATURE、SET_FEATURE、SET_ADDRESS、GET_DESCRIPTOR、SET_DESCRIPTOR、GET_CONFIGURATION、SET_CONFIGURATION、GET_INTERFACE、SET_INTERFACE、SYNCH_FRAME。
六、描述符架構
五種描述符:裝置、設定、字串、介面、端點,呈樹狀包含關係。文中提供完整 C 結構體定義。
理解這些基礎是 USB 固韌體開發的入門關鍵。