微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 全面认识USB的技术精髓

全面认识USB的技术精髓

时间:12-12 来源:互联网 点击:
无论对于怎样的数据产生或是接收,它总是以外设所事先规定的USB标准传输率来传输数据。这就要求外设厂商必须在数据采集或接收系统和USB协议系统(SIE)之间,设置大小合适的先入先出模式(FIFO)来对数据进行缓存。

  在USB系统中,数据是通过USB线缆采用USB数据包从主机传送到外设或是从外设传送到主机的。在USB协议中,把基于外设的数据源和基于主机的数据接收软件(或者方向相反)之间的数据传输模式称为信道(Pipe)。信道分为流模式的信道(Stream Pipe)和消息模式的信道(Message Pipe)两种。信道和外设所定义的数据带宽、数据传输模式以及外设的功能部件的特性(如缓存大小、数据传输的方向等)相关。只要一个USB外设一经连接,就会在主机和外设之间建立信道。对于任何的USB外设,在它连接到一个USB系统中,并被USB主机经USB线缆加电使其处于Powered状态时,都会在USB主机和外设的协议层(ROM)之间首先建立一个称为Endpoint 0的消息信道,这个信道又称为控制信道,主要用于外设的配置(Configuration)、对外设所处状态的检测及控制命令的传送等。信道方式的结构使得USB系统支持一个外设拥有多个功能部件(用Endpoint 0、Endpoint 1...Endpoint n这样的方法进行标识),这些功能部件可以同时地、以不同的数据传输方向在同一条USB线缆上进行数据传输而互不影响(图8)。比如一个USB的ISDN MODEM,就可以同时拥有一个上传的信道和一个下载的信道,并能同时很好地工作。

  为实现多外设、多信道地同时工作,USB总线使用数据包的方式来传输数据和控制信息。

  USB数据传输中的每一个数据包都以一个同步字段开始(图9),它的最后两个bit作为PID字段开始的标志。紧跟在同步字段之后的一段8bit的脉冲序列称为PID(数据包标识字段,如图10所示),PID字段的前四位用来标记该数据包的类型,后四位则作为对前四位的校验。PID字段被分为标记PID(共有IN、OUT、SETUP或SOF四种)、数据PID(DATA0或DATA1)、握手PID(ACK、NAK或STALL)及特殊PID等。主机根据PID字段的类型来判断一个数据包中所包含的数据类型,并执行相应的操作。

  当一个USB外设初次连接时,USB系统会为这台外设分配唯一的USB地址,这个地址通过地址寄存器(ADDR)来标记,以保证数据包不会传送到别的USB外设。7bit的ADDR使得USB系统最大寻址为127台设备(ADDR字段,如图11所示)。由于一台USB外设可能具有多个信道,因而在ADDR字段后会有一个附加的端点字段(Endpoint Field,简标为ENDP)来标记不同的信道(图12)。所有的USB外设都必须支持Endpoint 0信道,用0000来标记。对于高速设备,可以最大支持16个信道,而低速设备在Endpoint 0之外仅能有一个信道。

  数据字段作为一次USB数据传输的中心目的,在一个USB数据包中可以包含0~1203Byte的数据(图13)。而帧数量字段则包含在帧开始数据包中,对有的应用场合,可以用帧数量字段作为数据的同步信号。

  为保证控制、块传送及中断传送中数据包的正确性,CRC校验字段被引用到如标记、数据、帧开始(SOF)这样的数据包中。CRC校验(数据冗余校验)可以给予数据以100%的正确性检验。

图11 数据包的ADDR字段



图12 端点(Endpoint)字段



图13 USB的数据字段



<下>

  本文介绍USB总线的数据传输模式、USB数据包的格式,以及USB外设的组成与结构等内容。

一、USB数据包的格式

  在USB系统中,有四种形式的数据包--标记数据包(Token Packets)、DATA数据包(DATA Packets)、帧开始数据包(SOF Packets)和握手数据包(Handshake Packets)。

  1.标记数据包由PID、ADDR、ENDP和CRC5四个字段组成(图1)。它因为PID字段的不同而分为输入类型(IN)、输出类型(OUT)和设置类型(SETUP)三种。标记数据包处于每一次USB传输的DATA数据包前面,以指明这次USB操作的类型(PID字段标记)、操作的对象(在ADDR和ENDP字段中指明)等信息。5bit的CRC校验位用来确保标记数据包的正确性。

  2.我们已经指出,USB主机会每隔1ms在USB总线上产生一个SOF的USB帧同步信号,SOF数据包包含了这个脉冲序列的实际内容(图2),它由SOF格式的PID字段、帧数量字段和5bit的CRC校验码组成。主机利用SOF数据包来同步数据的传送和接收。

  3.用于传输真正数据的DATA数据包(图3),因为PID的不同可以分为DATA0和DATA1两种。DATA0为偶数据包,DATA1为奇数据包。DATA数据包的奇偶性分类易于数据的双流水处理,而用于控制传输的DATA数据包总是以DATA0来传送数据。

  4.握手数据包仅仅包含一个PID字段(图4),ACK形式的PID表明此次USB传输没有发生错误,数据已经成功的传输;而NAK形式的握手数据包则向主机表明此次USB传输因为CRC校验错误或别的原因而失败了,从而使得主机可以进行数据的重新传输;STALL形式的回应向主机报告外设此刻正处于挂起状态而无法完成数据的传输。

  需要指出的是,每个数据包的结束都会有两个bit宽的EOP字段作为数据包结束的标志(图5),EOP在差模信号中表现为D+和D-都处于"0"状态。对于高速USB外设而言,这个脉冲宽度在160~175ns之间,而低速设备则在1.25~1.50μs之间。无论其后是否有其它的数据包,USB线缆都会在EOP字段后紧跟1bit的总线空闲位。USB主机或外设利用EOP来判断一个数据包的结束。

图1 标记数据包的组成

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top