基于STM32F103的USB学习笔记13 - USB的包结构

72 篇文章 39 订阅

USB是一个串行总线,,在其上面传输的数据是以包为基本单位的,分4类包,分别为令牌包,数据包,握手包和特殊包。包的数据结构如下:

1. 同步域

全速设备和低速设备的同步域使用的是0b00000001,即一共8bit,7bit 0 + 1bit 1; 而高速设备使用的是31bit 0 + 1bit。后面不再说明高速设备的区别,只考虑全速设备。

同步域的作用是同步时钟,并告诉USB设备准备好数据传输。下图是一个同步域的时序图(USB通信采用的是NRZI编码)

2. PID(包标识)

8bit数据,PID0-PID3作为包的标识号,PID4-PID8是PID0-PID3的反码,用于校验PID的。USB规定了4种类型的包,分别为令牌包(Token Packet)、数据包(Data Packet)、 握手包(Handshake Packet)、特殊包(Special Packet),通过PID0-PID1区分这4种类型的包,而这些包还通过PID2-PID3来区分更具体的包。

a) 令牌包

令牌包是USB主机通知USB从机启动一次USB传输的。

OUT令牌包:USB主机通知USB从机将输出一个数据包到从机

IN令牌包:USB主机通知USB从机将读入一个数据包

SETUP令牌包:只用在控制传输,SETUP包后一定是DATA0数据包,并只能发在控制端点,设备必须接收。

以上3种令牌包的结构如下图:

7位地址意味USB总线上最大只能挂载127个设备。4位端点号说明最大16个端点。

SOF令牌包:帧起始,它是广播方式发送,所有的全速USB设备都可以接收到。USB全速设备每毫秒产生一个帧,每帧开始都有一个SOF令牌包发送帧号。SOF令牌包的结构如下图:

b) 数据包

数据包就是真正的有效数据,USB1.1规定了2种数据包:DATA0和DATA1。数据包的结构如下:

DATA0包和DATA1包是以此轮换的,即DATA0 DATA1 DATA0 DATA1 ... 这样循环传输数据,这样可以起到一个纠错的作用。

c) 握手包

握手包用于确认一个传输是否被对方确认。握手包的结构如下:

ACK包:表示正确接收数据,并且有足够的空间容纳数据。主机和设备都可以使用。

NAK包:表示没有数据要返回或正确接收数据但是没有足够的空间。只能设备使用。当主机接收到NAK包,就知道了设备还没准备好,因此会在合适的时机重新此次传输。

STALL包:表示设备无法执行此次请求,或者端点已经挂起。只能设备使用。当主机接收到STALL包,就知道了设备出问题了,主机会采取一定的措施解除STALL状态。

当传输出错后,应该是不返回任何包,等待总线超时。

d) 特殊包

USB1.1有一个PRE特殊包,它用于通知集线器打开其低速端口。PRE的结构如下:

3. EOP

EOP = End Of Packet,包结束符。全速和低速设备的EOP是一个位置2个数据位宽度的SE0信号,SE0信号 = D+和D-同时保持低电平。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值