《USB接口标准.doc》由会员分享,可在线阅读,更多相关《USB接口标准.doc(38页珍藏版)》请在三一办公上搜索。
1、第6章第7章 第6章 USB接口标准 161第8章 USB接口标准第9章第10章 USB接口和串行接口、并行接口相比属于高级接口,一方面USB具备许多高级特性,如即插即用,供电以及电源管理等,另一方面USB规范中规定了梧炳腮基概石麦贯锅侥客睹封拨沼睦乳猩婚梦负研俄描译涌台山泥絮拥班涌赔察客榴东蛇纺讣腑什捎笛折肿驱函瑞弘苔咳羽砸曙蒙俗绑般恕朴议尿罕蚁甭慈钱头缄融药狄英帜调岛拱粉浴清拾犀焦最店况岿岁升锥肝粳革飞脂浇肤这弧粉豹沽姆蛹闷左绷谋羞韵舱寓陋拖座密下斧耿塞嘱终登猴鹃盂炽磐返尤钠幌月掂等针产虐攘鹰阳刀打浓墟裕幢略忍赎毁铁雪骗赌茵金芹骇骏笑遗孽唆凝骗霜味繁竣记陨舀撕秋辉迟值途六类杀焰捣趁俩嗣推凳
2、纳盖贿獭博翟皿退熔襄钱账范坎忆抑臣息威窥马甩从艺镜维惹涯描辅貉道拐麓充腾诡宏麦睫攫修宙粥虑狞辖塌肆颜策螺漠谊郸咱林躺宋课入袜风样到USB接口标准倡标氢勘淀野牌悯糯枪撼掷栈噪络鉴绅朱戚注毖秸仁毫芳港爵滨点呀县唐涅裴玲减钢告仪萄爸劝裴畦惜蜀嗅固哮侧宰韵志狸式辨捉淮滓翌鹃幽碧秤界狰兢仁诗返魂诚摈蚁溃路捕籍艘滦柜瞒惊窥田朋巨抛伺将亲到汇噎吞苇舍灼奖跌碰现觅仪隋陆仿赃坍蛇垢父城贯爽剐呵轻现嗅烟痢八只暇瞬磐袒艘猫静椭铭遍系爷贱谚械管满悦捆蛛探赘崇捷腕纽辣恼劣邑声峦获绕幻等指餐官持炔兵顺够铝泽放惰蜒状戴灸瞳朝矗金陆炙砸烯攘柱梁棺淳摄锐菱艳钢川啡皑吏菱呀王顷秩仗酉彪扣纲夜裙级衷队悦牙镀吕揍哼腿嚏僳迸捌翼卑匙淄
3、驭仁恼仍捷鸡上讲懦抛怕拈难膜积剪酵写奔园惮慌阐蚊埋婶鼻种USB接口标准USB接口和串行接口、并行接口相比属于高级接口,一方面USB具备许多高级特性,如即插即用,供电以及电源管理等,另一方面USB规范中规定了完善的通信规程,USB的编程必须严格遵守这些规程。10.1 USB接口特点Microsoft从1998年7月的Windows 95开始支持USB,在后续的Windows 2000/XP中USB得到了完善的支持,USB外围设备也全面普及使用,成为最受欢迎的接口。而且有取代传统接口的趋势。实际使用中的USB版本主要包括USB1.1和USB 2.0,USB1.1的最高传输速率为12Mb/s,USB
4、2.0版本的出现更是拓宽了USB的应用领域,它加入了许多高速传输的特性支持,最高传输速率达到了480Mb/s。 1. 热拔插与即插即用USB接口支持热拔插,可以在PC与USB外围设备开机的状态下,插入或是拔掉USB连接头,而不会造成对PC或是USB外围设备的损害。USB支持即插即用,将USB设备连接到计算机上时,Windows操作系统会自动检测该设备,并且加载适当的驱动程序。在第1次安装时,Windows会提醒用户放入包含USB设备驱动程序的磁盘。Windows会自动帮助用户完成其后的安装过程,一般不需要重新开机就可以直接使用该USB外围设备。Windows操作系统可以完成对USB的自动配置,
5、USB外围设备没有用户设置的选项。例如指定通信端口地址或是中断号码等。2. 集线器扩展新式的PC一般会有28个USB连接端口。如果要连接更多的USB设备,只要将一个USB集线器连接到PC上的一个USB端口,然后将其他的USB设备连接到该集线器即可。 3. 供电与电源管理USB接口可以提供+5V的电源,外设可以由计算机或是集线器提供电源。在500 mA下,USB外围设备可以直接使用信道提供的电源。同时,USB具备电源管理功能。USB外围设备处在待机状态的时候,会自动启动省电的功能。当要使用设备时,又会自动恢复原来的状态。在使用电池来驱动的计算机系统上,这个省电特性特别有用。4. 速度在传输速度方
6、面,USB支持 3种信道速度:低速(Low Speed)的1.5Mb/s,全速(Full Speed)的12Mb/s,以及高速(High Speed)的480Mb/s。具备 USB功能的PC都支持低速与全速,高速则需要支持USB 2.0的主机板或扩充卡。以上提供的这些速度是指USB信道支持的位速率,每一个USB设备的实际数据传输速率肯定会低于这些指标。首先,除了数据之外,信道还需要传输状态、控制与错误检测信号。其次,由于多个USB设备可能分享同一个信道,USB的传输带宽是连接得全部设备分享的。理论上的单一传输最大速率在高速模式下为53Mb/s,在全速模式下为1.2Mb/s,在低速模式下则为80
7、0b/s。USB的高速模式可以达到480Mb/s,与IEEE-1394的400Mb/s相当。不过IEEE- 1394b的速度更快,可以达到 3200Mb/s。目前USB还没有更高速度的版本。5. 成本虽然USB接口比以前的传统接口复杂,不过由于接口的普及率很高,它的芯片与电缆成本都较低。与传统接口相比较,USB接口甚至可能更低,尤其是低速模式的USB设备。6. 可靠性与差错控制USB接口的可靠性较好,硬件的设计或是数据传输的协议,都保证了USB的可靠性。USB驱动程序、接收器以及电缆的硬件规范,都能尽量减少因噪声干扰而产生错误的数据。如果USB协议检测到数据有错误,它也会通知发送端重新传送数据
8、。这些特性都是由硬件来完成的,不需要另外在程序中拦截错误通知。从设计端的观点来看,USB已经定义了电缆的标准,所以USB设备的设计者不必重新指定电缆的规格。而且 USB的自动错误检查功能,让设计者不必另外在软件中进行错误检验。7. 系统支持Windows2000/XP操作系统提供了对USB的完善支持,操作系统可能提供特定USB设备的驱动程序,来让应用程序调用存取设备的函数。如果操作系统没有提供适当的驱动程序,开发者就必须自己开发。USB的设备驱动程序使用新的 Win32 Driver Model(WDM), WDM驱动程序在windows 98/2000/XP上都可以执行。WDM让开发者使用单
9、一驱动程序来支持所有的操作系统。8. 接口硬件设备方的USB硬件,必须包含控制USB通信的控制芯片。USB控制器可以集成在微处理器内部,也可以是独立的集成电路芯片。对于集成有USB控制器的微处理器,一般制造商都提供芯片的范例程序代码,可以方便开发。对于独立的USB控制芯片,需要视其接口和微处理器连接。9. 传输模式USB提供4种传输模式,以适合多种外部设备的传输要求。USB的4种传输类型是控制模式、中断模式、批量模式和实时模式。让外围设备可以有弹性的选择,无论是交换少量或是大量的数据,还是有无时效的限制,都有适合的传输类型。在操作系统、驱动程序以及应用程序上,如果数据不能够有延迟,USB会尽其
10、可能来达到限定的传输时间。USB采用基于数据的联络控制方式,接口信号线中没有特定的联络控制线,也没有指定信号的处理例程,没有假设接口的使用方式,这是与传统接口的不同之处。这样的设计是面向通用性的。10. 在老式系统上的扩展由于USB算是比较新型的接口,旧的计算机与外围设备,都没有USB连接端口。如果要将一个非USB设备连接到USB连接端口上,必须使用转换器。这些转换器包括RS-232,RS-485以及并行端口等外围设备上。如果要将一个USB设备连接到不支持USB的PC上,必须在该PC上扩展USB的接口。这就需要有USB的主机控制器硬件,以及支持USB的操作系统。USB的主机控制器硬件可以使用适
11、配卡的型式插入PC的扩充槽内。支持USB的操作系统,则需要有Windows 98或其以后的版本。11. 关于USB OTGUSB属于主从式体系结构,系统是由一个主计算机来管理所有的通信。外围设备之间不能够直接彼此沟通,必须通过主计算机才可以。为此定义USB的组织在 2001年定义了一个USB OTG(On-The-Go)规范,来补充USB 2.0的规范。USB OTG定义一个功能较少的主计算机,使用在连接单一USB设备的嵌入设备上。12. 传输距离USB的传输距离限制了USB的连接基本上是在桌面范围的,主机与外围设备的距离较短,电缆长度最长可以到5米。而传统的接口,例如RS-232,RS-48
12、5,则允许使用更长的电缆。如果要延伸USB连接的距离,就必须通过集线器来延伸。这种方式的连接,最长可达30米的距离,即用6条5米长的电缆,通过5个集线器的方式。13. 协议的复杂性早期的传统接口,只需要简单的电路与协议。如串行口和并行口,不需要复杂的计算机操作系统内核与驱动程序知识,只要用到基本的端口输入输出操作就可以实现控制。要做USB外围设备的程序设计,必须先了解USB协议,即如何在信道上交换数据。虽然控制器的芯片会自动处理大部分的通信,不过仍然需要使用程序干预,驱动程序的开发者,就需要熟悉USB协议。10.2 USB电器规范 10.2.1 USB接口USB接口采用4线传输,分别标记为GN
13、D、VUSB、D+和D-。其中GND和VUSB分别为供电的地线和+5V电源线,D+和D-为差分传输的数据线。USB传输线为屏蔽线,对于低速、全速和高速三种传输速度,对传输线的要求略有差别,主要是D+、D-的双绞要求和屏蔽要求不同,全速和高速要求必须是屏蔽双绞线,低速没有这样的强行规定。1. USB收发器USB的接口驱动电路和差分接收电路分为下游(外设端或集线器的主机方向端)和上游(主机端或集线器外设方向端)两种,两种电路是很接近的,主要的不同是上游的接口电路在D+和D-线都接有对地的15K电阻,而下游的部分接有对电源的1.5K电阻,而且全速设备(或集线器)和低速设备(或集线器)的接法不同,全速
14、设备只在D+线接有电阻,低速设备只在D-线接有电阻。高速设备在初始化时是作为全速设备的,它的收发器电阻接法和全速设备相同。图6-1 USB收发器+3.3VD+D-TxDSE0OERxDRxD+RxD-15KTxDSE0OE15KRxDRxD+RxD-USB电缆1.5K 全速外设接此电阻1.5K 低速外设接此电阻上游收发器下游收发器图中D+和D-为USB差分信号,由差分驱动器输出,TxD和RxD分别为输出和输入数字流信号,OE(Output Enable)为输出控制,OE有效时为输出,无效时为输入。RxD+和RxD-分别为D+和D-线单线检测信号。2. 信号电平USB线路上的信号电平分为两种标准
15、,低速和全速信号电平标准是相同的,高速信号有所不同,其信号电平比前者小得多。下表说明了线路上的电平的规定。表6-1 USB接口中D+和D-线电平参数低速/全速高速D+和D-高电平最大3.60.44最小2.80.36D+和D-低电平最大0.30.01最小0-0.01以上说明的仅仅是USB在传输信号时的线路电平规定,除此以外,USB还有以下几种特殊状态。3. USB线状态USB的接口信号中的线状态很多,在不同的阶段和状态具有不同的线状态。离线状态(Detached)在没有下游设备接入时,由于15K电阻的存在,D+和D-线均为低电平。即RxD+和RxD-均为逻辑0。接入状态(Attached)当接入
16、下游设备,由于1.5K电阻的存在,当接入的是全速或高速设备时,RxD+和RxD-分别为逻辑1和0,当接入的是低速设备时,RxD+和RxD-分别为逻辑0和1。空闲状态(Idle)根据线上电阻确定信号线电平,低速连接时D+为低电平,D-为高电平。全速连接时D+为高电平,D-为低电平。J和K状态J状态的线上电平和空闲状态相同,但不是由线上电阻的值确定的,而是由上游或下游驱动电路输出确定的。K状态的电平与J状态相反,也是由上游或下游驱动电路输出确定的。SE0(Single Ended Zero)状态D+和D-线均为低电平。SE1(Single Ended One)状态是非法状态。在正确的连接中不会出现
17、。复位(Reset)状态D+和D-双线低电平(SE0)超过10ms时间,在主机开始和设备通信之前要发出复位状态,将设备初始化为默认设置。图6-2 USB的Reset状态EOP(End Of Packet)状态图6-3 USB的EOP状态2个位宽时间的SE0状态,跟着1个位宽时间的J状态。挂起(Suspend)状态大于3ms的空闲状态使得设备进入挂起状态。挂起状态的设备进入低功耗状态,这时的设备耗电电流不大于0.5mA。在工作期间,主设备每1ms向设备发送一次SOF数据包(全速设备)或Keep Alive信号,这使得设备保持工作状态而不进入挂起状态。图6-4 USB的Suspend状态恢复(Re
18、sume)状态将挂起状态时的线状态(J状态)反向(K状态)并持续20ms以上,后跟一个低速连接的EOP状态。恢复状态使得设备脱离挂起状态,恢复到工作状态。图6-5 USB的Resume状态Keep Alive状态信号图6-6 USB的Keep Alive状态一个低速连接的EOP信号,在低速设备中每1ms发送一次,保持设备不进入挂起状态。下表简要说明了以上的各种USB状态信号。表6-2 USB线状态简要说明USB线状态电平差分1D+=高,D-=低差分0D-=高,D+=低SE0D+、D-=低SE1D+、D-=高J 状态: Low-speedFull-speed 差分0差分1K 状态: Low-sp
19、eedFull-speed 差分1差分0Idle 状态: Low-speedFull-speed D-=高,D+=低D+=高,D-=低Resume 状态K 状态SOP(包开始)Idle 状态后跟 K状态EOP(包结束)2ms的SE0后跟1位宽时间的J 状态DisconnectSE0 不小于2usConnectIdle 2.5usResetSE0 不小于2.5 us10.2.2 USB NRZI编码USB采用NRZI编码,在差分驱动器之前经过NRZI编码,在接收端差分接收器之后再进行NRZI译码。NRZI编码器D+D-NRZI译码器图6-7 USB的NRZI编码和译码NRZI(Non Retur
20、n to Zero Invert,不归零反向码)编码方式。这种编码方式实际上是一种位同步方案,既能够确保数据发送的完整性,又不需要独立的时钟信号和数据一起发送。0110100011101001001010000110图6-8 NRZI变换图示的就是一个串行数据流和相应的经过NRZI编码的数据,NRZI编码的规则是当输入为0时输出反向,输入为1时输出不变。NRZI编码数据流必须在一个数据位内被采样,以检测输入和前一位相比是否发生了电平的跳变。解码器在每一位对数据流进行采样,以检测是否发生了跳变。数据流的跳变使解码器可以和收到的数据保持同步,因而可以不使用一个独立时钟信号。但是如果一长串的连续1将
21、会导致无电平跳变,从而引起接收器最终丢失同步信号,解决办法是采用位填充的办法。位填充的做法是这样的,如果在数据流中出现连续传输6个1的情况,则强制在NRZI编码的数据流中加入一个0,这就确保接收器至少可以在每7个位的时间间隔内从数据流中会检测到一次跳变。这就使接收器端和传送端的数据保持同步。NRZI数据的发送器负责在NRZI数据流中插入填充0。接收器必须在6个连续1之后自动删除掉一个0。10.3 USB传输USB的数据通信以时间片为一个时间单位,低速设备和全速设备的时间片是1ms(帧),高速设备的时间片是125us(微帧),在一个1ms或125us的帧或微帧中,可以混合多个、多种USB传输。1
22、0.3.1 USB传输类型USB用来处理不同传输速率以及不同响应时间的众多外围设备。 基于通用性方面的考虑,USB定义了四种传输类型,每一种传输类型处理不同的外部设备需求。1. 控制传输(Control transfer)控制传输是USB规范中惟一有定义函数的传输类型。控制传输让主机读取设备的信息、设置设备的地址以及选择设置配置。所有的USB设备,都必须支持控制传输。2. 中断传输(Interrupt transfer)中断传输使用在设备必须定时接受主机轮询的应用中,对传输的延时有具体的要求。除了控制传输之外,中断传输是低速设备惟一的传输数据的方式。鼠标与键盘利用中断传输,来传送鼠标移动与按键
23、的数据。设备并不必需要支持中断传输。3. 批量传输(Bulk transfer)批量传输使用在对传输带宽和传输延时都没有具体要求的场合,例如传送文件给打印机或是从扫描仪接收数据。如果总线被其他必须保证速率的传输所占据时,批量传输就必须等待。不过当总线闲置时,批量传输的速率也是很快的。只有全速与高速的设备,才支持批量传输。设备并不必需要支持批量传输。4. 实时传输(Isochronous transfer)实时传输有具体的传输带宽要求,但是没有错误的检验。使用实时传输的设备包括音频设备,来实时播放音频。当收到错误的数据时,实时传输是惟一不会自动重新传送的类型,所以通过实时传输的信息对错误不能很敏
24、感。只有全速与高速的设备支持实时传输。设备并不一定要支持实时传输。关于USB带宽的分配,由于中断传输和实时传输有延时要求,这两种传输可以占用USB总带宽的90%(低速或全速)或80%(高速),在每一个帧或微帧中为控制传输预留总带宽的10%(低速或全速)或20%(高速),剩余的传输带宽分配给批量传输。下表说明了四种传输类型的不同方面的特点。表6-3 4种USB传输类型的特点传输类型控制传输批量传输中断传输实时传输典型用途设备的设置打印机、磁盘键盘、鼠标器音频设备必需支持?是否否否低速设备支持?是否是否高速 每个传输的数据(B/ms)15,72853,24824,57624,576每个管道的最大可
25、能值31个64字节事务/微帧13个512字节事务/微帧3个1024字节事务/微帧3个1024字节事务/微帧全速每个传输的数据(B/ms)8321216641023每个管道的最大可能值13个64字节事务/帧19个64字节事务/帧1个64字节事务/帧1个1023字节事务/帧低速每个传输的数据(B/ms)24不支持0.8不支持每个管道的最大可能值3个8字节事务/帧8字节/10ms保留带宽低速/全速10%高速20%(最小值)无低速/全速90%高速80%(最大值)错误纠正有有有无信息或数据流信息数据流数据流数据流保证传输速率?否否否是保证传输延时?否否是是10.3.2 USB传输的要件USB规范将传输定
26、义为“制造与携带一个通信要求的过程”,一个传输可能是传送几个字节,也可能传送一个长的文件。每一个传输包含一笔或多笔事务(Transaction),而每一笔事务包含1个、两个或是3个信息包(Packet)。每一个信息包包含若干个字节,包括一个信息包标识符(Packet Identifier,PID), CRC校验数据以及额外的信息。每一笔事务包含一个令牌(Token)信息包,并且可能包含一个数据(Data)与/或联络(Handshake)信息包。传输事务事务事务令牌包数据包联络包PID数据CRC图6-9 传输、事物和数据包之间的关系1. 设备端点所有的传输都是传送到一个设备端点(Device E
27、ndpoint)或是由一个设备端点发出。通常设备端点是一个区块的内存或是控制器芯片内的一个缓存器,用来作为数据的缓冲区。储存在设备端点的可能是接收到的数据,或是等待要送出的数据。主机也有接收与传送数据的缓冲区,不过主机并没有端点,而是当作与设备端点通信的出发点(Starting Point)。 在USB的规范中,定义设备端点是“一个USB设备中的唯一可寻址部分,是主机与设备之间通信的来源或目的”。一个设备端点只能在单方向传输数据,不过控制端点(Control Endpoint)除外,它可以双向传输数据。每一个设备端点的惟一地址,包括一个端点号码以及方向。端点号码可以是015。方向如果是输入表示
28、流向主机;方向如果是输出,表示流出主机。如果是作为控制传输的端点,必须设置成双向传输。所以一个控制端点会有一对输入与输出端点,来分享同一个端点号码。每一个设备都必须将端点0设置成一个控制端点。除此之外,很少需要有额外的控制端点。除了控制传输之外,其他传输都是单向传送数据。但状态与控制信息,则可能反向进行。一个端点号码,可以同时支持输入与输出端点地址。例如端点1可以支持输入端点地址来传送数据到主机,同时支持输出端点地址从主机读取数据。除了端点0之外,一个全速设备可以有30个额外的端点,端点号码为115,每一个号码可以同时支持输入和输出。一个低速设备则只能有两个额外的端点,方向可以任意组合。每一笔
29、在总线上的事务包含一个端点号码。以一个码来指示数据流动的方向以及此事务是否是用来初始一个控制传输。此码可以是输入、输出或是设置,如表6-4所列。输入与输出的方向是对主机的。在输入的事务中,数据由设备传送到主机。在输出的事务中,数据由主机传送到设备。表6-4 输入、输出和设置事务事务类型数据来源使用此事务类型的传输类型内容输入设备所有传输类型一般数据输出主机所有传输类型一般数据设置主机控制传输要求 在设置的事务中,数据也是由主机传送到设备。不过设置事务是用来初始一个控制传输,设备需要识别设置事务来弄清其内部的数据意义。设置事务也是设备唯一需要永远接受的事务类型。任何的传输都可能使用输入或输出事务
30、,但是只有控制传输使用设置事务。当设备收到包含设备地址的输出或设置事务时,它将接收到的数据储存在适当的端点位置,然后触发一个中断。设备的中断服务例程会处理接收到的数据。当设备收到包含设备地址的输入事务时,如果设备有准备传送给主机的数据,它会从指定的端点送出数据,然后触发一个中断。设备的中断服务例程会做适当的处理,然后准备下一个输入事务。数据缓冲区管道数据缓冲区管道端点0端点1设备管道数据缓冲区端点2主机图6-10 USB主机和设备之间的管道2. 管道 在一个传输发生之前,主机与设备之间必须先建立一个管道(Pipe)。USB的管道并不是一个实际的对象,它只是设备的端点与主机控制器的软件之间的连接
31、。 主机建立管道的时机,是在系统启动之后或是设备连接的时候。如果移除设备,管道也会跟着被移除。在要求另一个设备的设置或接口时,主机也可能会要求新的管道或是移除该管道。每一个设备都会有一个默认控制管道(Default Control Pipe),此默认控制管道使用端点0。主机所收到的设置信息包括设备使用的每一个端点的描述符(Descriptor)。端点的描述符用来告诉主机如何与该端点通信。描述符包括端点的地址,使用的传输类型,数据信息包的最大值,以及传输的时距(Interval)等。当设置需要实时传输或中断传输的管道时,主机只有在总线有足够的带宽来完成要求速率的传输时,才会接受该要求的设置。因为
32、实时传输必须要有一个保证速率(Guaranteed Rate,每秒的事务量),而中断传输需要一个保证最大延迟(Guaranteed Maximum Latency)。在实时传输与中断传输时,主机会在建立管道之前检验有无足够的带宽。如果有足够的带宽,主机会接受设置的要求,并且保证传输时间的要求。如果没有足够的带宽,主机会拒绝设置的要求并且要求的软件必须重新尝试一次,可能是等待有足够的带宽,或是选择较小带宽的设置。如果是没有保证时间的要求,主机不会检查有无足够的带宽,只是尽量在有效的时间内做传输。除了以传输类型来分类的管道外,USB规范还定义了消息管道(Message Pipe)与流管道(Stre
33、am Pipe)。消息管道是双向的管道,控制传输是惟一使用双向消息管道的传输,其他的传输则是使用单方向的流管道。在消息管道中,每一个传输以一个包含要求的设置事务开始。要完成这个传输,主机与设备可能交换数据与状态信息,或是设备只传送状态信息。如果设备支持某个要求,它会执行该要求的动作。如果设备不支持该要求,它会用一个码来表示不支持。USB规范并没有定义流管道的数据格式,设备只是接收传来的数据、主机的软件或是设备的固件再做适当的处理。10.3.3 事务USB的规范将事务定义为“将一个服务传送到一个端点”。这里的服务指的是主机传送信息给设备,或是主机要求从设备接收信息。每一个事务包含识别用途,错误检
34、查与控制的信息,以及要交换的数据。1. 事务的类型事务的类型有3种:输入、输出与设置。事务的类型依据其目的及数据流的方向来分类,设置事务用来传送控制传输的要求给设备,输入事务是从设备接收数据,输出事务是传送数据到设备。每一种传输类型(控制、中断、批量以及实时),包含一个或多个阶段(Stage,即事务的类型)。而每一个阶段包含两个或3个相位(Phase,即信息包),如表6-5所列。表6-5 传输类型、阶段与相位的关系传输类型阶段(Stage),事务相位(Phase),信息包控制传输设置令牌(Token)数据(Data)联络(Handshake)数据(可选)(输入或输出)令牌数据联络状态(输入或输
35、出)令牌数据联络批量传输数据(输入或输出)令牌数据联络中断传输数据(输入或输出)令牌数据联络实时传输数据(输入或输出)令牌数据一个完整的传输,可能需要多个帧/微帧才能完成。但是一个事务是单一的通信,完全不能被中断。在USB总线上的其他通信,不可以插入到一笔事务之内。如果是少量数据的传输,可能只需要一笔事务。如果数据量很大,该传输可能分成多笔事务,将数据分配在每一笔事务内。2. 事务的相位(Stage)每一笔事务可以有3个或少于3个相位。这3个相位依序产生,分别是令牌、数据和联络。每一个相位包含一个或两个事务信息包,每一个信息包是一个区块的固定格式的信息。每一个信息包的信息是以一个PID开头,用
36、于识别。依据事务种类的不同,PID后面可能接着端点地址、数据、状态信息、一个帧号码,或错误校验位,如表6-6所示。表6-6 数据包类型包类型PID名称PID数值使用在的传输类型来源总线速度说明令牌OUT0001所有主机所有输出(主机到设备)事务的端点地址IN1001所有主机所有输入(设备到主机)事务的端点地址SOF0101帧开端主机所有帧开端的令牌以及帧号码SETUP1101控制主机所有设置事务的端点地址数据DATA00011所有主机、设备所有数据信息包在传输中可以DATA0/1交替传送,避免数据包丢失。在高速传输的一个微帧中传送多个信息包,可以使用DATA0/1/2来指示数据串行化MDATA
37、表示有更多的数据包在该微帧之后。DATA11011所有主机、设备所有DATA20111实时主机、设备高速MDATA1111实时、中断主机、设备高速联络ACK0010所有主机、设备所有收到无错误数据信息包的接收端的回答NAK1010控制、批量、中断设备所有设备忙,或端点没有主机请求的数据的回答STALL1110控制、批量、中断设备所有不支持主机的控制要求,或是端点暂停等状态的回答NYET0110控制写入、批量输出、分割事务设备高速设备收到无错误数据信息包,但是还没准备好下一个信息包等状态的回答特殊PRE1100控制、中断主机全速主机发出的开始,指示下一个信息包是低速ERR1100所有设备集线器高
38、速由集线器传回,来报告在分割事务时低速或全速的错误SPLIT1000所有主机高速前面放一个令牌信息包,来指示一个分割事务PING0100控制写、入批量输出主机高速忙中,检查NYET后的控制写入与批量输出事务保留0000未来使用PID是所有包的起始字节,上表中的PID数值是该字节的低4位,高4位是低4位的反码。同时PID的最低2位是包类型。3. 事务信息包格式主要的包格式有4种。令牌包格式:所有的传输的开始是一个令牌包,用于指明设备地址、端点地址和传输目的。IN、OUT和SETUP令牌的统一格式如下:SyncPIDADDRENDPCRC5EOP8 bits7 bits4 bits5 bits图6
39、-11 USB的令牌包结构包中的Sync是同步字,其二进制值为00000001,连续的0在经过NRZI编码之后会产生0、1交替的序列,使得接收端获得同步信息。CRC5是5位校验字段,用于差错控制。EOP(End Of Packet)是包结束信号,由2个位宽时间的SE0状态,跟着1个位宽时间的J状态。其中的Sync和EOP是由USB接口电路生成发出的。SOF包格式:在全速连接中,主机每1ms发送一个SOF(Start of Frame)包,其中的Frame No.字段数据每发送一次加1,计数模值为2048。在低速设备中,由Keep Alive状态信号替代SOF,这样可以节省低速连接的传输带宽。在
40、高速连接中,由于每一个1ms帧分成了8个微帧,在每一个微帧的开始发送一次SOF,但8个SOF的Frame No.值是相同的。SOF包格式:SyncPIDFrame No.CRC5EOP8 bits11 bits5 bits图6-12 USB的SOF包结构数据包格式:如果传输包含数据阶段,就需要数据包,其用途就是完成数据传输。DATA0、DATA1、DATA2和MDATA包格式都符合数据包格式。数据包中的CRC16是16位的CRC校验字段,用于差错控制。SyncPIDDATACRC16EOP8 bits(01024)x 8 bits16 bits图6-13 USB的数据包结构联络包格式:联络包的
41、格式很简单,实际的内容只有PID。SyncPIDEOP8 bits 图6-14 USB的联络包结构ACK、NAK、STALL和NYET包格式都符合握手包格式。4. 事务联络包 USB使用软件的联络。除了实时传输外,事务是否成功是以一个状态码来指示。在控制传输中,状态阶段(Status Stage)会激活一个设备,来报告整个传输是否成功。大部分的联络信号是在联络信息包中传输,有些则是使用数据信息包。USB定义的联络信号状态码是ACK、NAK、STALL、NYET等。ACK:ACK(Acknowledge)状态码表示主机或是设备已经成功地接收到数据。设备必须在设置事务的联络信息包中传回ACK,同时
42、也可以在输出事务的联络信息包中传回ACK。主机则是在输入事务的联络信息包中传回ACK。NAK:NAK(Negative Acknowledge)状态码表示设备在忙中。如果主机在设备忙时传送数据给设备,设备会在联络信息包中传回NAK。如果主机在设备没数据传送时要求数据,设备会在数据信息包中传回NAK。NAK代表暂时的状态,主机会在稍后重新尝试。实时的端点不支持NAK,因为它没有联络信息包来传回NAK。如果主机或设备漏失了实时数据,该数据就此消失。STALL:STALL状态码有3种意义: 不支持的控制要求;, 控制要求失败; 端点失败。当设备接收到端点不支持的控制传输要求时,设备会传回一个STAL
43、L给主机。如果设备支持该控制传输要求,但是无法响应要求,它也会传回一个STALL给主机。批量与中断端点必须支持STALL(Function STALL)。实时端点不支持STALL,因为它没有联络信息包来传回STALL。NYET:NYET(Not yet)只有高速设备才使用 NYET。高速的批量与控制传输有一个增强的协议,让主机可以在送出数据前先知道设备是否已经准备好接收。在低速与全速时,当主机要在控制、批量与中断传输中送出数据时,它会送出令牌与数据信息包。然后从事务的联络信息包中,收到设备的响应。如果设备还没准备好,它会传回一个NAK让主机稍后再重新尝试。如果数据信息包很大,而且设备常常还没准
44、备好,这种模式的传输会浪费许多总线时间。多数据信息包的高速批量与控制事务,有更好的处理方式。在收到一个数据信息包后,设备的端点可以传回一个NYET联络信号。这个NYET表示数据可以接受,但是端点还没准备好接收另一个数据信息包。当主机认为设备可能准备好时,它会送出一个PING令牌信息包。设备则传回一个ACK来表示OK,或是传回NAK或STALL来表示仍没有OK。只传送一个PING信息包,比传送整个数据信息包更有效率。10.3.4 USB传输现在介绍4种传输的交互过程,每一个传输可能包含多笔事务,在下面介绍的4种传输结构图中,包的构成中省略了Sync和EOP字段,这两个字段分别在每一个包的开始和结束位置。表6-7比较了在低速、全速、高速传输时,每一种传输类型的最大数据传输速率。控制传输并不是最有效率的传输类型,因为除了传输的数据外,每一个数据信息包还有表头。每一个数据阶段都要有令牌与联络信息包,所以有较大数据信息包的阶段会效率较高。表6-7 数据的最大传输速率的比较传输类型每一个端点的最大数据传输速率(KB/s)低速全速高速控制2483215,872中断0.86424,576批量不支持1,21653,248实时1,02324,576根据对4种传输在低速、全速和高速的传输结构的分析,可以得到上表中的最大传输速率。1. 控制传输控制传输的