USB 協議是主從結構:
左邊主機,右邊從機;USB 有主機控制器 UHC 和從機控制器 UDC,主機側有 USB Device Driver,從機側有 USB
Function Driver。
意思是說,一個開發板,可以當 USB 主機,接鼠標、鍵盤等從機;一個開發板也可以當 U 盤,接入 PC
電腦,此時開發板是從機。因此,我們要掌握兩套驅動框架。這是 Linux 下 USB 相對于 I2C、SPI 復雜的地方,I2C 等根本不會考慮主控 Soc
作為從機的情況,但 USB 需要考慮。
本文主要針對主控 Soc 作為 USB 從機的情況,Linux 為其提供了 Gadget 框架。
編寫 USB 設備驅動程序時,主要是:
讀取設備的各類描述符,比如 endpoint 描述符,得到端點號
使用底層 USB Host Controller 驅動程序提供的 API 函數,從 endpoint 上讀寫數據
基于 Gadget 驅動框架模擬一個 USB 設備時,endpoint 的數據傳輸能力是底層的 USB Device Controller
驅動提供的,我們要做的就是:
提供各類設備描述符
使用底層 USB Device Controller 驅動程序提供的 API 函數,從 endpoint 得到數據、反饋數據
Gadget 的含義是“小器件”,在 Linux 的 USB 系統中,它表示“usb device”。Gadget 驅動程序,就是用來模擬 USB
Device。對于真實的 USB Device,它有兩大要素:
怎么表示自己?
每個 USB Device 都有 1 個設備描述符
都 1 個或多個配置描述符
每個配置描述符里面有 1個 或多個接口描述符
每個接口描述符里面有 0 個多個端點描述符
怎么進行數據傳輸?
通過端點進行傳輸
有端點的操作函數
在學習過程中,記住這幾個要點非常有幫助:
各類描述符的構造
USB Host 獲得 Gadget 各類描述符的過程
數據傳輸的流程
-
嵌入式
+關注
關注
5086文章
19143瀏覽量
306041 -
Linux
+關注
關注
87文章
11315瀏覽量
209812 -
框架
+關注
關注
0文章
403瀏覽量
17510
發布評論請先 登錄
相關推薦
評論