一. 簡介
本文簡單學習一下,嵌入式開發中,usb的輸出端點和輸入端點。
在嵌入式開發的 USB 通信場景中,輸出端點(OUT Endpoint)?和?輸入端點(IN Endpoint)?是 USB 設備與主機(如電腦、嵌入式主控)進行數據交互的核心 “通道”,其設計和使用直接決定了設備的通信能力。兩者的核心區別圍繞數據流向展開,同時需結合嵌入式設備的硬件特性、USB 協議規范及驅動邏輯來理解。
二.?嵌入式開發中,usb通信中輸出端點和輸入端點
1.?核心定義:數據流向是根本區別
在嵌入式開發中,USB通信的“輸入”(IN)和“輸出”(OUT)端點是以USB主機(Host)為參考基準來定義的。
端點類型 | 數據流向 | 核心作用(嵌入式場景) | 典型應用舉例 |
---|---|---|---|
輸出端點(OUT) | 主機 → 嵌入式設備 | 接收主機下發的控制指令、配置參數或待處理數據 | 主機向嵌入式設備發送控制命令(如電機轉速設置)、向 U 盤寫入文件數據 |
輸入端點(IN) | 嵌入式設備 → 主機 | 向主機上報設備狀態、傳感器數據或處理結果 | 嵌入式設備向主機上傳溫濕度數據、U 盤向主機讀取文件數據、攝像頭向主機傳輸圖像幀 |
2.?嵌入式場景下的共性特性
無論是輸入還是輸出端點,在嵌入式 USB 通信中均需遵循以下共性規則,這些規則由 USB 協議和嵌入式硬件限制共同決定:
(1)?端點是 “單向、專用” 的通道(除了端點0,它用于控制傳輸,可雙向)
- 每個端點僅支持一個方向的傳輸(要么 IN,要么 OUT),無法雙向復用(除了端點0,它用于控制傳輸,可雙向);
- 嵌入式設備的端點數量有限(受 USB 控制器硬件限制,如多數低端控制器支持 4~8 個端點),需根據需求分配(如一個設備可同時包含 1 個 OUT 端點和 1 個 IN 端點,實現雙向通信)。
(2)?與傳輸類型強綁定
嵌入式設備的端點必須關聯 USB 協議定義的傳輸類型(不同傳輸類型對應不同的端點類型),輸入 / 輸出端點僅存在于以下 3 種傳輸類型中(控制傳輸的端點有特殊規則,見下文):
傳輸類型 | 支持的端點方向 | 嵌入式場景用途 |
---|---|---|
批量傳輸(Bulk) | IN 端點、OUT 端點 | 大量數據傳輸(如 U 盤、數據記錄儀),需保證數據完整性 |
中斷傳輸(Interrupt) | IN 端點、OUT 端點 | 小批量、周期性數據(如鍵盤(IN)、鼠標(IN)、設備狀態上報) |
同步傳輸(Isochronous) | IN 端點、OUT 端點 | 實時性數據(如 USB 麥克風(IN)、USB 音箱(OUT)),不保證數據完整性 |
(3)?控制傳輸的特殊端點:端點 0(默認控制端點)
所有 USB 設備必須包含一個端點 0(默認控制端點),它是雙向的(可同時實現 IN 和 OUT 功能),僅用于設備枚舉、配置、命令交互(如主機查詢設備信息、發送復位命令),不用于普通數據傳輸。
3.?嵌入式開發中的關鍵差異(OUT 端點 vs IN 端點)
在嵌入式硬件設計、協議棧配置和驅動開發中,輸入 / 輸出端點的處理邏輯存在顯著差異,具體體現在以下 4 個維度:
對比維度 | 輸出端點(OUT) | 輸入端點(IN) |
---|---|---|
硬件觸發邏輯 | 主機向設備發送數據時,USB 控制器產生?OUT 中斷,嵌入式 MCU 需中斷服務函數中讀取數據 | 設備有數據待上傳時,需主動向 USB 控制器 “提交” 數據,或等待主機發起 IN 事務后,控制器產生?IN 中斷觸發數據發送 |
數據緩沖區 | 需在嵌入式設備中分配 “接收緩沖區”(用于存儲主機發來的數據),緩沖區大小需 ≥ 端點的 “最大包大小” | 需分配 “發送緩沖區”(用于存儲待上傳到主機的數據),緩沖區大小需 ≥ 端點的 “最大包大小” |
協議棧配置 | 需在 USB 設備描述符(Endpoint Descriptor)中設置?bEndpointAddress ?最高位為?0(如端點地址?0x02 ?表示端點 2,OUT 方向) | 需設置?bEndpointAddress ?最高位為?1(如端點地址?0x82 ?表示端點 2,IN 方向) |
錯誤處理 | 若主機發送的數據錯誤(如 CRC 校驗失敗),嵌入式設備無需處理,主機將自動重傳(批量 / 中斷傳輸) | 若設備發送的數據錯誤,主機可能丟棄(同步傳輸)或要求重傳(批量 / 中斷傳輸),需在驅動中處理重傳邏輯 |
三.?嵌入式開發實戰關鍵點
1. 端點參數配置(核心是 “最大包大小”)
嵌入式設備的每個輸入 / 輸出端點必須配置?最大包大小(Max Packet Size),該值由 USB 設備速度和傳輸類型決定,直接影響通信效率,協議規定的默認值如下:
USB 設備速度 | 批量傳輸(Bulk)最大包大小 | 中斷傳輸(Interrupt)最大包大小 | 同步傳輸(Isochronous)最大包大小 |
---|---|---|---|
低速(Low-Speed,1.5Mbps) | 不支持批量 / 同步傳輸 | ≤ 8 字節 | 不支持 |
全速(Full-Speed,12Mbps) | ≤ 64 字節 | ≤ 64 字節 | ≤ 1023 字節 |
高速(High-Speed,480Mbps) | ≤ 512 字節 | ≤ 1024 字節 | ≤ 1024 字節 |
超高速(Super-Speed,5Gbps) | ≤ 1024 字節 | ≤ 1024 字節 | ≤ 1024 字節 |
例:一個全速嵌入式數據采集設備,若用批量 IN 端點上傳數據,最大包大小可配置為 64 字節,每次最多上傳 64 字節;若數據量超過 64 字節,需拆分為多個包連續傳輸。