1 USB枚举流程
1.1 USB枚举流程
USB SETUP command的状态阶段的状态包是个ZLP。
Anchor chips -> Netchip -> PLX -> Avago -> Broadcom
The USB3380 is EOL and the kits that were by Taiwan Bplus.
PLX USB3380设备控制器使用2个32bit寄存器存放setup的8个字节,第一个32bit寄存器SETUPDW0的b7...0存放bmRequestType,b15...8存放bRequest,b31...16存放wValue;第二个32bit寄存器SETUPDW1的b15...0存放wIndex,b31...16存放wLength。
USB Endpoint FIFO = PCI Cache Line Size x N
PCIe switch forwards TLP packet.
Figure 1-1 Windows枚举USB设备的流程
1.2 github NT5.1
Windows2000 Windows XP
usbhub.sys usbhub.sys
usbd.sys usbport.sys
openhci.sys, uhcd.sys usbuhci.sys, usbohci.sys, usbehci.sys
一个设备有两个GUID,一个是设备接口类GUID,另一个是安装类GUID。
https://www.anquanke.com/post/id/83167
IoConnectInterrupt()
base/ntos/io/pnpmgr
drivers/wdm/usb/driver/hub.pnp/usbhub.c
USBH_SubmitInterruptTransfer()
当port连接改变时,usbhub调用USBH_IoInvalidateDeviceRelations()通知PNP管理器,接下来PNP管理器通知usbccgp驱动去读取设备和配置描述符,并创建PDO。
drivers/wdm/usb/usbccgp/parent.c
TryGetConfigDescriptor()
PNP: IoInvalidateDeviceRelations()
创建类PDO并通知PNP管理器加载USB类驱动。
2 描述符配置
2.1 Android
Android是支持多USB配置描述符的,但是我们平时见到的手机都是一个配置的,接口数按照你在Android状态栏上选择的功能而定。QCOM数据卡设备为了兼容Windows和MacOS,使用了多配置描述符。
- 设备描述符的bNumConfigurations=1
- 配置描述符的bNumInterfaces=x,根据用户选择的功能而定
2.2 iOS
iOS支持4个USB配置,也即是有4个配置描述符,配置描述符中的bConfigurationValue分别是1、2、3、4,然后每个配置描述符都有自己的接口和端点描述符。
- 设备描述符的bNumConfigurations=4
- 配置描述符的bNumInterfaces=x,根据Windows选择哪个配置而定
- 当我们的电脑上没有安装iTunes时,Windows选择的是配置3,电脑上显示的是PTP Camera,当我们电脑上安装了iTunes时,Windows选择的是配置4
Figure 2-1 连接iTunes时bushound抓包
2.3 Windows Phone 8
WP8的USB功能只支持一个配置,三个接口。WinUSB驱动安装可以使用工具Zadig。
- 设备描述符的bNumConfigurations=1
- 配置描述符的bNumInterfaces=3
- 主要有3个接口:PTP、WinUSB、WinUSB
3 USB驱动安装工具Zadig
Akeo Consulting is a small Software Development company, established in the North-West of Ireland, in the breathtaking wilderness of County Donegal.
Zadig - USB driver installation made easy, based on Windows Driver Installer library (libwdi).
https://zadig.akeo.ie/
4 Abbreviations
ARC:Argonant RISC Core
AT91SAM9260:SAM means Smart ARM-based Microcontroller
ATMEL SAMBA:ATMEL Smart ARM-based Microcontroller Boot Assistant
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
Quirks:the attributes of a device that are considered to be noncompliant with expected operation
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci);产品UHC124表示USB Host Controller;收购了ARC USB技术;现已被chipidea收购,chipidea又被mips收购
TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)