1 学习链接
Linux USB 3.0驱动分析(一)—— USB设备基础概念 - luoyuna - 博客园
https://zhuanlan.zhihu.com/p/683251257
https://zhuanlan.zhihu.com/p/558716468
USB驱动框架分析1_usb storage 驱动框架-优快云博客
USB 2.0 协议专栏之 USB 2.0 连接与枚举(二)_usb枚举-优快云博客
usb枚举过程分析之hub_events_hub的枚举流程-优快云博客
https://naotu.baidu.com/file/07b78a1dda9615278029e01a42bdaa32
2 别人的调试记录:
STM32 USB Mass Storage 例程调试笔记 - irwin0112 - 博客园
调试记录-USB异常断开调试_idvendor=2ecc idproduct=3001-优快云博客
usb拓扑图:
Compound Device和composite device的区别:
USB复合设备(Compound Device):就是指将Hub和连接在Hub上的设备封装到一起所组成的设备,每个设备都会分配一个设备地址。如图Compound Device。
USB组合设备(USB composite device):所示在USB系统中,除了Compound Device,还有Composite Device概念,是指具有多个接口且接口间相互独立的USB设备。一个USB组合设备只有一个设备地址,可以将不同的功能与不同的接口对应,来开发多功能USB设备,即组合设备采用一个USB控制芯片,同时联接不同的USB设备(或芯片),主机可同时与这些USB设备通信。
usb设备驱动和usb接口驱动的区别:
USB设备驱动(usb device driver)就只有一个,即usb_generice_driver这个对象,所有USB设备都要绑定到usb_generic_driver上,它的使命可以概括为:为USB设备选择一个合适的配置,让设备进入configured状态。
·USB驱动(usb driver)就是USB设备的接口驱动程序,比如adb驱动程序,u盘驱动程序,鼠标驱动程序等等。
驱动代码中,for_devices = 1的是usb设备驱动,for_devices = 0的是usb接口驱动。
控制传输固定使用端点0 ,枚举过程使用大量的控制传输,可参考后文中枚举过程的实际报文。控制传输为了保证配置数据的传输的有效性,使用了指令再确认机制
BULK传输的速率取决于主机IN 或OUT事务的间隔,系统占用率高,IN或OUT事务间隔可能就变大,系统占用率小,IN或OUT事务间隔可能减小。
BULK传输速率不确定是因为IN或OUT事务是在其他任务空闲时发出,而中断传输的IN或OUT事务则是定时发出,定时周期取决于设备端点的配置
同步传输综合了BULK传输的整体速率,以及中断传输的实时性,但是去掉了事务的应答,不具备错误重发机制,多用于音视频传输允许少量错误失真地方。
设备将自身的配置信息保存在本地 ,主机在检测到设备接入时 ,通过端点0获取设备配置信息,然后根据配置信息,使用配置的模式以及配置的数据端点通信 ,这个过程称为USB枚举 ,枚举所获取的配置称为USB描述符。
-
USB Host Controller Driver (HCD): 这是运行在主机端(例如一台 PC)上的驱动程序,负责与连接到该主机的各种 USB 设备进行通信。HCD 会处理主机和设备之间的数据传输。
-
USB Device Driver: 这是在主机操作系统上运行的驱动程序,用于支持特定类型的 USB 设备(如键盘、鼠标、存储设备等)。这些驱动程序通常与特定的 USB 类(class)相关联,比如 HID (Human Interface Device) 类、Mass Storage 类等。
-
USB Gadget Driver: 这是在嵌入式系统或任何作为 USB 设备工作的系统中运行的驱动程序。gadget 驱动程序定义了设备的行为,包括设备可以提供的功能(例如大容量存储、网络接口等)。
-
USB Device Controller (UDC) Driver: UDC 驱动程序控制实际的硬件控制器,这个控制器负责执行 USB 协议并处理底层的数据传输。UDC 驱动程序提供了对硬件寄存器的访问,并且通常需要与 gadget 驱动程序协同工作来实现完整的 USB 设备功能。