USB协议CRITICALWord格式.docx
《USB协议CRITICALWord格式.docx》由会员分享,可在线阅读,更多相关《USB协议CRITICALWord格式.docx(21页珍藏版)》请在冰豆网上搜索。
0.0625μs发送一次;
SOF包构成如下图所示:
USB低速和全速模式:
每发送一个数据包(USB最小传输单元)之前会发送一个NRZI的同步码,即:
7’b0+1’b1(80H)
全速协议和低速协议对时钟精确度(数据比特率)的要求见下表:
5.10.2USBClockModel
TimeispresentintheUSBsystemviaclocks.Infact,therearemultipleclocksinaUSBsystemthatmustbeunderstood:
✓SampleClock:
Thisclockdeterminesthenaturaldatarateofsamplesmovingbetweenclientsoftwareonthehostandthefunction.Thisclockdoesnotneedtobedifferentbetweennon-USBandUSBimplementations.
✓BusClock:
Thisclockrunsata1.000msperiod(1kHzfrequency)andisindicatedbytherateofSOFpacketsonthebus.Thisclockissomewhatequivalenttothe8MHzclockinthenon-USBexample.IntheUSBcase,thebusclockisoftenalower-frequencyclockthanthesampleclock,whereasthebusclockisalmostalwaysahigher-frequencyclockthanthesampleclockinanon-USBcase.
✓ServiceClock:
ThisclockisdeterminedbytherateatwhichclientsoftwarerunstoserviceIRPsthatmayhaveaccumulatedbetweenexecutions.ThisclockalsocanbethesameintheUSBandnon-USBcases.
5.10.3ClockSynchronization//时钟同步问题在USB协议中已有考虑
Inorderforisochronousdatatobemanipulatedreliably,thethreeclocksidentifiedabovemustbesynchronizedinsomefashion.Iftheclocksarenotsynchronized,severalclock-to-clockattributescanbepresentthatcanbeundesirable:
✓ClockDrift:
Twoclocksthatarenominallyrunningatthesameratecan,infact,haveimplementationdifferencesthatresultinoneclockrunningfasterorslowerthantheotheroverlongperiodsoftime.Ifuncorrected,thisvariationofoneclockcomparedtotheothercanleadtohavingtoomuchortoolittledatawhendataisexpectedtoalwaysbepresentatthetimerequired.
✓ClockJitter:
Aclockmayvaryitsfrequencyovertimeduetochangesintemperature,etc.Thismayalsoalterwhendataisactuallydeliveredcomparedtowhenitisexpectedtobedelivered.
✓Clock-to-clockPhaseDifferences:
Iftwoclocksarenotphaselocked,differentamountsofdatamaybeavailableatdifferentpointsintimeasthebeatfrequencyoftheclockscycleoutovertime.Thiscanleadtoquantization/samplingrelatedartifacts.
ThebusclockprovidesacentralclockwithwhichUSBhardwaredevicesandsoftwarecansynchronizetoonedegreeoranother.However,thesoftwarewill,ingeneral,notbeabletophase-orfrequency-lockpreciselytothebusclockgiventhecurrentsupportfor“realtime-like”operatingsystemschedulingsupportinmostPCoperatingsystems.Softwarerunninginthehostcan,however,knowthatdatamovedovertheUSBispacketized.Forisochronoustransfertypes,asinglepacketofdataismovedexactlyonceperframeandtheframeclockisreasonablyprecise.Providingthesoftwarewiththisinformationallowsittoadjusttheamountofdataitprocessestotheactualframetimethathaspassed.
USB的包结构及包分类//网络资料
USB的传输总是低位在前,高位在后。
USB的传输方向:
从设备到主机的数据为输入;
从主机到设备的数据叫做输出。
1.包结构
以同步域开始,紧跟着一个包标识符PID(PacketIdentifier),最终以包结束符EOP(EndofPacket)结束这个包。
∙同步域
✓作用:
①通知USB串行接口引擎数据要开始传输;
②同步主机和设备之间的时钟。
✓格式:
①全速/低速设备的同步域为00000001;
②高速设备的同步域为31个0,后面跟1个1;
这是对发送端的要求,接收端在解码时,0的个数可以少于这个数。
∙包标识符PID
✓包标识符PID是用来标识一个包的类型。
✓PID共有8位,目前USB协议仅使用4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用来校验PID。
✓传输的顺序为PID0,PID1,PID2,PID3,...,PID7。
∙包结束符EOP
✓全速/高速模式的EOP是一个约为2个数据宽度的SE0;
✓高速模式的EOP是通过故意的位填充错误实现的。
✓单端0(SE0):
D+和D-同时保持低电平。
✓单端0的用处:
①包结束;
②复位信号(USB集线器对USB设备的复位操作,就是将总线设置为SE0约10ms)。
✓Q:
如何一个位填充错误是EOP还是传输错误?
A:
通过CRC校验,即如果CRC正确,则说明这个位填充是EOP;
否则说明传输错误。
2.包分类
根据包标识符PID的不同,包可以分为四种包:
令牌包(tokenpacket,PID1~0为01)、数据包(datapacket,PID1~0为11)、握手包(handshakepacket,PID1~0为10)、特殊包(specialpacket,PID1~0为00)。
2.1令牌包
令牌包用来启动一次USB传输。
由于USB是主从结构的拓扑结构,所以所有的数据传输都是主机发起的(唯一的例外是支持远程唤醒的设备能够主动改变总线的状态,让集线器感知到设备的唤醒信号,但是这一过程并不发送数据,只是改变总线的状态)。
令牌包分4种:
输出(OUT)、输入(IN)、建立(SETUP)、帧起始(SOF)。
✓输出令牌包:
主机将要向设备发送一个数据包。
✓输入令牌包:
主机将要从设备读取一个数据包。
✓建立令牌包:
与输出令牌包几乎相同,不同之处是建立令牌包只使用DATA0,并且发送到设备的控制端点,设备必须接收建立令牌包。
✓帧起始令牌包:
在每帧(或微帧)开始时发送,并且以广播的形式发送,使得总线上的所有USB全速/高速设备都可以接收到SOF令牌包。
同步域
8位标识符PID
7位地址
4位端点号
5位CRC5校验
EOP
OUT、IN、SETUP令牌包结构图
11位帧号
SOF令牌包结构图
2.2数据包
字节0
字节1
…
字节n
16位CRC16校验
数据包的结构图
∙数据包类型不匹配主要发生在握手包。
2.3握手包
握手包结构图
∙ACK:
正确接收数据,并且有足够的空间容纳数据。
主机和设备都可以使用ACK来确认,而NAK、STALL、NYET只有设备才能够返回,主机不能使用这些握手包。
∙NAK:
①没有数据需要返回;
②数据接收正确,但是没有足够的空间容纳数据。
∙STALL:
设备无法执行这个请求或者设备已挂起。
设备返回STALL,需要主机干预才能解除这种STALL状态。
∙NYET:
只在USB2.0高速设备输出设备中使用,表示设备本次数据成功接收,但是没有足够的空间来接收下一次的数据。
主机在下一次输出数据前,将使用PING令牌包来探测设备是否有足够的空间接收数据,以免浪费不必要的带宽和时间。
帧开始包,SOF,Start-of-Frame
主机以每1.00ms±
0.0005ms一次的额定速率发出帧开始(SOF)包。
如下图所示,SOF包是由指示包类型的PID和其后的11位的帧号字段构成。
SOF标记组成了仅有的(token-only)事物,它以相对于每帧的开始精确计算的时间间隔发送SOF记号(Marker)和伴随的帧数。
包括集线器的所有全速功能部件都可以收到SOF包。
SOF标记不会使得接收功能部件产生返回包;
因此,不能保证向任何给定的功能部件发送的SOF都能被收到。
SOF包发送2个时间调配(Timing)信息。
当功能部件探测到SOF的PID的时候,它被告知发生SOF。
对帧时间敏感而不需要追踪帧数(例如集线器)的功能部件,仅需对SOF的PID译码,可忽略帧数和其CRC。
如果功能部件需要追踪帧数,它必须对PID和时间戳都进行译码。
对总线时间调配信息没有特别需要的全速设备可以忽略SOF包。
USB1.1时间帧管理
当进行控制传输和批量传输时候,不用考虑从时间方面考虑。
但是对于同步传输和中断传输,均要考虑时间帧管理。
USB1.1中用帧frame来考量时间,USB2.0中添加了微帧microframe。
每个frame代表1ms,每个microframe代表125us。
某一时间单元内的非周期性传输(控制传输和批量传输)的数量要随着这个时间单元内的周期性传输(同步传输和中断传输)的数量而改变。
USBhost在进行传输时候利用frame和microframe来考量时间。
当与外设device进行中断,控制,批量传输时候,并不需要去考虑时间管理。
但是,在进行同步传输时,比如说我们现在做的usb音频设备,就必须用frame和microframe来得到和系统同步。
从这个角度出发,host发出SOF包来表明即将开始frame和microframe。
SOF包的格式见另外一篇博文。
对于中断同步传输,并不使用握手包,即对于数据是否正确接收,均不会再次发送数据。
从上图来有令牌包(TokenPacket)和数据包(DATAPacket)。
USB1.1中断传输中的数据研究:
✓对于采样率为44.1k的要求。
可以采用9帧每帧44个samples加1帧45个samples的方法传递数据。
✓9*44+1*45=441samples,441/(9+1)=44.1samples每帧。
✓对于采样率44.1k,有44100samples/persecond,即44.1sampls/permsec。
✓对于full-speed,最多每帧1023个bytes,那么每秒有1.023Megabytes。
✓在usb中有几件事情制约设备要求的数据传送速度。
分别是busbandwidth,devicecapabilities,devicedriverandapplicationsoftwareability,latenciesinthehost'
shardwareandsoftware.
USB封包格式
1.起始(SOP)封包
根集线器会在每1ms时,送出SOF封包。
这介于2个SOF封包之间的时间,即称为帧(frame)。
SOF封包虽是属于令牌封包的一种,但却具有独自的PID形态名称SOF。
通常目标设各都利用SOF封包来辨识帧的起点。
这个封包常用于等时传输。
也就是在1ms的帧(高速是125μS微帧,将1ms切成8份)开始时,等时传输会利用SOF激活传输并达到同步传输的作用。
而在每一个帧开始时,SOF会传给所有连接上去的全速设各(包含集线器)。
因此,SOF封包并不适用于低速设备。
这个封包内包含了一个帧码,其可不断地递增,且在高达最大值时反转为0,重新再计数一次。
这个帧码是用来表示帧的计数值,因此,8个微帧都使用同一个帧码值。
若必要时,高速设备可计算出SOF的重复使用次数,并计算出微帧的数量。
通过缩短微帧的周期时间,便可减少高速设备对于缓冲存储器的需求。
如图1所示,高速的根集线器(HUB)将会使用额外的SOF来传输8个微帧。
有些书籍会把这种高速的SOF,另命名为uSOF。
这种增加的微帧,同时也替高速的连接带来了更复杂的控制方式。
图1USB帧与微帧示意图
此外,再利用如图2所示的简图来说明主机所送出的一个SOF封包的格式。
其中,SOF的封包标识符,PID数据域的值为0xA5。
PID[7:
4]=0101(5)与PID[3:
o]=1010(A)所产生的,只不过它的传送顺序须由LSB→MSB。
因此,即可推算出0xA5。
以下,所有的PID数据域皆可由此推算而得到。
图2SOF封包的各种组成字段
图2显示了SOF封包的各种字段与相关的定义。
此外,端点(device)可以通过SOF封包来加以同步,或是以帧码值来作为时间的参考依据。
当整个USB总线上没有USB传输时,SOF封包也可避免让设备切人低功率的中止(suspend)状态。
再者,虽然在低速设各上,是看不到SOF封包的,但相反,设各的集线器使用了前面所提及的EOP(Endof-Packet)信号,且在每一个帧设置一次。
因此,有时后也称这种信号为设各的低速存活(keepalive)信号。
所以说,SOF/uSOF封包是给全速/高速设各来使用的,而低速存活信号却可避免让低速设备切入中止状态中。
2.令牌封包
由于USB的数据交易是由PC主机端所激活的,所以在每一个数据交易中,必须以下列的5个数据域所组合而成的令牌封包作为起始,并执行通信协议的前导工作。
一个令牌封包含盖了5个数据域SYNC、PID、ADDR、ENDP与CRC5。
这即是54233的第1个数字:
5。
如下所列为其令牌封包的各个组成的数据域。
令牌封包的PID数据域(PID[1:
0]=[0,1])中包含了OUT、IN、SETUP这3种PID类型名称。
也就是包含了OUT令牌封包、IN令牌封包以及SETUP令牌封包。
例如,在执行控制传输主机要通过预设的地址取得设备描述符(Get ̄Descriptor),就必须先执行下列的SETUP令牌封包,作为每一次控制传输的开始,其中,PID栏变成SETUP的PID类型名称(0xB4)。
IN令牌封包,则是主机用来通知设备,将要执行数据输入的工作。
而OUT令牌封包则刚好相反。
图3显示了PC主机所起始的SETUP令牌封包。
图3
令牌封包的各种组成的字段
3.数据封包
在USB接口中,主机执行了总线的管理、数据传输以及设备对主机所提出的要求命令作出响应的动作。
这些所要传输的数据与要求命令是什么呢?
因此,必须通过数据封包来执行这项工作。
而由SETUP、IN与OUT令牌封包所起始的数据传输,将会以DATAO、DATA1、DATA2与MDATA封包来加以实现。
一个数据封包含了4个数据域:
SYNC、PID、DATA与CRC16。
各个字段的意义之前已有介绍过。
这即是54233的第2个数字:
4。
在这里,要稍微注意的是DATA字段内所放置的位值,须根据USB设备的传输设备(低速、高速与全速)以及传输类型(中断传输、批量传输与等时传输)而定,且须以所设置的MaxPackSize字节为基本单位。
也即是,若传输的数据不足MaxPackSize字节,或是传输到最后所剩余的也不足MaxPackSize字节,则仍须传输MaxPackSize个字节的数据域。
列出由4个数据域所组合而成的数据封包。
数据封包的PID数据域(PID[1:
0]=[1:
1])包含了4种类型:
DATA0、DATA1、DATA2与MDATA。
而根据USB规范,最初的数据封包都以DATA0作为开始,其后才是DATA1,然后依此方式交替切换。
这个动作称之为数据紧密连接(datatoggle)。
这个动作有点类似将数据紧密连接。
如此就可确保整个传输过程中,主机能与设各维持同步,且作为帧错之用。
例如,如果两个连续的DATA0被接收到的话,意味着DATA1封包被遗漏掉,并产生了错误的状况。
而DATA2与MDATA,则仅适用于高速的等时传输。
若主机要针对特别寻址的设备端点,送出取得设备描述符的命令,就可如图4所示,将含有命令的数据封包传出。
其中,须特别注意的是,由于是控制传输,所以数据域中仅有8字节。
至于“80060001000040”的设备要求的意义。
图4数据封包的各种组成字段
4.握手封包
握手封包是最简单的封包类型。
在这个握手封包中,仅包含一个PID数据域。
它的格式如下所列,仅包含SYNC与PID两个数据域,这即是54233的第3个数字:
2。
握手封包的PID数据域(PID[1:
0])中包含了ACK、NAK、STALL与NYET这4种PID类型名称。
也就是含有ACK、NAK、STALL与NYET握手封包。
延伸上一个图例,如果设备已收到主机要执行取得设备描述符的命令,设备就以握手封包来加以响应。
因此须注意的是,如果设备已准备接收的话就以ACK握手封包响应;
如果尚未就绪就使用NAK握手封包响应;
如果发生错误而停滞,就使用STALL握手封包响应。
图5显示一个握手封包的格式,其中ACK的PID数据域值为Ox4B,刚好与SETUP的PID数据域值相反。
图5握手封包的各种组成字段
通过上述的3个封包,即可组成一个数据交易。
当然,这即是54233的第4个数字:
3。
对于高速设备,为了改善NAK的机制,特别支持了NYET握手封包。
这是由于当数据已经传输至总线时,通过NAK这个OUT数据交易的动作是不够的。
况且若是在总线上存在着高频率的NAK传输过程,将会使得整个总线逐渐地被拖累,带宽被分享掉。
此时,高速设各就可以使用特殊的PING封包(稍后会提及)来询问,是否接收器还有缓冲区空间来接收OUT数据交易。
如果设各以ACK来响应,那么传送器就会安排
OUT传输。
反之,如果响应的是NYET,那么传送器就会以PING封包来查询。
如此,总线上就会有最佳的使用率。
5.特殊封包
总共包含了4个特殊封包(PRE、ERR、SPLIT与PING)。
其中,一个仅使用在低速设备,一个仅使用在高速设各,其余两个则是针对当低速或是全速设备连接上USB2.0集线器后,再以高速的方式与主机通信时,才会用到。
(1)PRE封包
这个特殊前置(SpecialPreamble,PRE