USB 協(xié)議是主從結(jié)構(gòu):
左邊主機,右邊從機;USB 有主機控制器 UHC 和從機控制器 UDC,主機側(cè)有 USB Device Driver,從機側(cè)有 USB
Function Driver。
意思是說,一個開發(fā)板,可以當 USB 主機,接鼠標、鍵盤等從機;一個開發(fā)板也可以當 U 盤,接入 PC
電腦,此時開發(fā)板是從機。因此,我們要掌握兩套驅(qū)動框架。這是 Linux 下 USB 相對于 I2C、SPI 復(fù)雜的地方,I2C 等根本不會考慮主控 Soc
作為從機的情況,但 USB 需要考慮。
本文主要針對主控 Soc 作為 USB 從機的情況,Linux 為其提供了 Gadget 框架。
編寫 USB 設(shè)備驅(qū)動程序時,主要是:
讀取設(shè)備的各類描述符,比如 endpoint 描述符,得到端點號
使用底層 USB Host Controller 驅(qū)動程序提供的 API 函數(shù),從 endpoint 上讀寫數(shù)據(jù)
基于 Gadget 驅(qū)動框架模擬一個 USB 設(shè)備時,endpoint 的數(shù)據(jù)傳輸能力是底層的 USB Device Controller
驅(qū)動提供的,我們要做的就是:
提供各類設(shè)備描述符
使用底層 USB Device Controller 驅(qū)動程序提供的 API 函數(shù),從 endpoint 得到數(shù)據(jù)、反饋數(shù)據(jù)
Gadget 的含義是“小器件”,在 Linux 的 USB 系統(tǒng)中,它表示“usb device”。Gadget 驅(qū)動程序,就是用來模擬 USB
Device。對于真實的 USB Device,它有兩大要素:
怎么表示自己?
每個 USB Device 都有 1 個設(shè)備描述符
都 1 個或多個配置描述符
每個配置描述符里面有 1個 或多個接口描述符
每個接口描述符里面有 0 個多個端點描述符
怎么進行數(shù)據(jù)傳輸?
通過端點進行傳輸
有端點的操作函數(shù)
在學習過程中,記住這幾個要點非常有幫助:
各類描述符的構(gòu)造
USB Host 獲得 Gadget 各類描述符的過程
數(shù)據(jù)傳輸?shù)牧鞒?/p>
-
嵌入式
+關(guān)注
關(guān)注
5150文章
19665瀏覽量
317448 -
Linux
+關(guān)注
關(guān)注
87文章
11509瀏覽量
213744 -
框架
+關(guān)注
關(guān)注
0文章
404瀏覽量
17890
發(fā)布評論請先 登錄
RK3288使用USB GADGET實現(xiàn)大容量存儲腳本
怎樣理解EMC電路
RS亞太首發(fā)Gadget Renesas開發(fā)套件
工具SemExpr可實現(xiàn)gadget搜索與語義分析

[嵌入式linux]將linux板卡虛擬為USB網(wǎng)卡設(shè)備(Ethernet Gadget)
![[嵌入式linux]將linux板卡虛擬為USB網(wǎng)卡設(shè)備(Ethernet <b class='flag-5'>Gadget</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
怎樣理解各種電機之間的區(qū)別?
AMD Xilinx Linux 2022.1 USB Gadget使用
USB Gadget serial應(yīng)用實例(上)

USB Gadget zero應(yīng)用實例程序

從硬件軟件角度理解Gadget框架

從獲取描述符的角度理解Gadget框架

評論