
前段时间一直忙着和Wireshark软件打交道目的当然不是瞎捣腾当然是为了项目需要而动手抓取和解析一些USB通信报文然后偶然发现就是在每个报文中都会有下面这样一段标注为“USB URB”的数据包该段数据包的长度有27个字节的也有28个字节的等等那到底USBURB是什么呢在USB通信当中充当什么角色呢我们继续往下说。USBURB全称USB Request Block即USB请求数据块其数据包长度是可变的它是USB设备驱动中用来描述与USB设备通信所用的基本载体和核心数据结构是USB主机与设备之间传输数据的封装一个URB包含了执行USB传输所需要的所有信息。因此在进行数据传输时需要分配一个URB结构体对其进行初始化并将其提交给USB核心其中USB核心负责解析URB将控制信息提交给主机控制器由其负责数据到设备的传输。既然我们说URB也属于一种数据结构那它的结构到底是什么样的呢按照我这边总结的URB所包含的字段及其含义主要汇总如下以28字节长度为例有一点需要注意Wireshark上面显示的Source和Destination不包含在数据结构里面前者指示报文发送者比如主机host后者指示报文接收者比如USB设备用类似2.18.0这种地址表示usb.usbpcap_header_lenUSB请求快长度或者USBPcap伪报头长度USBPcap pseudoheader length占2个字节从第一个字段到最后一个字段usb.irp_id输入输出请求包IDIRP ID由主机生成的数据帧ID占8个字节USB设备需要记住它在响应请求的时候返回给主机从而保证数据通信正常这里解释一下IRPIO Request Packet输入/输出请求包描述了硬件设备和操作系统之间的通信机制包含了用于请求和响应输入输出操作的详细信息。usb.usbd_status请求块状态信息IRP USBD_STATUS: USBD_STATUS_SUCCESS占4个字节通过该字段既可以知道当前USB通信状态列举部分码值如下usb.function可以理解为请求类型也就是下一步要做什么URB Function占2个字节比如请求设备的描述符比如请求批量或者中断传输数据usb.irp_info请求块主要信息IRP information目前的USB协议仅最低bit位有效即最低位表示方向PDO表示总线上的设备FDO表示主机功能驱动其中0主机到设备1设备到主机usb.bus_id总线IDURB bus id占两个字节由主机分配USB设备的完整地址里面的第一个字段数据就是总线IDusb.device_address设备地址Device address占1个字节范围在1~127也是区分每个USB设备的依据USB设备的完整地址里面的第二个字段数据就是设备地址USB每次接入主机后得到的设备地址可能都是不一样的。usb.endpoint_addressUSB设备的端点信息Endpoint其中bit7表示数据方向即1IN主机接收数据0OUT低4位表示端点号如果是0则表示控制端点。比如主机请求描述符的时候主机收到按键数据的时候都是为IN而USB设备的完整地址的第三个字段即表示端点号可能为0,1,2或者其他自定义值usb.transfer_typeURB传输类型URB transfer type占1个字节指定该交互的USB设备的传输数据的类型主要有四种分别是中断传输控制传输批量传输和同步传输要详细的了解它们的话可以去看我写的其他文章链接如下https://bbs.21ic.com/icview-3517517-1-1.htmlhttps://bbs.21ic.com/icview-3516823-1-1.htmlusb.data_len数据包长度指示URB块下面携带的数据包长度 Packet Data Length占4个字节没有携带数据则为0有则一一对应usb.control_stage直译为控制传输阶段Control transfer stage指的是完成一次控制传输所经历的几个逻辑步骤而对于一次标准的控制传输包含了以下2到3个阶段建立阶段Setup Stage状态阶段Status Stage比如完成Complete如果你想知道更多阶段参数可以按如下进行字段名称的搜索对于批量传输的是没有这个字段的因此才有了前文所述的27个字节的URB数据块。以上通过结合USB的数据报文详细解释了USB URB的各个字段的含义希望有助于有需要的人更好的理解USB协议。另外如果我们需要在开发过程中查看USB URB的具体内容的话可以按照下面的方法进行对于Windows系统的话可以尝试这三种工具Free USBAnalyzerSimpleUSB LoggerUSBPcap Wireshark我比较喜欢用第三种也可能是先入为主的原因。对于Linux系统的话可以使用内核自带的 usbmon 模块。---------------------作者dffzh链接https://bbs.21ic.com/icview-3518318-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。