USB协议CRITICALWord格式.docx

上传人:b****5 文档编号:21138279 上传时间:2023-01-27 格式:DOCX 页数:21 大小:1.46MB
下载 相关 举报
USB协议CRITICALWord格式.docx_第1页
第1页 / 共21页
USB协议CRITICALWord格式.docx_第2页
第2页 / 共21页
USB协议CRITICALWord格式.docx_第3页
第3页 / 共21页
USB协议CRITICALWord格式.docx_第4页
第4页 / 共21页
USB协议CRITICALWord格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

USB协议CRITICALWord格式.docx

《USB协议CRITICALWord格式.docx》由会员分享,可在线阅读,更多相关《USB协议CRITICALWord格式.docx(21页珍藏版)》请在冰豆网上搜索。

USB协议CRITICALWord格式.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1