usb拓扑结构
在调试USB设备时,常常需要查看设备的状态以及获得设备的信息。这里的拓扑结构是获得总线、设备、端口等相关的拓扑图。有两个比较方便的方法一个是lsusb工具,一个是挂载usbfs文件系统,通过/proc目录将信息导出来。usb常见的拓扑架构如下:
lsusb在PC上都有,usbfs挂载依赖于/proc/bus/usb/,但是其和udev冲突,Ubuntu在2.6.31.18还有该目录, 但是2.6.31.20版本以及以后的就不再有该目录了。
usbfs
重新编译内核开启 内核如下选项即可(嵌入式系统常用该方法):
Device Drivers --->
[*] USB support --->
--- USB support
[*] USB device filesystem (DEPRECATED)
首先挂载usbfs文件系统,
mount -t usbfs none /proc/bus/usb
使用cat /proc/bus/usb/devices
其输出的意义如下:
T---topology,表示的是拓扑结构上的意思。
Bus:是其所在的usb总线号,一个总线号会对应一个rootHub,并且一个总线号对应的设备总数<=127,这是倒不是因为电气特性限制,而是因为USB规范中规定用7bit寻址设备,第八个bit用于标识数据流向。00就是0号总线。
Lev:该设备所在层,这个Lev信息看图最明显了。
Prnt:parent Devicenumber父设备的ID号,rootHUb没有父设备,该值等于零,其它的设备的父设备一定指向一个hub。
port:该设备连接的端口号,这里指的端口号是下行端口号,并且一个hub通常下行端口号有多个,上行端口号只有一个。
Cnt:这个Lev上设备的总数,hub也会计数在内,hub也是usb设备,其是主机控制器和usb设备通信的桥梁。
Dev:是设备号,按顺序排列的,一个总线上最多挂127个;可以有多个总线。
spd:设备的速率,12M(1.1)、480M(2.0)等。
MxCh:最多挂接的子设备个数,这个数值通常对应于HuB的下行端口号个数。
B---Band width
Alloc:该总线分配得到的带宽
Int:中断请求数
ISO:同步传输请求数,USB有四大传输,中断、控制、批量和同步。
D--Device Descriptor 设备描述符。
Ver:设备USB版本号。
Cls:设备的类(hub的类是9),
sub:设备的子类
Prot:设备的协议
MxPS:default 端点的最大packet size
Cfgs: 配置的个数;USB里共有四大描述符,它们是设备描述符、端点描述符、接口描述符和配置描述符。
P---设备信息
Vendor: 厂商ID,Linuxfoundation的ID是1d6b,http://www.linux-usb.org/usb.ids
Rev: 校订版本号
S---Manufacturer
S---产品
S---序列号
C---*配置描述信息
#Ifs:接口的数量,
Atr:属性
MxPwr:最大功耗,USB设备供电有两种方式,self-powered和bus-powered两种方式,驱动代码会判断设备标志寄存器是否过流的。最大500mA。
I--描述接口的接口描述符
If#:接口号
Alt:接口属性
#EPs:接口具有的端点数量,端点零必须存在,在USB设备addressed之前,会使用该端口配置设备。
Cls:接口的类
Sub:接口的子类
Prot:接口的协议
Driver:驱动的名称。
E---端点描述符
Ad(s):端点地址,括号的s为I或者O表示该端点是输入还是输出端点。
Atr(sss):端点的属性,sss是端点的类型,对应上述的四大传输类型。
MxPS:端点具有的最大传输包
Ivl:传输间的间隔。
根据上述的拓扑结构绘制拓扑图如下:
lsusb
1、lsusb下载地址如下:
http://sourceforge.net/projects/libusb/?source=typ_redirect
嵌入式环境下,使用交叉编译./configure CC=arm-linux- gcc --host=arm-linux --prefix=${INSTALL DIRECTORY}
不同版本的lsusb输出结果可能不同,可以使用man lsusb命令详细查看。
|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M