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

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

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

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

評(píng)論