USB是Universal Serial Bus的简称。它是一种可以同时处理计算机与具有USB接口的多种外设之间通信的电缆总线。这些连接到计算机上的外设共同分享USB的带宽。USB的分时处理机制真正在硬件的意义上实现了计算机外设的即插即用。
如果留心一下当前市场上的电脑外设,大家会发现采用USB设备的产品正在逐渐增加。键盘、鼠标、MODEM、游戏杆、音箱、扫描仪等,以前插在串行、并行等外部扩展接口上的部件,甚至一些以前要连接到电脑内部扩展槽上的设备,都开始以USB接口的界面出现,USB设备的发展势头正如日中天。
本文将从技术的角度来探讨一下USB,有关它的实用部分请参阅本刊1999年第5、7和11期的相关文章。
一个基于计算机的USB系统可以在系统层次上被分为三个部分:即USB主机(USB Host)、USB器件(USB Device)和USB的连接。
所谓USB连接实际上是指一种USB器件和USB主机进行通信的方法。它包括:
●总线的拓扑(由一点分出多点的网络形式):即外设和主机连接的模式;
●各层之间的关系:即组成USB系统的各个部分在完成一个特定的USB任务时,各自之间的分工与合作;
●数据流动的模式:即USB总线的数据传输方式;
●USB的“分时复用”:因为USB提供的是一种共享连接方式,因而为了进行数据的同步传输,致使USB对数据的传输和处理必须采用分时处理的机制。
一、USB的总线拓扑
USB的总线拓扑如图1所示,在USB的树形拓扑中,USB集线器(HUB)处于节点(Node)的中心位置。而每一个功能部件都和USB主机形成唯一的点对点连接,USB的HUB为USB的功能部件连接到主机提供了扩展的接口。利用这种树形拓扑,USB总线支持最多127个USB外设同时连接到主计算机系统。
图1 USB的总线拓扑示意图
一个USB系统仅可以有一个主机,而为USB器件连接主机系统提供主机接口的部件被称为USB主机控制器。USB主机控制器是一个由硬件、软件和固件(Firmware)组成的复合体。一块具有USB接口的主板通常集成了一个称为ROOT HUB的部件,它为主机提供一到多个可以连接其它USB外设的USB扩展接口,我们通常在主板上见到的USB接口都是由ROOT HUB提供的。
USB器件可以分为两种:即USB HUB和USB功能器件(Function Device)。
作为USB总线的扩展部件,USB HUB(图2)必须满足以下特征:
●为自己和其它外设的连接提供可扩展的下行和上行(Downstream and Upstream)端口;
●支持USB总线的电源管理机制;
●支持总线传输失败的检测和恢复;
●可以自动检测下行端口外设的连接和摘除,并向主机报告;
●支持低速外设和高速外设的同时连接。
从以上要求出发,USB HUB在硬件上由两部分组成:HUB应答器(HUB Repeater)和HUB控制器(HUB Controller)。HUB应答器回应主机对USB外设的设置,以及对连接到它下行端口的USB功能部件的连接和摘除(Attached and Detached)的检测、分类,并将其端口信息传送给主机,它也负责如“总线传输失败检测”这样的错误处理;而HUB控制器则提供主机到HUB之间数据传输的物理机制。如同我们所熟知的大多数计算机外设一样,USB HUB也有一个用来向主机表明自己身份的“BIOS”系统。这块位于USB HUB上的ROM,通过USB特征字使主机可以配置这个USB HUB,并监控它的每一个端口。
USB功能器件即可以为主机系统提供某种功能的USB器件,如一个USB ISDN的调制解调器、或是一只USB接口的数字摄像机、USB的键盘或鼠标等。
图2 USB HUB的结构
图3 一个典型的USB功能器件结构框图
USB的功能器件作为USB外设(USB Function),它必须保持和USB协议的完全兼容,并可以回应标准的USB操作。同样,用于表明自己身份的“BIOS”系统对于USB外设也是必不可少的,这在USB外设上被称为协议层。在物理机制上,一个USB外设可以由四部分构成(图3):
●用于实现和USB协议兼容的SIE部分;
●用于存储器件特征字、存储实现外设特殊功能程序及厂家信息的协议层(ROM);
●用于实现外设功能的传感器及对数据进行简单处理的DSP部分;
●将外设连接到主机或USB HUB的接口部分。
根据传输率的不同,USB器件被分为高速和低速两种。低速外设的标准传输率为1.5Mbps,而高速外设的标准传输率为12Mbps。所有的USB HUB都为高速外设,而功能部件则可以根据外设的具体情况设计成不同的传输率,如用于视频、音频传输的外设大都采用12Mbps的传输率,而像键盘、鼠标这样的点输入设备则设计成低速外设。由于USB的数据传输采用数据包的形式,因而使得连接到主机的所有的USB外设可以同时工作而互不干扰。不幸的是,所有这些USB外设必须同时分享USB协议所规定的USB带宽(这个带宽在USB 1.0协议中为12Mbps),虽然USB的分时处理机制可以使有限的USB带宽在各设备之间动态地分配,但如果两台以上的高速外设同时使用这样的连接方法,就会使它们都无法享用到最高的USB带宽,从而降低了性能。这也正是Intel这样的巨头为什么要推出USB 2.0协议的原因(在USB 2.0协议中USB的总线带宽一下子被提高到了480Mbps)。
用于实现外设到主机或USB HUB连接的是USB线缆(图4)。从严格意义上讲,USB线缆应属于USB器件的接口部分。USB线缆由四根线组成,其中一根是电源线VBus,一根是地线GND,其余两根是用于差动信号传输的数据线(D+,D-)。将数据流驱动成为差动信号来传输的方法可以有效提高信号的抗干扰能力(EMI)。在数据线末端设置结束电阻的思路是非常巧妙的,以至对于HUB来判别所连接的外设是高速外设或是低速外设,仅仅只需要检测在外设被初次连接时,D+或D-上的信号是高或是低即可。因为对于USB协议来讲,要求低速外设在其D-端并联一个7.5kΩ的接地电阻,而高速外设则在D+端接同样的电阻。在加电时,根据低速外设的D-线和高速外设的D+线所处的状态,HUB就很容易判别器件的种类,从而为器件配置不同的信息。图5表明了一个典型的高速外设的连接状况。为提高数据传输的可靠性、系统的兼容性及标准化程度,USB协议对用于USB的线缆提出了较为严格的要求。如用于高速传输的USB线缆,其最大长度不应超过5米,而用于低速传输的线缆则最大长度为两米,每根数据线的电阻应为标准的90Ω。
USB系统可以通过USB线缆为其外设提供不高于+5V、500mA的总线电源。那些完全依靠USB线缆来提供电源的器件被称为总线驱动器件(Bus-powered device),而自带电源的器件则被称为自驱动外设(Self-powered device)。需要注意的是,当一个外设初次连接时,器件的配置和分类并不使用外设自带的电源,而是通过USB线缆提供的电源来使外设处于Powered状态。
无论在软件还是硬件层次上,USB主机都处于USB系统的核心。主机系统(图6)不仅包含了用于和USB外设进行通信的USB主机控制器及用于连接的USB接口(SIE),更重要的是主机系统是USB系统软件和USB客户软件的载体。
总而言之,USB主机软件系统可以分为三个部分:
●客户软件部分(CSW),在逻辑上和外设的功能部件部分进行数据的交换;
●USB系统软件部分(即HCDI),在逻辑和实际中作为HCD和USBD之间的接口;
●USB主机控制器软件部分(即HCD和USBD),用于对外设和主机的所有USB有关部分的控制和管理,包括外设的SIE部分、USB数据发送接收器(Transreceiver)部分及外设的协议层等。
图4 USB线缆
图5 高速外设的USB线缆和电阻的连接图
图6 USB主机系统的结构及各部分之间的关系
二、USB的“分时复用”和电源管理
当一个USB外设初次接入一个USB系统时,主机就会为该USB外设分配一个唯一的USB地址,并作为该USB外设的唯一标识(USB系统最多可以分配这样的地址127个),这称为USB的总线列举(Bus Enumeration)。USB使用总线列举方法在计算机系统运行期间动态检测外设的连接和摘除,并动态地分配USB地址,从而在硬件意义上真正实现“即插即用”和“热插拔”。
在所有的USB信道之间动态地分配带宽是USB总线的特征之一。当一台USB外设在连接(Attached)并配置(Configuration)以后,主机即会为该USB外设的信道分配USB带宽;而当该USB外设从USB系统中摘除(Detached)或是处于挂起(Suspended)状态时,则它所占用的USB带宽即会被释放,并为其它的USB外设所分享。这种“分时复用”(Scheduling the USB)的带宽分配机制大大地提高了USB带宽利用率。
作为一种先进的总线方式,USB提供了基于主机的电源管理系统。USB系统会在一台外设长时间(这个时间一般在3.0ms以上)处于非使用状态时自动将该设备挂起(Suspend),当一台USB外设处于挂起状态时,USB总线通过USB线缆为该设备仅仅提供500μA以下的电流,并把该外设所占用的USB带宽分配给其它的USB外设。USB的电源管理机制使它支持如远程唤醒这样的高级特性。当一台外设处于挂起状态(Suspended Mode)时,必须先通过主机使该设备“唤醒”(Resume),然后才可以执行USB操作。
USB的这种智能电源管理机制,使得它特别适合如笔记本电脑之类的设备的应用。
三、USB的数据传输模式
图7 帧开始数据包在USB数据传输中的分布
图8 USB的通信流及信道
图9 同步字段
图10 PID字段
我们知道,USB总线是一种串行总线,即它的数据是一个bit一个bit来传送的。虽然USB总线是把这些bit形式的数据打成数据包来传送,但数据的同步也是必不可少的。USB 1.0/1.1协议规定,USB的标准脉冲时钟为12MHz,而其总线时钟为1ms,即每隔1ms,USB器件应为USB线缆产生一个时钟脉冲序列。这个脉冲序列称为帧开始数据包(SOF,如图7所示),主机利用SOF来同步USB数据的发送和接收。由此可见,对于一个数据传输率为12Mbps的外设而言,它每一帧的长度为12000bit;而对于低速外设而言,它每一帧的长度仅有1500bit。USB总线并不关心外设的数据采集系统及其处理的速率,无论对于怎样的数据产生或是接收,它总是以外设所事先规定的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 标记数据包的组成
图2 SOF数据包的格式
图3 DATA数据包的格式
图4 握手数据包
图5 EOP字段在差模信号中的电压表现
二、USB总线的数据传输模式
在前面我们已经提到,每一个USB信道对应着一个特定的USB传输模式,根据不同的需要,USB外设可以为USB信道指定不同的USB传输模式。USB总线支持四种数据传输模式:
1.控制传输模式(图6),控制传输用于在外设初次连接时对器件进行配置;对外设的状态进行实时检测;对控制命令的传送等;也可以在器件配置完成后被客户软件用于其它目的。Endpoint 0信道只可以采用控制传送的方式。
2.块传送模式(图7),块传送用于进行批量的、非实时的数据传输。如一台USB扫描仪即可采用块传送的模式,以保证数据连续地、在硬件层次上的实时纠错地传送。采用块传送方式的信道所占用的USB带宽,在实时带宽分配中具有最高的优先级。
3.同步传输模式(图8),同步传输适用于那些要求数据连续地、实时地、以固定的数据传输率产生、传送并消耗的场合,如数字录像机等。为保证数据传输的实时性,同步传输不进行数据错误的重试,也不在硬件层次上回应一个握手数据包,这样有可能使数据流中存在数据错误的隐患。为保证在同步传输数据流中致命错误的几率小到可以容忍的程度,而数据传输的延迟又不会对外设的性能造成太大的影响,厂商必须为使用同步传输的信道选择一个合适的带宽(即必须在速度和品质之间做出权衡)。
4.中断传输模式(图9),对于那些小批量的、点式、非连续的数据传输应用的场合,如用于人机交互的鼠标、键盘、游戏杆等,中断传输的方式是最适合的。
图7 块传送的流程
图8 同步传输的流程
图9 中断传输的流程
三、USB外设的组成与结构
本文无意详细论述USB外设(本部分所说的USB外设如无特别说明均指USB功能器件)的设计细节,而只想介绍USB功能器件的一般组成,以此来帮助读者了解USB外设的基本软硬件构成,以便了解USB外设的工作过程和原理。
组成外设的传感器件和DSP因为外设的具体应用各异而有所不同。如对于一台CMOS数字摄像机(如Creative的WebCam),它的CMOS光电耦合器及其DSP部分并不因为使用什么样的接口方式而有所改变(如早期的电脑眼皆采用ECP的并口增强模式来进行图像数据的传输,而现在几乎都是USB接口)。因而本文的重点是阐述USB外设接口的部分,即USB Device Microcontroller(USB器件微控制器)。图10表明了一个USB外设总线接口的详细组成框图。
USB总线是以差模驱动的方式来进行数据传输的,但在数据包发送之前,USB协议规定必须使用NRZI的编码方式来对数据进行编码。当然,在USB外设中,用于解码的器件对外设来说也是必不可少的。NRZI的编码协议其实很简单,它采用的是逢"1"保持,逢"0"跳变的原则(图11),而NRZI的解码则采用相反的操作。
为保证数据流中有足够的信号变化,USB协议规定了Bit stuffing(加填充位)的原则,即如果信号流中连续出现六位以上的数据"1",则每隔六位,必须插入一个"0",然后才进入NRZI编码。图12是一串原始数据及其加填充位后和NRZI编码后的数据格式对比。
图10 USB外设总线接口的详细组成框图
图11 NRZI数据编码
图12 原始数据和加填充位后及NRZI编码后的数据格式对比
SIE(Serial interface Engine)是USB外设最重要的硬件组成部分之一,它主要由四部分组成:
1.硬件上用来完成NRZI编/解码和加/去填充位操作的,NRZI/Bit Buffing和NRZO/Bit Unstuffing的部分;
2.硬件上产生数据的CRC校验码并对数据包进行CRC校验的CRC check & Generator部分;
3.用来将并行数据转化成USB串行数据的并/串转换部分(Packet Encode),将主机发送的USB数据包转化成可以识别的并行数据的串/并转换部分(Packet Decode);
4.检测和产生SOP(即每个数据包的同步字段)和EOP信号的部分。
USB外设使用一片ROM来存储关于该外设工作的一些重要信息,这被称为USB的协议层(Protocol Layer),它不仅存储了诸如厂家识别号、该外设所属的类型(是HUB还是Function,是低速还是高速设备)、电源管理等常规信息,更重要的是还存储了外设的设备类型、器件配置信息、功能部件的描述、接口信息等,其存储方式都采用特征字(Descriptors)的方式。USB主机通过在外设的协议层和主机之间建立Endpoint 0信道、采用控制传输的方式对这些信息进行存取。特征字采用USB协议所规定的结构和代码排列(关于特征字的详细信息请参阅USB协议标准)。厂家也可以在该ROM的剩余空间中存储特定的程序或信息,以帮助外设完成特定的工作。协议层是一台USB外设能够被主机正确识别和配置,并正常工作的前提。可以说,协议层是一台USB外设的固件(Firmware)中心。
我们知道,数据采样率因采样精度和使用的不同场合而不同,如对于音频应用,就可以采用22.05kHz或44.1kHz的采样率,而这个时钟并不和USB标准时钟对应。因而在实际应用中,为保证采集到的数据无丢失地打包和传送,必须在SIE和数据采集部件(对诸如音箱或打印机等外设则为数据消耗部件)之间设立FIFOs,以便对数据进行缓存。对于采用块传送和同步传送的外设而言,FIFOs的作用显得尤为重要。例如一台采用同步传输的USB数字摄像机(现在市场上有很多这种类型的产品),我们假设它的CCD为400×300像素,那么为保证数据正确地压缩、传输和接收,直到以后的解压缩及处理,在动态采集中,FIFOs至少要存储一帧图像,即要求FIFOs有400×300=12KB的容量。
在USB外设中,用于实现和USB线缆无缝连接的USB传输接收部分(Transreceiver)是必不可少的,它不仅要在电气和物理层面上实现和USB线缆的连接,而且要完成对数据包的差模驱动或分离的操作。
以上我们简述了USB外设接口的硬件组成,那么在完成USB数据传输的过程中,这些硬件又是如何配合工作并和位于主机的软硬件交互,以完成数据传输的呢?
前面已经提到,USB总线采用总线列举的方法来标记和管理外设所处的状态,当一台USB外设初次连接到USB系统中后,通过8个步骤来完成它的初始化:
1.USB外设所连接的HUB(ROOT HUB或扩展HUB)检测到所连接的USB外设并自动通知主机,以及它的端口状态的变化,这时外设还处于禁止(Disabled)状态;
2.主机通过对HUB的查询以确认外设的连接;
3.现在,主机已经知道有一台新的USB外设连接到了USB系统中,然后,它激活(Enabled)这个HUB的端口,并向HUB发送一个复位(Reset)该端口的命令;
4.HUB将复位信号保持10ms,为连接到该端口的外设提供100mA的总线电流,这时该外设处于Powered状态,它的所有寄存器被清空并指向默认的地址;
5.在外设分配到唯一的USB地址以前,他的默认信道均使用主机的默认地址。然后主机通过读取外设协议层的特征字来了解该外设的默认信道所使用的实际的最大数据有效载荷宽度(即外设在特征字中所定义的在DATA0数据包中数据字段的长度)。
6.主机分配一个唯一的USB地址给该外设,并使它处于Addressed状态;
7.主机开始使用Endpoint 0信道读取外设ROM中所存储的器件配置特征字,这可能会花去几帧的时间;
8.基于器件配置特征字,主机为该外设指定一个配置值,这时,外设即处于配置(Configured)状态了,它所有的端点(Endpoint)这时也处于配置值所描述的状态。从外设的角度来看,这时该外设已处于准备使用的状态。
在一台外设能被使用之前,它必须被配置。"配置"即主机根据外设的配置特征字来定义器件的配置寄存器,以便规定外设的所有Endpoint的工作环境。如某信道所采用的数据传输方式,该外设所属的器件"基类(Class)"、"派生类(SubClass)"和C++等,从而通过基于主机的USB系统软件或客户软件对外设进行控制。
当一台USB外设配置好以后,即会进入到挂起(Suspend)状态,直到它开始被使用。
必须指出的是,一台USB外设一旦配置好,它的每一个特定的信道只能使用一种数据传输方式。Endpoint 0信道只能采用控制传送的方式,主机通过Endpoint 0来传送标准的USB命令,完成诸如读取器件配置特征字、控制外设对数据的采集、处理和传送等任务,并可以通过Endpoint 0来检测和改变外设所处的状态(如对外设的远端唤醒、挂起和恢复等)。
对于一台采用同步传输的数字摄像机来说,数据传输的过程如下:
1.应用软件(CSW)在内存中开辟数据缓冲区,并通过标准USB命令字向外设发出数据请求(IRPs);
2.主机USB系统软件通过对该IRPs的翻译形成Token数据包发送到外设,这时主机进入等待状态;
3.外设对数据包进行NRZI解码和Bit Unstuffing操作及CRC校验,确认后接收主机PID字段中所包含的命令并开始采集数据。
4.采集到的并行数据首先进入FIFOs,并通过并/串转换部件形成串行脉冲;
5.根据器件配置寄存器的要求对数据进行符合条件的分割,配置数据包的PID字段等以形成原始数据包。
6.通过CRC校验产生器对每一个数据包生成CRC校验码字段,SOP & EOP信号产生器为该数据包加入同步字段头和数据包结束符;
7.数据包的NRZI编码和Bit Stuffing操作;
8.使用收发器(Transreceiver)将数据流驱动到USB线缆上。
9.主机控制器将USB数据转化成为普通的"纯"图像数据送到数据缓冲区以进行数据的进一步处理;如果是控制传输、块传输或中断传输方式,在数据被成功传送后,主机还会向外设发送ACK的握手数据包作为回应。
图13简单描绘了非同步数据传输的请求和传送过程(在同步传输中没有Handshake部分)。
图13 非同步数据传输的请求和传送过程
四、结束语
至此,我们已从几个方面较详细地介绍了USB系统的软硬件构成及USB的数据传输协议。USB可以说是开辟了计算机外设接口的新纪元。它把人们从繁杂的连线、不同的接口标准和恼人的中断冲突中解放出来;
使"PnP"和"热插拔"这样的特性不再只是口号;它大大扩展了计算机可连接的外设数目;它的智能电源管理有效地降低了手持电脑的电源损耗……USB正在成为市场的热点,越来越多的外设生产厂家将自己的产品转向USB接口。而USB 2.0协议的推出,无疑对USB技术的发展起到了推波助澜的作用。
在如鼠标、键盘、手写板或是游戏杆等人机交互的应用场合;如扫描仪、数码相机、移动存贮设备、数字摄像机等数据输入应用场合,USB无疑是替代传统串/并口的最佳接口方式,它们使得USB的优点得到了充分发挥。但对诸如视频或音频输出这样的场合,USB也真的适用吗?我们知道,像Sound Blaster Live!这样的声卡正是因为它在硬件上实现了波表合成和EAX环境音效等高级特性,才使我们在几乎小于1%的资源占用率下就能听到"天籁之音",同时又能在美仑美奂的3D环境中飚车。然而USB也并非万能,例如我们看到在市场上热卖的"USB音箱"号称可以"省掉一块声卡!"。但由于USB接口并不对数据进行任何处理,因而数据处理的任务完全交给了CPU和软件,从而这种音箱造成了惊人的资源占用率,且从声音的表现上看也与声卡有着天壤之别。所以说,USB并不是"包治百病"的。
关键字:USB 技术精髓
引用地址:全面认识USB的技术精髓
如果留心一下当前市场上的电脑外设,大家会发现采用USB设备的产品正在逐渐增加。键盘、鼠标、MODEM、游戏杆、音箱、扫描仪等,以前插在串行、并行等外部扩展接口上的部件,甚至一些以前要连接到电脑内部扩展槽上的设备,都开始以USB接口的界面出现,USB设备的发展势头正如日中天。
本文将从技术的角度来探讨一下USB,有关它的实用部分请参阅本刊1999年第5、7和11期的相关文章。
一个基于计算机的USB系统可以在系统层次上被分为三个部分:即USB主机(USB Host)、USB器件(USB Device)和USB的连接。
所谓USB连接实际上是指一种USB器件和USB主机进行通信的方法。它包括:
●总线的拓扑(由一点分出多点的网络形式):即外设和主机连接的模式;
●各层之间的关系:即组成USB系统的各个部分在完成一个特定的USB任务时,各自之间的分工与合作;
●数据流动的模式:即USB总线的数据传输方式;
●USB的“分时复用”:因为USB提供的是一种共享连接方式,因而为了进行数据的同步传输,致使USB对数据的传输和处理必须采用分时处理的机制。
一、USB的总线拓扑
USB的总线拓扑如图1所示,在USB的树形拓扑中,USB集线器(HUB)处于节点(Node)的中心位置。而每一个功能部件都和USB主机形成唯一的点对点连接,USB的HUB为USB的功能部件连接到主机提供了扩展的接口。利用这种树形拓扑,USB总线支持最多127个USB外设同时连接到主计算机系统。
图1 USB的总线拓扑示意图
一个USB系统仅可以有一个主机,而为USB器件连接主机系统提供主机接口的部件被称为USB主机控制器。USB主机控制器是一个由硬件、软件和固件(Firmware)组成的复合体。一块具有USB接口的主板通常集成了一个称为ROOT HUB的部件,它为主机提供一到多个可以连接其它USB外设的USB扩展接口,我们通常在主板上见到的USB接口都是由ROOT HUB提供的。
USB器件可以分为两种:即USB HUB和USB功能器件(Function Device)。
作为USB总线的扩展部件,USB HUB(图2)必须满足以下特征:
●为自己和其它外设的连接提供可扩展的下行和上行(Downstream and Upstream)端口;
●支持USB总线的电源管理机制;
●支持总线传输失败的检测和恢复;
●可以自动检测下行端口外设的连接和摘除,并向主机报告;
●支持低速外设和高速外设的同时连接。
从以上要求出发,USB HUB在硬件上由两部分组成:HUB应答器(HUB Repeater)和HUB控制器(HUB Controller)。HUB应答器回应主机对USB外设的设置,以及对连接到它下行端口的USB功能部件的连接和摘除(Attached and Detached)的检测、分类,并将其端口信息传送给主机,它也负责如“总线传输失败检测”这样的错误处理;而HUB控制器则提供主机到HUB之间数据传输的物理机制。如同我们所熟知的大多数计算机外设一样,USB HUB也有一个用来向主机表明自己身份的“BIOS”系统。这块位于USB HUB上的ROM,通过USB特征字使主机可以配置这个USB HUB,并监控它的每一个端口。
USB功能器件即可以为主机系统提供某种功能的USB器件,如一个USB ISDN的调制解调器、或是一只USB接口的数字摄像机、USB的键盘或鼠标等。
图2 USB HUB的结构
图3 一个典型的USB功能器件结构框图
USB的功能器件作为USB外设(USB Function),它必须保持和USB协议的完全兼容,并可以回应标准的USB操作。同样,用于表明自己身份的“BIOS”系统对于USB外设也是必不可少的,这在USB外设上被称为协议层。在物理机制上,一个USB外设可以由四部分构成(图3):
●用于实现和USB协议兼容的SIE部分;
●用于存储器件特征字、存储实现外设特殊功能程序及厂家信息的协议层(ROM);
●用于实现外设功能的传感器及对数据进行简单处理的DSP部分;
●将外设连接到主机或USB HUB的接口部分。
根据传输率的不同,USB器件被分为高速和低速两种。低速外设的标准传输率为1.5Mbps,而高速外设的标准传输率为12Mbps。所有的USB HUB都为高速外设,而功能部件则可以根据外设的具体情况设计成不同的传输率,如用于视频、音频传输的外设大都采用12Mbps的传输率,而像键盘、鼠标这样的点输入设备则设计成低速外设。由于USB的数据传输采用数据包的形式,因而使得连接到主机的所有的USB外设可以同时工作而互不干扰。不幸的是,所有这些USB外设必须同时分享USB协议所规定的USB带宽(这个带宽在USB 1.0协议中为12Mbps),虽然USB的分时处理机制可以使有限的USB带宽在各设备之间动态地分配,但如果两台以上的高速外设同时使用这样的连接方法,就会使它们都无法享用到最高的USB带宽,从而降低了性能。这也正是Intel这样的巨头为什么要推出USB 2.0协议的原因(在USB 2.0协议中USB的总线带宽一下子被提高到了480Mbps)。
用于实现外设到主机或USB HUB连接的是USB线缆(图4)。从严格意义上讲,USB线缆应属于USB器件的接口部分。USB线缆由四根线组成,其中一根是电源线VBus,一根是地线GND,其余两根是用于差动信号传输的数据线(D+,D-)。将数据流驱动成为差动信号来传输的方法可以有效提高信号的抗干扰能力(EMI)。在数据线末端设置结束电阻的思路是非常巧妙的,以至对于HUB来判别所连接的外设是高速外设或是低速外设,仅仅只需要检测在外设被初次连接时,D+或D-上的信号是高或是低即可。因为对于USB协议来讲,要求低速外设在其D-端并联一个7.5kΩ的接地电阻,而高速外设则在D+端接同样的电阻。在加电时,根据低速外设的D-线和高速外设的D+线所处的状态,HUB就很容易判别器件的种类,从而为器件配置不同的信息。图5表明了一个典型的高速外设的连接状况。为提高数据传输的可靠性、系统的兼容性及标准化程度,USB协议对用于USB的线缆提出了较为严格的要求。如用于高速传输的USB线缆,其最大长度不应超过5米,而用于低速传输的线缆则最大长度为两米,每根数据线的电阻应为标准的90Ω。
USB系统可以通过USB线缆为其外设提供不高于+5V、500mA的总线电源。那些完全依靠USB线缆来提供电源的器件被称为总线驱动器件(Bus-powered device),而自带电源的器件则被称为自驱动外设(Self-powered device)。需要注意的是,当一个外设初次连接时,器件的配置和分类并不使用外设自带的电源,而是通过USB线缆提供的电源来使外设处于Powered状态。
无论在软件还是硬件层次上,USB主机都处于USB系统的核心。主机系统(图6)不仅包含了用于和USB外设进行通信的USB主机控制器及用于连接的USB接口(SIE),更重要的是主机系统是USB系统软件和USB客户软件的载体。
总而言之,USB主机软件系统可以分为三个部分:
●客户软件部分(CSW),在逻辑上和外设的功能部件部分进行数据的交换;
●USB系统软件部分(即HCDI),在逻辑和实际中作为HCD和USBD之间的接口;
●USB主机控制器软件部分(即HCD和USBD),用于对外设和主机的所有USB有关部分的控制和管理,包括外设的SIE部分、USB数据发送接收器(Transreceiver)部分及外设的协议层等。
图4 USB线缆
图5 高速外设的USB线缆和电阻的连接图
图6 USB主机系统的结构及各部分之间的关系
二、USB的“分时复用”和电源管理
当一个USB外设初次接入一个USB系统时,主机就会为该USB外设分配一个唯一的USB地址,并作为该USB外设的唯一标识(USB系统最多可以分配这样的地址127个),这称为USB的总线列举(Bus Enumeration)。USB使用总线列举方法在计算机系统运行期间动态检测外设的连接和摘除,并动态地分配USB地址,从而在硬件意义上真正实现“即插即用”和“热插拔”。
在所有的USB信道之间动态地分配带宽是USB总线的特征之一。当一台USB外设在连接(Attached)并配置(Configuration)以后,主机即会为该USB外设的信道分配USB带宽;而当该USB外设从USB系统中摘除(Detached)或是处于挂起(Suspended)状态时,则它所占用的USB带宽即会被释放,并为其它的USB外设所分享。这种“分时复用”(Scheduling the USB)的带宽分配机制大大地提高了USB带宽利用率。
作为一种先进的总线方式,USB提供了基于主机的电源管理系统。USB系统会在一台外设长时间(这个时间一般在3.0ms以上)处于非使用状态时自动将该设备挂起(Suspend),当一台USB外设处于挂起状态时,USB总线通过USB线缆为该设备仅仅提供500μA以下的电流,并把该外设所占用的USB带宽分配给其它的USB外设。USB的电源管理机制使它支持如远程唤醒这样的高级特性。当一台外设处于挂起状态(Suspended Mode)时,必须先通过主机使该设备“唤醒”(Resume),然后才可以执行USB操作。
USB的这种智能电源管理机制,使得它特别适合如笔记本电脑之类的设备的应用。
三、USB的数据传输模式
图7 帧开始数据包在USB数据传输中的分布
图8 USB的通信流及信道
图9 同步字段
图10 PID字段
我们知道,USB总线是一种串行总线,即它的数据是一个bit一个bit来传送的。虽然USB总线是把这些bit形式的数据打成数据包来传送,但数据的同步也是必不可少的。USB 1.0/1.1协议规定,USB的标准脉冲时钟为12MHz,而其总线时钟为1ms,即每隔1ms,USB器件应为USB线缆产生一个时钟脉冲序列。这个脉冲序列称为帧开始数据包(SOF,如图7所示),主机利用SOF来同步USB数据的发送和接收。由此可见,对于一个数据传输率为12Mbps的外设而言,它每一帧的长度为12000bit;而对于低速外设而言,它每一帧的长度仅有1500bit。USB总线并不关心外设的数据采集系统及其处理的速率,无论对于怎样的数据产生或是接收,它总是以外设所事先规定的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 标记数据包的组成
图2 SOF数据包的格式
图3 DATA数据包的格式
图4 握手数据包
图5 EOP字段在差模信号中的电压表现
二、USB总线的数据传输模式
在前面我们已经提到,每一个USB信道对应着一个特定的USB传输模式,根据不同的需要,USB外设可以为USB信道指定不同的USB传输模式。USB总线支持四种数据传输模式:
1.控制传输模式(图6),控制传输用于在外设初次连接时对器件进行配置;对外设的状态进行实时检测;对控制命令的传送等;也可以在器件配置完成后被客户软件用于其它目的。Endpoint 0信道只可以采用控制传送的方式。
2.块传送模式(图7),块传送用于进行批量的、非实时的数据传输。如一台USB扫描仪即可采用块传送的模式,以保证数据连续地、在硬件层次上的实时纠错地传送。采用块传送方式的信道所占用的USB带宽,在实时带宽分配中具有最高的优先级。
3.同步传输模式(图8),同步传输适用于那些要求数据连续地、实时地、以固定的数据传输率产生、传送并消耗的场合,如数字录像机等。为保证数据传输的实时性,同步传输不进行数据错误的重试,也不在硬件层次上回应一个握手数据包,这样有可能使数据流中存在数据错误的隐患。为保证在同步传输数据流中致命错误的几率小到可以容忍的程度,而数据传输的延迟又不会对外设的性能造成太大的影响,厂商必须为使用同步传输的信道选择一个合适的带宽(即必须在速度和品质之间做出权衡)。
4.中断传输模式(图9),对于那些小批量的、点式、非连续的数据传输应用的场合,如用于人机交互的鼠标、键盘、游戏杆等,中断传输的方式是最适合的。
图7 块传送的流程
图8 同步传输的流程
图9 中断传输的流程
三、USB外设的组成与结构
本文无意详细论述USB外设(本部分所说的USB外设如无特别说明均指USB功能器件)的设计细节,而只想介绍USB功能器件的一般组成,以此来帮助读者了解USB外设的基本软硬件构成,以便了解USB外设的工作过程和原理。
组成外设的传感器件和DSP因为外设的具体应用各异而有所不同。如对于一台CMOS数字摄像机(如Creative的WebCam),它的CMOS光电耦合器及其DSP部分并不因为使用什么样的接口方式而有所改变(如早期的电脑眼皆采用ECP的并口增强模式来进行图像数据的传输,而现在几乎都是USB接口)。因而本文的重点是阐述USB外设接口的部分,即USB Device Microcontroller(USB器件微控制器)。图10表明了一个USB外设总线接口的详细组成框图。
USB总线是以差模驱动的方式来进行数据传输的,但在数据包发送之前,USB协议规定必须使用NRZI的编码方式来对数据进行编码。当然,在USB外设中,用于解码的器件对外设来说也是必不可少的。NRZI的编码协议其实很简单,它采用的是逢"1"保持,逢"0"跳变的原则(图11),而NRZI的解码则采用相反的操作。
为保证数据流中有足够的信号变化,USB协议规定了Bit stuffing(加填充位)的原则,即如果信号流中连续出现六位以上的数据"1",则每隔六位,必须插入一个"0",然后才进入NRZI编码。图12是一串原始数据及其加填充位后和NRZI编码后的数据格式对比。
图10 USB外设总线接口的详细组成框图
图11 NRZI数据编码
图12 原始数据和加填充位后及NRZI编码后的数据格式对比
SIE(Serial interface Engine)是USB外设最重要的硬件组成部分之一,它主要由四部分组成:
1.硬件上用来完成NRZI编/解码和加/去填充位操作的,NRZI/Bit Buffing和NRZO/Bit Unstuffing的部分;
2.硬件上产生数据的CRC校验码并对数据包进行CRC校验的CRC check & Generator部分;
3.用来将并行数据转化成USB串行数据的并/串转换部分(Packet Encode),将主机发送的USB数据包转化成可以识别的并行数据的串/并转换部分(Packet Decode);
4.检测和产生SOP(即每个数据包的同步字段)和EOP信号的部分。
USB外设使用一片ROM来存储关于该外设工作的一些重要信息,这被称为USB的协议层(Protocol Layer),它不仅存储了诸如厂家识别号、该外设所属的类型(是HUB还是Function,是低速还是高速设备)、电源管理等常规信息,更重要的是还存储了外设的设备类型、器件配置信息、功能部件的描述、接口信息等,其存储方式都采用特征字(Descriptors)的方式。USB主机通过在外设的协议层和主机之间建立Endpoint 0信道、采用控制传输的方式对这些信息进行存取。特征字采用USB协议所规定的结构和代码排列(关于特征字的详细信息请参阅USB协议标准)。厂家也可以在该ROM的剩余空间中存储特定的程序或信息,以帮助外设完成特定的工作。协议层是一台USB外设能够被主机正确识别和配置,并正常工作的前提。可以说,协议层是一台USB外设的固件(Firmware)中心。
我们知道,数据采样率因采样精度和使用的不同场合而不同,如对于音频应用,就可以采用22.05kHz或44.1kHz的采样率,而这个时钟并不和USB标准时钟对应。因而在实际应用中,为保证采集到的数据无丢失地打包和传送,必须在SIE和数据采集部件(对诸如音箱或打印机等外设则为数据消耗部件)之间设立FIFOs,以便对数据进行缓存。对于采用块传送和同步传送的外设而言,FIFOs的作用显得尤为重要。例如一台采用同步传输的USB数字摄像机(现在市场上有很多这种类型的产品),我们假设它的CCD为400×300像素,那么为保证数据正确地压缩、传输和接收,直到以后的解压缩及处理,在动态采集中,FIFOs至少要存储一帧图像,即要求FIFOs有400×300=12KB的容量。
在USB外设中,用于实现和USB线缆无缝连接的USB传输接收部分(Transreceiver)是必不可少的,它不仅要在电气和物理层面上实现和USB线缆的连接,而且要完成对数据包的差模驱动或分离的操作。
以上我们简述了USB外设接口的硬件组成,那么在完成USB数据传输的过程中,这些硬件又是如何配合工作并和位于主机的软硬件交互,以完成数据传输的呢?
前面已经提到,USB总线采用总线列举的方法来标记和管理外设所处的状态,当一台USB外设初次连接到USB系统中后,通过8个步骤来完成它的初始化:
1.USB外设所连接的HUB(ROOT HUB或扩展HUB)检测到所连接的USB外设并自动通知主机,以及它的端口状态的变化,这时外设还处于禁止(Disabled)状态;
2.主机通过对HUB的查询以确认外设的连接;
3.现在,主机已经知道有一台新的USB外设连接到了USB系统中,然后,它激活(Enabled)这个HUB的端口,并向HUB发送一个复位(Reset)该端口的命令;
4.HUB将复位信号保持10ms,为连接到该端口的外设提供100mA的总线电流,这时该外设处于Powered状态,它的所有寄存器被清空并指向默认的地址;
5.在外设分配到唯一的USB地址以前,他的默认信道均使用主机的默认地址。然后主机通过读取外设协议层的特征字来了解该外设的默认信道所使用的实际的最大数据有效载荷宽度(即外设在特征字中所定义的在DATA0数据包中数据字段的长度)。
6.主机分配一个唯一的USB地址给该外设,并使它处于Addressed状态;
7.主机开始使用Endpoint 0信道读取外设ROM中所存储的器件配置特征字,这可能会花去几帧的时间;
8.基于器件配置特征字,主机为该外设指定一个配置值,这时,外设即处于配置(Configured)状态了,它所有的端点(Endpoint)这时也处于配置值所描述的状态。从外设的角度来看,这时该外设已处于准备使用的状态。
在一台外设能被使用之前,它必须被配置。"配置"即主机根据外设的配置特征字来定义器件的配置寄存器,以便规定外设的所有Endpoint的工作环境。如某信道所采用的数据传输方式,该外设所属的器件"基类(Class)"、"派生类(SubClass)"和C++等,从而通过基于主机的USB系统软件或客户软件对外设进行控制。
当一台USB外设配置好以后,即会进入到挂起(Suspend)状态,直到它开始被使用。
必须指出的是,一台USB外设一旦配置好,它的每一个特定的信道只能使用一种数据传输方式。Endpoint 0信道只能采用控制传送的方式,主机通过Endpoint 0来传送标准的USB命令,完成诸如读取器件配置特征字、控制外设对数据的采集、处理和传送等任务,并可以通过Endpoint 0来检测和改变外设所处的状态(如对外设的远端唤醒、挂起和恢复等)。
对于一台采用同步传输的数字摄像机来说,数据传输的过程如下:
1.应用软件(CSW)在内存中开辟数据缓冲区,并通过标准USB命令字向外设发出数据请求(IRPs);
2.主机USB系统软件通过对该IRPs的翻译形成Token数据包发送到外设,这时主机进入等待状态;
3.外设对数据包进行NRZI解码和Bit Unstuffing操作及CRC校验,确认后接收主机PID字段中所包含的命令并开始采集数据。
4.采集到的并行数据首先进入FIFOs,并通过并/串转换部件形成串行脉冲;
5.根据器件配置寄存器的要求对数据进行符合条件的分割,配置数据包的PID字段等以形成原始数据包。
6.通过CRC校验产生器对每一个数据包生成CRC校验码字段,SOP & EOP信号产生器为该数据包加入同步字段头和数据包结束符;
7.数据包的NRZI编码和Bit Stuffing操作;
8.使用收发器(Transreceiver)将数据流驱动到USB线缆上。
9.主机控制器将USB数据转化成为普通的"纯"图像数据送到数据缓冲区以进行数据的进一步处理;如果是控制传输、块传输或中断传输方式,在数据被成功传送后,主机还会向外设发送ACK的握手数据包作为回应。
图13简单描绘了非同步数据传输的请求和传送过程(在同步传输中没有Handshake部分)。
图13 非同步数据传输的请求和传送过程
四、结束语
至此,我们已从几个方面较详细地介绍了USB系统的软硬件构成及USB的数据传输协议。USB可以说是开辟了计算机外设接口的新纪元。它把人们从繁杂的连线、不同的接口标准和恼人的中断冲突中解放出来;
使"PnP"和"热插拔"这样的特性不再只是口号;它大大扩展了计算机可连接的外设数目;它的智能电源管理有效地降低了手持电脑的电源损耗……USB正在成为市场的热点,越来越多的外设生产厂家将自己的产品转向USB接口。而USB 2.0协议的推出,无疑对USB技术的发展起到了推波助澜的作用。
在如鼠标、键盘、手写板或是游戏杆等人机交互的应用场合;如扫描仪、数码相机、移动存贮设备、数字摄像机等数据输入应用场合,USB无疑是替代传统串/并口的最佳接口方式,它们使得USB的优点得到了充分发挥。但对诸如视频或音频输出这样的场合,USB也真的适用吗?我们知道,像Sound Blaster Live!这样的声卡正是因为它在硬件上实现了波表合成和EAX环境音效等高级特性,才使我们在几乎小于1%的资源占用率下就能听到"天籁之音",同时又能在美仑美奂的3D环境中飚车。然而USB也并非万能,例如我们看到在市场上热卖的"USB音箱"号称可以"省掉一块声卡!"。但由于USB接口并不对数据进行任何处理,因而数据处理的任务完全交给了CPU和软件,从而这种音箱造成了惊人的资源占用率,且从声音的表现上看也与声卡有着天壤之别。所以说,USB并不是"包治百病"的。
上一篇:USB间歇性无法使用怎么办
下一篇:带USB接口的PCM2702声卡的制作图解
推荐阅读最新更新时间:2024-05-03 00:36
USB-GPIB控制器的硬件电路设计
引 言 USB是PC体系中一套全新的工业标准,通用可编程接口GPIB(General Programmable Interface BUS),是Cy-press公司在其EZ-USB FX以及FX2系列单片机里设计的一个可由用户编程的接口,具有快速、灵活等特点;可使用多种协议完成与外围器件的无缝连接,如EIDE/ATAPI、IEEE1284、Utopia等。对其可以根据需要进行编程,且运行中不需要CPU的干预,仅通过一些CPU标志和中断与增强型8051内核通信。作为自动化测试仪器的互联标准历史悠久,使用广泛,组建费用低廉且操作方便,特别是连接台式机的时候尤其显得灵活高效。在很多对测试速度要求不高以及对测试仪器体积不作要求的情况下
[应用]
TM1300 PCI-XIO口的UART和USB接口设计
Trimedia集成电路是Philips公司针对多媒体应用的一种高性能DSP,它能够进行高质量的视频和音频处理。TM1300是Trimedia 系列产品之一,它的核心是32位处理器,能够进行32位线性寻址,寻址能力可达4GB,含有128个通用寄存器。Tm1300核心处理器采用的是VLIW (超长指令字)结构,可以在每一时钟周期内同时进行5个操作,VLIW结构还可以减少处理器的工作量。TM1300支持16KB的数据高速缓存和32KB的指令高速缓存,并且数据高速缓存是双端口的,允许同时双向接入。 TM1300有别于一般的通用DSP,它有专门的视频接口、音频接口和PCI、SSI(同步串行接口)等丰富的外设接口。在本设计前,已经利
[嵌入式]
基于USB 2.0数据采集系统的程序设计
1 引言
在工业生产和科学技术研究的各行业中, 常利用PC或工控机对各种数据进行采集, 如压力、频率、液位、温度等。常用的采集方式是通过数据采集板卡, 其不仅安装麻烦, 易受机箱内环境的干扰,而且由于受计算机插槽数量和地址、中断资源的限制, 不可能挂接很多设备。而通用串行总线( Universa l Ser ia l Bus, USB )的出现, 很好地解决了以上这些冲突, 可实现低成本、高可靠性、多点的数据采集。USB 2. 0 是一种计算机外设连接规范, 除了USB1. 1中规定的1. 5Mb it / s和12Mb it / s两个模式以外, 还增加了480Mbit / s( 60MB / s)这一 高速 模式,
[嵌入式]
苹果宣布更换5W欧洲制式USB充电器
苹果公司今天在36个国家的推出了USB充电器更换计划,以更换其欧洲制式5瓦USB充电器。该公司表示,欧洲制式5瓦 USB充电器可能在某些情况下会过热并造成安全隐患。受影响的欧洲制式5瓦 USB充电器,其型号是A1300,是从2009年10月到2012年9月期间iPhone 3GS、iPhone 4和iPhone 4S的原装配件。 苹果允许用户把受影响的充电器拿到Apple Store零售店或Apple授权服务提供商处更换新的充电器,更换过程需要验证iPhone序列号。 该方案不同于苹果去年在超过30个国家推出的第三方USB充电器回收计划。该程序允许用户以旧的第三方USB充电器折扣更换苹果官方正版充电器,之前假冒的iPhone充
[手机便携]
Silicon Labs推出全球最节能的USB微控制器Happy Gecko
-EFM32 Happy Gecko MCU系列产品为功耗敏感、电池供电型IoT应用简化USB连接设计- 中国,北京-2015年5月14日-物联网(IoT)领域中微控制器、传感器和无线连接解决方案的领先供应商Silicon Labs(芯科科技有限公司,NASDAQ:SLAB)今日宣布推出业界最节能的USB微控制器(MCU)。新型Happy Gecko MCU是Silicon Labs屡获殊荣的EFM32 32位MCU产品系列的最新成员,提供业界最低USB功耗,从而实现更长的电池使用寿命以及能源收集型应用。基于ARM Cortex -M0+内核和低能耗外设,Happy Gecko系列产品为各类IoT应用简化USB连接设
[嵌入式]
Android应用程序开发及USB数据采集系统的设计
随着科技的发展, 嵌入式及移动互联网的应用越来越广泛,二者以其自身的优势在各自领域都占有一席之地。目前基于Android操作系统的手机进行移动应用开发非常火热,Android以其源代码开放,硬件选择丰富,无缝结合google 等特点,自发布以来 Android 立刻受到了业界的广泛关注。而嵌入式ARM7 微处理器LPC2142具有较高的集成度和高性价比, 很适合于数据采集系统设计。因此,了解Android平台的组成、系统架构API和应用程序框架,并掌握该平台移动应用的开发方法将为从事移动互联网开发的企业和个人带来非常广阔的前景。 Google 对Android平台的SDK更新很快,目前已发布的平板Android 3.1(API
[单片机]
搞定电路设计之防过热的USB供电433.92MHz RF功率放大器
搞定电路设计之防过热的USB供电433.92MHz RF功率放大器 国际电信联盟(ITU)将433.92MHz工业、科学和医学(ISM)频段分配给1区使用,该区域在地理上由欧洲、非洲、俄罗斯、蒙古和阿拉伯半岛组成。尽管最初旨在用于无线电通信之外的应用,但多年来无线技术和标准的进步使得ISM频段在短距离无线通信系统中颇受欢迎。 ITU 1区的运营商无需为使用433.92MHz频段获得许可,常见应用包括软件定义无线电、医疗设备和重型机械的工业无线电控制系统。在美国,433.92MHz频段由获得许可的业余无线电台使用。 任何无线电传输应用都需要高增益放大器来驱动天线。根据应用要求,这可以通过一级或多级实现;输出功率值越高,R
[模拟电子]
业界首个带片上高速USB器件的闪存微控制器
日前,爱特梅尔公司 (Atmel Corporation) 宣布推出业界首款集成了高速 (480 Mbps) USB 器件兼收发器 (Device-and-Transceiver)、4位192 Mbps SDIO/SDCard 2.0、8位384 Mbps MMC 4.3 主机和片上48 MbpsSPI 接口之ARM Cortex-M3 闪存微控制器 SAM3U。SAM3U 的连通性,配合96 MHz/1.25 DMIPS/MHz工作频率,使其成为独特的 Cortex-M3 器件,适合于具有密集通信需求的应用,如工业、医疗、数据处理和消费应用中的高速网关。SAM3U 的面世扩展了爱特梅尔包括了 ARM 及AVR32产品的 32
[单片机]
小广播
热门活动
换一批
更多
最新嵌入式文章
更多精选电路图
更多热门文章
更多每日新闻
- 柔灵科技陈涵:将小型、柔性的脑机接口睡眠设备,做到千家万户
- 微灵医疗李骁健:脑机接口技术正在开启意识与AI融合的新纪元
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
更多往期活动
11月22日历史上的今天
厂商技术中心