分析Linux下USB设备注册匹配流程

分析USB匹配流程​

1.1 当USB设备插入到开发板USB口提示的信息​

<USB全速设备> ---CH340转串口模块

[root@wbyq ]#[ 766.035000] usb 1-2.2: new full-speed USB device number 7 using s5p-ehci

[ 766.140000] usb 1-2.2: New USB device found, idVendor=1a86, idProduct=7523

[ 766.140000] usb 1-2.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0

[ 766.140000] usb 1-2.2: Product: USB2.0-Serial

[ 766.145000] ch341 1-2.2:1.0: ch341-uart converter detected

[ 766.155000] usb 1-2.2: ch341-uart converter now attached to ttyUSB0

<USB高速设备> ---华为的3G网卡

[root@wbyq ]#[ 817.745000] usb 1-2.2: new high-speed USB device number 8 using s5p-ehci

[ 817.850000] usb 1-2.2: New USB device found, idVendor=12d1, idProduct=14fe

[ 817.850000] usb 1-2.2: New USB device strings: Mfr=2, Product=1, SerialNumber=0

[ 817.850000] usb 1-2.2: Product: HUAWEI Mobile

[ 817.850000] usb 1-2.2: Manufacturer: HUAWEI

[ 817.865000] scsi4 : usb-storage 1-2.2:1.0

[ 817.890000] scsi5 : usb-storage 1-2.2:1.1

[ 818.885000] scsi 4:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2

[ 818.890000] scsi 4:0:0:0: Attached scsi generic sg0 type 5

[ 818.895000] scsi 5:0:0:0: Direct-Access HUAWEI SD Storage 2.31 PQ: 0 ANSI: 2

[ 818.920000] sd 5:0:0:0: Attached scsi generic sg1 type 0

[ 818.920000] sd 5:0:0:0: [sda] Attached SCSI removable disk

根据提示的字符串,在source insight 软件里搜索字符串出现的位置。

查找的字符串:USB device number

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

搜索字符串发现,这些提示信息是在Hub.c文件里打印出来的。

1.2 什么是USB Hub ?​

现在USB设备使用越来越普及,但随着设备的增加,主板I/O档板上提供的2个USB接口明显不够用了。要想同时使用更多USB设备,一种方法是将主板上的USB插针进行扩展,另一种方法是通过USB HUB进行扩展

USB Hub,指的是一种可以将一个USB接口扩展为多个(就是集线器),并可以使这些接口同时使用的装置。USB HUB根据所属USB协议可分为USB2.0 HUB、USB3.0 HUB与USB3.1 HUB。

分析Linux下USB设备注册匹配流程

1.3 USB HUB工作原理

USB HUB用于设备扩展连接,所有USB DEVICE都连接在USB HUB的端口上。一个USB HOST总与一个根HUB (USB ROOT HUB)相连。USB HUB为其每个端口提供100mA电流供设备使用。同时,USB HUB可以通过端口的电气变化诊断出设备的插拔操作,并通过响应USB HOST的数据包把端口状态汇报给USB HOST。一般来说,USB设备与USB HUB间的连线长度不超过5m,USB系统的级联不能超过5级(包括ROOT HUB)。

USB Hub的下游各个接口会平分上游接口带宽,加上USB Hub本身也需要传输控制信号,所以下游各个设备的带宽是必然要小于上游设备的总带宽。

实际情况是,现在主流的USB 3.0设备都很难占满总带宽(5Gbps),比如主流的3.0 U盘大概只有100MB~200MB/s的传输速度,折合带宽也不到2Gbps,所以实际情况是不一定。

USB Hub的原理比较复杂,USB协议规范里最复杂的部分就是Hub的章节,USB Hub与网络设备(以太网)的Hub原理相差很多,如果真要类比的话,复杂度大概相当于网络的设备里的路由器。

USB协议中有控制传输、Bulk传输、中断传输、同步传输四种模式,其中:

控制传输用于传输控制设备一级的指令;

Bulk传输(中文名可能叫批传输)主要用于传输USB各种大块数据,比如U盘读写的数据;

中断传输,用于传输小块数据,鼠标键盘主要使用中断传输;

同步传输,用于传输实时性不够强的数据,也就是说不保证可靠性,部分USB音频设备使用这种传输;

开发板上的USB接口原理图分析

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

开发板上引出了4个USB 接口,一个接了DM9621网卡,两个通过标准USB口引出来了,一个使用USB排针引出来了。

1.4 USB4604芯片

特征:集线器控制器IC,带4个下游端口

Microchip USB4604是一款低功耗,OEM可配置的MTT(多事务转换器)USB 2.0集线器控制器,具有4个下游端口和针对嵌入式USB应用的高级功能。

完全符合USB 2.0规范,USB 2.0链路电源管理附录,高速芯片间(HSIC)USB电气规范修订版1.0,并将作为全速集线器或完整端口连接到上游端口。 -/高速集线器。 4端口集线器在所有已启用的下游(非HSIC)端口上支持低速,全速和高速(如果作为高速集线器)下游设备。 HSIC端口仅支持高速操作。

USB4604已针对嵌入式系统进行了优化,这些嵌入式系统以高性能和最小的BOM成本为关键设计要求。待机模式的功耗已降至最低,参考时钟输入可以与客户的特定应用保持一致。灵活的电源轨选件允许USB4604以单源(VBUS(5V),VBAT,3.3V)或双源(VBAT + 1.8、3.3V + 1.8)配置供电,从而简化了与节能设计的集成。此外,USB端口上所有必需的电阻器都集成到集线器中,包括D +和D–引脚上的所有串联终端电阻和上拉/下拉电阻。

DCP:专用充电端口(无数据的电源模块)

CDP:向下游端口充电(带数据的1.5A)

SDP:标准下游端口(带数据的0.5A)通过加载的自定义配置文件

SMBus或OTP

USB4604提供额外的USB端点,专门用作USB至I2C / SPI接口,从而允许通过USB接口监视,控制或配置外部电路或设备。

USB4604芯片介绍:

https://www.baidu.com/link?url=cWcYcs_9wYtbWtDyTMQ1ECssOC5KI0sCG8nJsIrCGt4Usa-RTGjQtHSsr8_dJktg61gmNf4o5OlAkQyHny-v44WM_bpDsvyV0rKJzZ9t55y&wd=&eqid=914505c8005d1ce8000000065d9054c8

USB 4604与芯片的连接线:

分析Linux下USB设备注册匹配流程

1.5 总结

Tiny4412开发板上的USB 4604就是根HUB,与4412芯片的USB主机相连接,USB4604扩展了4个USB口出来。

电脑上的USB设备与根集线器。

分析Linux下USB设备注册匹配流程

HUB代码分析

1.1 分析usb_new_device函数

Linux系统下定义的USB设备速度。

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

分析Linux下USB设备注册匹配流程

announce_device函数在usb_new_device函数里调用。

分析Linux下USB设备注册匹配流程

发表评论

相关文章