USB2.0令牌、事务及传输抓包分析
+ -

USB2.0 包位域成员字段-PID、SOP、包地址、包端点、帧号、CRC5、CRC16

2021-06-30 5571 39

包标识PID

USB协议定义的包格式PID由8位组成,低4位是类型字段,高4位为低四位的补码。

特殊用途包包括了一些用于特定场合的信牌包和握手包。

PID 含义 说明
0001 令牌OUT 主机发送数据到USB设备
1001 令牌IN 主机接收从USB设备发出的数据
0101 令牌SOF 此时作为一个帧或者小帧的开始信息
1101 令牌SETUP 主机向USB设备发送配置信息
0010 握手ACK 数据正确接收
1010 握手NAK 数据未正确接收
1110 握手STALL 使用的端点被挂起
0110 握手NYET 接收方没有响应
0011 数据DATA0 数据包偶数包
1011 数据DATA1 数据为奇数据包
0111 数据DATA2 此为作为一个高速同步事务的专用数据包
1111 数据MDATA 此时作为一个SPLIT事务的专用数据包。
1100 PRE令牌包 低速数据的先导包
1100 特殊用途ERR SPLIT事务中表示出现错误
1000 特殊用途SPLIT 高速主使用事该SPLIT事务解决从高速模式到低速和全速模式的转换
0100 特殊用途PING 仅用于高速模式下主机使用该事务判断设备是否可以接收数据

包目标地址Addr

  • 包目标地址Addr占7位,所以一条USB总线上最多可以有127个USB设备,其可使用的地址范围为1~127,其中地址0用于设备在枚举过程中尚未分配地址前的过程通讯。
  • 设备的址由主机分配,使用USB标准请求 SET_ADDRESS实现。在设备分配地址前使用地址0,在分配地址后启用新的地址与主机进行数据通讯。
  • USB设备复位或者掉电或者从主机被拨开后,再次枚举需要重新分配地址。
  • 由于主机发出的令牌包是广播在USB总线上的,所以每一个挂接在该总线上的设备都可以收到该令牌包,所以USB设备需要对收到的令牌包进行过滤,过滤的条件就是使用包目标地址Addr和设备自身的地址Addr进行比较,如果匹配,则处理,否则丢弃。

包目标端点ENDP

  • USB主机与设备通过管道PIPE进行数据通讯,这个管道表现在设备端为端点。USB设备的端点一般为8位(BIT7指示了数据方向),但在包端点地址中为4位,4位的端点地址中不包含数据方向(数据方向根据PID来确定)。
  • 包目标端点地址占4位,所以一个USB设备最大可以支持16个双向(输入输出)端点,即32个单方向端点。
  • 端点地0用于控制传输,被称为控制端点。一个USB设备必须支持一个默认的控制端点0。

数据

使用使用数据包DATA0,DATA1,DATA2和MDATA进行数据传输。
不同传输类型,不同设备型的数据域长度不一样。详情可见:同步传输控制传输批量传输控制传输对应的章节。

帧号

一个11位的包帧号,所以帧号的数值范围为0~2047,当到达最大值2047后,从0开始重新计数。\

CRC5循环冗余校验

  • 令牌包使用5位的CRC校验,用于ADDR字段和ENDP之间的数据进行循环冗余校验.
  • 包含有CRC5冗余校验的令牌有IN ,SETUP,OUTSOFPING,SPLIT
    CRC5冗余校验

CRC16循环冗余校验

CRC16冗余校验使用于数据包.如DATA0,DATA1,DATA2和MDATA,用于数据包内数据的冗余校验。
CRC16冗余校验

CRC(循环冗余校验)在线计算:http://www.ip33.com/crc.html

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB2.0 SOF令牌包
SOF令牌包是最广泛的令牌包,由主机发送。在实机的抓包工具过程,由于和NAK包大量存在,都会在软件配置中不显示。但这并不代表这个SOF令牌包不重要。SOF令牌不需要像其它令牌一样,具有握手包。因此发送给设备的SOF包并不能保证一定会收到。SOF数据流管理由USB主机发送一个SOF令牌包。SOF数据......
USB2.0 SETUP令牌包
SETUP令牌包用于主机向USB设备发送配置信息SETUP令牌包结构SETUP令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的端点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB主机到USB设备。ADDR字段:指明了USB设备地址。E......
USB2.0 包位域成员字段-PID、SOP、包地址、包端点、帧号、CRC5、CRC16
包标识PIDUSB协议定义的包格式PID由8位组成,低4位是类型字段,高4位为低四位的补码。特殊用途包包括了一些用于特定场合的信牌包和握手包。PID含义说明0001令牌OUT主机发送数据到USB设备1001令牌IN主机接收从USB设备发出的数据0101......
BUSHOUND抓包stall pid的USTS c0000004错误
对USB设备进行数据分析,使用最多的也就是BUSHOUND了,不过经常遇到一个问题就是 USTS c0000004 stall pid 错误。USTS c0000004 stall pid在本站中搜......
USB 同步传输端点的数据包PID序列及额外传输端点大小
对于同步传输:如果输入端点提供的负载数据小于端点描述符指定的最大负载数据,则主机端将不再该端点提供进一步的输入事务。这是因为所对USB设备来说,所有的数据传输都是由主机发起的。对于数据输入IN事务,虽然数据的传输方向为设备端到主机,但是该事务却是由主机发起。由于设备的输入端点提供的负载数据小于该......
USB2.0 控制传输数据包PID序列
USB数据包的PID序列指的不是数据包的PID序列,特指DATA0,DATA1,DATA2和MDATA的PID序列,即USB在数据传输过程中这些数据包的顺序。USB的数据传输分为四种,分别为控制传输、同步传输、批量传输和中断传输。这四种数据传输方式除过控制传输,其余数据的传输过程都是通过IN事务或者......
USB2.0 中断传输和批量传输数据包的PID序列
其实在Windows下开发USB驱动时,USB的数据传输模式只有三种模式:多种控制传输方式同步传输方式批量或中断传输方式这一点在URB的结构体上表现的很清楚. struct _URB_CONTROL_TRANSFER UrbControlTransfer; struct _UR......
USB2.0全速设备使用逻辑分析仪抓取IN令牌包分析SOP/SYNC/PID/EOP
发在B站上的录制的视频 2.USB2.0包Packet的组成-SOP SYNC EOP的解析其中下面有一条评论,询问 站长,也就是说SOP/SYNC/EOP是物理层的,用分析仪都抓不到是吧?这个我在下面也回答了,是可以抓取到的,只不过对于我们进行包分析,意义不大,因为我们的关注点已经不在那里了。刚......
USB2.0 同步传输数据包PID序列
同步传输方式分为全速模式和高速模式,低速模式不存在同步传输。全速传输模式下的数据包PID序列全速模式下的同步传输数据方式只使用DATA0包,因此接收方在接收数据时只会收到DATA0数据包。高速传输模式下的数据包PID序列高速模式下的数据包序列根据一个微帧中的事务个数不同,采用不同的数据包序列,使......
USB事务跨帧SOF的问题
USB中文网技术交流群有同学发了一个USB抓包截图,并提出了一个问题:控制传输的一个事务内的包不在一帧内传输会有问题吗, 比如我发一个setup包,下面会有一个IN package和一个OUT package,结果IN和OUT package不和SETUP package在一个帧内发送或者接收到,这......
USB的VendorID、ProductID和BcdDevice有什么作用
Vendor ID(VID)的商用需要向USB组织申请,开发者可直接使用开发平台的厂商ID。Product ID(PID)由厂商自行管理。VID和PID的作用是让主机快速识别某些著名的设备(Windows可以在完成枚举之前依此直接派发驱动),它们也常常作为搜索从机的条件(如libusb)。BcdD......
驱动级细述USB状态码USBD_STATUS_STALL_PID
USBD_STATUS_STALL_PID错误经常出现在USB抓包过程中。特别是以BUSHOUND为代表的Windows抓包工具。如: 31.1 RESET 31.1 ......
USB设备的PID,VID,REV是什么,起什么作用
VID所有的USB设备在出厂时,自带一个厂商编号的标识,这叫VID,全称Vender ID供应商识别码。这个编码的取值范围是从0~0xffff。由于VID代表着厂商编号的标识,所以有一个统一的VID分配机构。这个机构叫做USB-IF(Implementers Forum 应用者论坛),官网Https......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!