1、USB传输分类
- 控制传输是每个USB设备都会用到的一种传输,在枚举过程中主机和端点0交互所使用的传输方式。
- 大容量数据传输常见的例子便是U盘(CDC其中的两个端点也使用了bulk传输)
- 同步传输,常用于音视频灯USB应用
- 中断传输,常用于键鼠
在ST的官方培训手册里对这个描述已经很清楚了。
2、USB分包机制
- 上述的四种传输其实都是一次Transfer.
- 每个Transfer由若干的Transaction组成.
- 每个Transaction由2-3个Packet组成.
但是每种传输的Transfer都是有不同的细微的变化的。这个后续需要专门来说。
2.1、USB Packet
USB定义了数据在总线上传输的基本单位是包,所有的包都是由以下的四部分组成,分别为起始包,同步域,包的具体内容,结束包组成.
其中,除了包的具体内容,其余的都是硬件USB总线上的变化,由硬件IC做好,软件方面只需要关注Packet Content.
其中,Packet Content又分为以下几部分,如下图所示.
2.1.1 USB Packet Content PID
Packet根据PID的不同可以分为四大类,如下图所示.
在开发过程中,最经常见到的就是SETUP,IN,OUT,DATA了.
PID | 功能描述 |
---|---|
SETUP | 只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制。 |
IN | 定义从设备到主机的数据事务 |
OUT | 定义从主机到设备的数据事务 |
DATA | 定义从主机到设备的数据事务,usb2.0里面只有DATA0和DATA1 |
pid只使用了高四位,低四位是将前四位数据取反后用于校验了。
2.1.2 USB Packet Content addr
地址分为两个地址,分别为设备地址和端点地址。
2.1.3 USB Packet Content 帧号
2.1.4 USB Packet Content Data
2.2 USB 包分类
2.2.1 Token Packet
在Token包里面,一共三个字节,24bit被拆分为4种含义,如上图所示.
2.2.2 SOF Packet
SOF同上,一共三个字节,只是中间的11位含义不一样.
2.2.3Data Packet
这个地方根据传输类型的不同,大小不同,但是在FS设备中只能在0-1023Byte中取值.具体长度看看2.1.4.
2.2.4Handshake Packet
2.3 USB Transaction
Transaction 可以分为三类。
- Setup Transaction 控制事务
- Data In Transaction 主机用来从设备读取数据
- Data Out Transaction 主机用来向设备发送数据
Transaction一般由2-3个包组成:令牌包、数据包和握手包。
- Token Packet总是由主机发出的.
- Data Packet包含此次的数据负载
- 可选的Handshake packet