USB协议层数据格式
文章目录
- 硬件拓扑结构

- compound device :多个设备组合起来,通过HUB跟Host相连
- composite device :一个物理设备有多个逻辑设备(multiple interfaces)
在软件开发过程中,我们可以忽略Hub的存在,硬件拓扑图简化如下:

一个物理设备里面可能有多个逻辑设备,Hos可以外接多个逻辑设备,硬件拓扑图如下:

2. 协议层
要理解协议层、理解数据如何传输,带着这几个问题去看文档、看视频:
- 如何寻址设备?
- 如何表示数据方向(读、还是写)
- 如何确认结果?
提前罗列出来:
- USB系统是一个Host对应多个设备,要传输数据首先要通知设备:
- 发出IN令牌包:表示想读数据,里面含有设备地址
- 发出OUT令牌包:表示想写数据,里面含有设备地址
- 数据阶段:
- Host想读数据:前面发出IN令牌包后,现在读取数据包
- Host想发出数据:前面发出OUT令牌包后,现在发出数据包
- 结果如何?有握手包
- Host想读数据,设备可能未就绪,就会回应NAK包
- Host想写数据,它发出数据后,设备正确接收了,就回复ACK包
2.1 字节/位传输顺序
先传输最低位(LSB)。在后续文档中,描述数据时按照传输顺序从左到右列出来。
2.2 SYNC域
Host发出SOP信号后,就会发出SYNC信号:它是一系列的、最大传输频率的脉冲,接收方使用它来同步数据。对于低速/全速设备,SYNC信号是8位数据(从做到右是00000001);对于高速设备,SYNC信号是32位数据(从左到右是00000000000000000000000000000001)。使用NRZI编码时,前面每个"0"都对应一个跳变。
在很多文档里,把SOP和SYNC统一称为"SYNC",它的意思是"SYNC"中含有"SOP"。
2.3 包格式

USB总线上传输的数据以包为单位。USB包里含有哪些内容(“域”)?
-
SOP:用来表示包的起始
-
SYNC:用来同步时钟
-
PID:表示包的类型
-
地址:在USB硬件体系中,一个Host对应多个Logical Device,那么Host发出的包,如何确定发给谁?
- 发给所有设备:包里不含有设备地址
- 发给某个设备:包里含有设备地址、端点号
-
帧号、数据等跟PID相关的内容
-
CRC校验码
发起一次完整的传输,可能涉及多个包。那么,第1个包里含有设备地址、端点号,后续的包就没必要包含设备地址、端点号。
2.3.1 PID域
注意:所有的

本文详细介绍了USB协议层的数据格式,包括字节/位传输顺序、SYNC域、包格式以及各种类型的PID域。此外,还讨论了传输细节,如传输与事务的区别、批量传输、中断传输、实时传输和控制传输的工作原理,以及握手包的作用。文章旨在帮助读者理解USB设备如何通过不同类型的包进行数据交换和确认。
最低0.47元/天 解锁文章
1502

被折叠的 条评论
为什么被折叠?



