USB协议分析——包格式

通常的一个USB包主要 包括以下几种包字段:包标示符字段(PID)、地址字段(包括地址字段和端口字段)、帧号字段(Frame Number)、数据字段(Data)和循环冗余校验(CRC)。

一、令牌包(Token)

令牌包由PID、ADDR、ENDP和CRC构成,其中PID指定了包是输入输出还是建立类型,对于输出和建立事务地址和端口字段唯一地确定了接下来将收到数据包的端口,对于输入事务的这些字段唯一地确定了哪个端口应该传送数据包。只有主机能发出令牌包,输入PID定义了从功能部件到主机的数据事务,输出和建立PID定义了从主机到功能部件的数据事务。


令牌包格式

如上图所示,令牌包包括了覆盖地址和端口字段的5位CRC。CRC并不覆盖PID,因为它有自己的校验字段。令牌包和帧开始(SOF)包是由3个字节的包字段数据后面的包结束(EOP,End of Packet)界定的。如果包被译码为合法令牌或SOF,但却没有在3个字节之后以EOP终止则它被认为是无效的,并被接收器忽略。

二、帧开始包(SOF)

对于全速总线主机以每1.00 ms ±0.0005 ms一次的额定速率发出帧开始SOF包,对于高速总线主机以每125 μs ±0.0625 μs一次的额定速率发出帧开始SOF包。SOF包由8位PID、11位FrameNuber已经5位CRC构成。


帧开始(SOF)格式

SOF标记组成了仅有标记的(token-only)事务,它以相对于每帧的开始精确计算的时间间隔发送SOF记号Marker和伴随的帧数。包括集线器的所有全速功能部件都可收到SOF包。SOF标记不会使得接收功能部件产生返回包;因此不能保证向任何给定的功能部件发送的SOF都能被收到。SOF包发送2个时间调配Timing信息,当功能部件探测到SOF的PID的时候,它被告知发生SOF。对帧时间敏感而不需要追踪帧数例如集线器的功能部件,仅需对SOF的PID译码;可忽略帧数和其CRC。如果功能部件需要追踪帧数,它必须对PID和时间戳都进行译码。对总线时间调配信息的没有特别需要的全速设备可以忽略SOF包。

三、数据包

数据包由PID、包括至少0个字节数据的数据区和CRC构成。有4种类型的数据包,根据不同的PID:DATA0、DATA1、DATA2和MDATA来识别。DATA0和DATA1两种数据PID是为了支持数据切换同步(Data Toggle Synchronization)而定义的;在同步高速传输中,四种数据PID格式都会被用到;对于分离传输只会用到DATA0、DATA1和MDATA三种数据格式。


数据包格式

对于低速设备,数据区最大可以承载8字节;对于全速设备,数据区最大可以承载1023字节;对于高速设备,数据区最大可以承载1024字节;

四、握手包

握手包仅由PID构成,握手包用来报告数据事务的状态,还能用来表示数据成功接收、命令的接收或拒绝、流控制(Flow Control)和停止(Halt)条件。只有支持流控制的事务类型才能返回握手信号。握手总是在事务的握手时相(Phase)中被返回,也可在数据时相中代替数据被返回,握手包由1个字节的包字段后的EOP确定界限。如果包被解读为合法的的握手信号,但没有以1个字节后面的EOP终止,则它被认为是无效的,且被接收机忽略。

握手包格式:

有3种类型的握手包:

  • ACK:表示数据包没有位填充或数据字段上的CRC错,并且数据PID被正确收到。ACK在下列的情况下被发放,当时序位(Sequence Bit)匹配且接收器能接受数据的时候,或者当时序位失配,但发送方和接收器互相之间必须再同步(Resynchronize)的时候。ACK握手信号只适用于数据被传送且期待握手信号的事务中。对于输入事务,ACK由主机返回,而对于输出或建立事务则由功能部件返回。
  • NAK:表示功能部件不会从主机接受数据(对于输出事务),或者功能部件没有传输数据到主机(对于输入事务)。NAK仅由功能部件在输入事务的数据时相返回,或在输出事务的握手时相返回。主机决不能发出NAK。出于流控制的目的,NAK用于表示功能部件暂时不能传输,或者接收数据,但是最终还是能够在不需主机干涉的情况下而传输或接收数据。
  • STALL:作为输入标记的回应,或者在输出事务的数据时相之后由功能部件返回。STALL表示功能部件不能传输,或者接收数据,或者不支持一个控制管道请求。在任何条件下都不允许主机返回STALL。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USB(Universal Serial Bus)是一种用于连接电脑和外部设备的标准接口,它有自己的通信协议USB枚举是指在插入USB设备时,计算机系统自动检测并识别该设备的过程。 首先,当我们将USB设备插入计算机的USB端口时,计算机会发送一个复位信号给USB设备,以便设备知道计算机已经察觉到它的存在。USB设备在接收到复位信号后会执行一些初始化操作,并返回一个握手信号给计算机。 接下来,计算机会发送一个叫作Get Descriptor的命令给USB设备,这个命令的作用是要求USB设备返回一些描述该设备的信息,比如设备的厂商ID、产品ID、设备类别等。USB设备收到这个命令后会返回这些信息给计算机。 然后,计算机会发送一个Set Configuration的命令给USB设备,这个命令的目的是告诉USB设备要使用哪种配置,因为有些USB设备可以有多种不同的配置。USB设备在接收到Set Configuration命令后会根据配置来进行初始化,并返回一个确认信号给计算机。 最后,计算机会发送一些其他的命令给USB设备,比如读取和写入数据的命令,以及其他特定的设备命令,这些命令的具体内容取决于USB设备的功能和应用。 通过上述的过程,USB设备和计算机建立起了通信链接,USB设备可以向计算机提供相应的功能和服务。USB枚举过程中的各个步骤确保了设备和计算机之间的正常通信和数据传输。 总结来说,USB枚举过程是计算机通过一系列的命令向USB设备发出请求,USB设备根据这些请求进行相应的操作,并返回相应的结果给计算机,以实现设备和计算机之间的通信和数据传输。这个过程是USB协议中非常重要的一部分,保证了USB设备的插拔即用的特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值