怎样理解Gadget框架

描述

USB 协议是主从结构:

Linux

左边主机,右边从机;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 个多个端点描述符

怎么进行数据传输?

通过端点进行传输

有端点的操作函数

Linux

在学习过程中,记住这几个要点非常有帮助:

各类描述符的构造

USB Host 获得 Gadget 各类描述符的过程

数据传输的流程

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分