USB协议1

USB协议基础知识

USB中一个传输(控制传输、批量传输、中断传输、同步传输):由多个事务组成。一个事务(IN/OUT/SETUP/OUT/IN/Ping/Split):由多个包(Packet)组成(令牌包,数据包,握手包)。USB数据在主机软件与USB设备特定的端点间被传输。主机软件与USB设备特定的端点间的关联叫做pipes,一个USB设备可以有多个管道(pipes)。
1 端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有唯一的确定的地址,有不同的传输特性(如输入端点/输出端点/配置端点/批量传输端点)
2 帧:时间 概念,在usb中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作。USB将1帧分为好几份,每一份中是一个USB的传输动作

包(packet)

包(packet)是usb 系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的,数据在USB总线上的传输以包为单位,包只能在帧内传输。高速USB总线的帧周期为125us,全速以及低速usb总线的帧周期为1ms。帧的起始由一个特定的包(SOF包)表示,帧尾为EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。
包是USB总线上班数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。

包的类型

USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据(data)字段、循环冗余校验码(CRC)和包结尾字段(EOP),包基本格式如下图所示:
Packet格式

PID类型(即包类型)

包分为:令牌包(Token)、数据包(Data)、握手包(Handsake)、特殊包(Special)。令牌包(OUT包、IN包、SOF包、SETUP包)。数据包( DATA0包、DATA1包、DATA2包、MDATA包)。握手包(ACK包、NAK包、STALL包、NYET包)。特殊用途包(PRE包、ERR包、SPLIT包、PING包)。

令牌包(Token)

令牌包包括包标识符(PID)、包目标设备地址(ADDR)、包目标端点(ENDP)和CRC5校验位域。如下图所示
在这里插入图片描述
如图是Setup令牌包格式,包括同步头和包结束符,其中包标识符是0xB4,表明这是一个Setup包,目标设备地址和目标端点都是0,CRC5是包目标设备地址和包目标端点的校验值。令牌包必须是由USB主机发出,指明了后续的数据包的目标地址和端点。

数据包

数据包包括包标识符(PID)位域、数据位域和CRC16校验位域。如下图所示是数据包格式,其中包标识符是0xC3,表明这是一个DATA0数据包,数据位域包含8个字节的有效数据,CRC16是数据位域的校验值。
在这里插入图片描述由于数据包中并没有包含其传输的目标地址信息和端点信息,所以数据包必须紧跟随在令牌包之后

握手包

握手包中只有包标识符(PID)位域,下图是ACK握手包格式,其中PID是0x4B,表明这是一个ACK握手包。
在这里插入图片描述
握手包跟随在令牌包或数据包之后,组合成为一个完整的事务,是对一次事务完成的确认,USB主机或者USB设备会根据事务的完成状态返回相应的握手包。根据包标识符的不同,握手包可分为ACK包、NAK包、STALL包、NYET包和ERR包。其含义如下所示。
在这里插入图片描述
###帧开始包(SOF)
在USB拓扑结构中,USB主机会每隔一定的时间向所有连接上的USB设备广播SOF包,两个SOF包之间被称为一个帧或者微帧。对于低速和全速模式,使用的是帧;对于高速模式,使用的是微帧。帧的时间间隔是1.00±0.0005ms,微帧的时间间隔是125±0.0625us。SOF包的作用如下:1 USB主机不断向总线上广播SOF包,以防止USB设备进入挂起状态状态;2 所有 的事务必须在一个帧/微帧中进行,一个事务不饿能跨越两个帧或者微帧,通过控制帧/微帧中事务的个数,可以实现USB带宽控制。3 用作USB主机和USB设备间时钟同步、调整的一种机制。
SOF包包括包标识符(PID)、帧索引和5位循环冗余校验码(CRC5)位域及EOP位域。下图是SOF包格式,其中PID位域是固定值0xA5,帧索引当前值是512,CRC5是帧索引的循环冗余校验码。

在这里插入图片描述
USB主机中的根集线器会将SOF包广播给所有的USB设备,所以SOF包并不需要包含目标设备地址和目标端口信息。

事务(transaction)

USB通信中的另一个重要的单元就是事务。事务包括三种包、分别是令牌包(Token)包、数据包和握手包,其中数据包是可选的,如用于设置地址的事务就只含有令牌包和握手包。令牌包的方向一定是USB主机到USB设备,数据包的方向和令牌包的类型有关,握手包的方向和数据包的方向相反。如果事务中没有数据包,握手包的方向是USB设备到USB主机。
单独的包并没有错误检测机制,传输过程中可能出现各种情况导致接收方出现错误,事务实际上就是利用令牌包、数据包和握手包实现了一个带有错误反馈机制的通信,使得USB传输成为一个安全、可靠的传输。

Setup事务

下图是一次成功的Setup事务,对应transaction0, 其作用是USB主机向USB设备发送用于获取设备描述符的标准USB设备请求。该Setup事务包含:
1 USB主机发送给USB设备的一个setup包(Packet 28),该包用以指明本事务是一个setup事务(0xb4),以及事务通信的对象为指定的设备的端点0(下图中的ADDR字段和ENOP字段);
2 USB主机发送给USB设备的用来传输特定请求的数据包(Packet 29),数据长度为固定的8字节,且Setup事务必须使用DATA0包;
3 USB设备返回给USB主机的表示所有数据已经全部收到的ACK包(Packet 30)。
在这里插入图片描述

OUT事务

USB主机向USB设备发送OUT包和数据包,如果USB设备接收到的数据包没有任何错误(如位填充或者CRC错误),并且数据包的PID和自身包序列匹配,则USB设备返回ACK包;如果低速或全速的USB设备因自身内存空间不够等原因无法接收USB主机发送来的数据,则会向USB主机返回一个NAK包;如果USB设备的OUT端点被停止(Halt),那么USB设备向USB主机返回一个STALL包;对于控制传输和批量传输,如果高速的USB设备成功接收到USB主机发送来的数据但无法接收下一个数据包中的数据,则会向USB主机返回一个NYET包(后续章节会有关于NYET包的详细介绍);需要注意的是,在此OUT事务中,如果OUT包或者数据包发生错误,USB设备会忽略它们并且不会做出任何反应。
在这里插入图片描述

IN事务

下图是IN事务的处理机制,USB主机向USB设备发送一个IN包,USB设备向USB主机发送数据包。在USB主机成功收到后,USB主机向USB设备返回一个ACK包。在该IN事务中,如果IN包或者数据包发生错误,USB主机不会返回任何握手包。USB主机向USB设备发送IN包后,如果USB设备没有数据要发送给USB主机,那么USB设备会直接向USB主机返回一个NAK包。如果USB设备中用于接收IN包的端点被停止,那么USB设备直接向USB主机返回一个STALL包。
在这里插入图片描述

PING事务

在高速模式下,使用一种新的事务——Ping事务,来解决这个问题。USB主机在发送OUT事务之前先使用Ping事务来确定USB设备是否能够接收数据,如果设备不能接收数据,USB主机会在一定时间后再次使用Ping事务,知道USB设备能够接收数据为止。由于Ping事务只有令牌包和握手包,与原有的OUT事务相比,能够节省大量的总线带宽,从而提高了总线利用率。
在这里插入图片描述

传输(Transfer)

包是USB传输的最小单位,事务是USB带反馈机制的可靠传输最小的单位,基于事务,USB协议规定了传输(Transfer)用于完成一组具有忒的那个目的地事务,其中任意一个事务失败,则整个传输都会失败。
USB协议中定义了四种传输类型,包括控制传输、中断传输、批量传输和同步传输,下表中是各类型传输(Transfer)支持的最大包长度(字节),USB设备在所有的速度模式下都支持控制传输,而低速模式中不支持同步传输和批量传输。

在这里插入图片描述

1 控制传输

一个控制传输(Control Transfer)一般用于完成一个特定的请求(Request),通常这些特定的请求由USB规格说明书,特别是USB设备枚举过程,全部都由控制传输来完成,一个控制传输包括 三个阶段:设置阶段(Setup Phase)、数据阶段(Data_phase)和状态阶段(Status Phase),其中数据阶段是可选的。设置阶段包含一个Setup事务;数据阶段是零个、一个或者多个IN或者OUT事务;状态阶段是一个数据长度为0的IN或者OUT事务

2 中断传输

中断传输一般用于传输数据量小、具有周期性且要求响应速度比较快的数据,如键盘、鼠标或者游戏手柄等。下图是一次成功的中断传输,用于USB主机向USB设备发送数据。其只有一个OUT事务,该事务中数据包的数据位域包含了USB主机所发送的8个字节的数据 12 34 56 78 90 AB CD EF。需要注意的是,因为该例中只传输8个字节的数据,没有超过端点支持的最大包长度,因此一个中断传输中只有一个事务即可。如果传输的数据长度大于端点支持的最大包长度,则一个中断传输内需要多个事务。在传输数据时,如果最后一个事务的数据长度小于端点支持最大包长度,则认为数据传输完。
在这里插入图片描述

3 批量传输

批量传输用于传输数据量大、非周期性、对实时性没有要求的数据,一旦有多余的USB总线带宽,批量传输会立即执行,但当带宽比较紧张时,批量传输会把带宽让给其他类型的传输。下图是一次成功的MSD类设备的批量传输,用于USB设备向USB主机发送512字节的数据。这个批量传输包含了8个IN事务,每个IN事务传输了64字节的数据。
在这里插入图片描述

4 同步传输

同步传输用于传输周期性、低延时性但不需要保证传输质量的数据,如音频或者视频数据。因此,不论是同步传输的IN事务还是OUT事务都没有握手阶段。下图是一次成功的同步传输,用于USB设备向USB主机发送数据。其中包含了多个IN事务,每个事务中的数据包的数据位域包含了USB设备发送给USB主机的数据。从事务中可以看到,同步传输并没有握手包。
在这里插入图片描述
参考 微控制器USB的信号和协议实现

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值