全面认识
USB
技术的精髓(一)
当
Intel
向业界宣布在
USB 2.0
协议中将
USB
的标准传输率提高到
480Mbps
的时候,你也许还在为
USB
是什么样的东西而困惑。本文力图从比较通俗的角度向你详细介绍
USB
接口和
USB
协议方面的知识。
USB
是
Universal Serial Bus
的简称。它是一种可以同时处理计算机与具有
USB
接口的多种外设之间通信的电缆总线。这些连接到计算机上的外设共同分享
USB
的带宽。
USB
的分时处理机制真正在硬件的意义上实现了计算机外设的即插即用。
如果留心一下当前市场上的电脑外设,大家会发现采用
USB
设备的产品正在逐渐增加。键盘、鼠标、
MODEM
、游戏杆、音箱、扫描仪等,以前插在串行、并行等外部扩展接口上的部件,甚至一些以前要连接到电脑内部扩展槽上的设备,都开始以
USB
接口的界面出现,
USB
设备的发展势头正如日中天。
一个基于计算机的
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 的数据字段
图 12 端点 (Endpoint) 字段
图 13 USB 的数据字段
全面认识
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 字段在差模信号中的电压表现
图 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 编码后的数据格式对比。
为保证数据流中有足够的信号变化, 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
总线采用总线列举的方法来标记和管理外设所处的状态,当一台
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 外设配置好以后,即会进入到挂起 (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 简单描绘了非同步数据传输的请求和传送过程 ( 在同步传输中没有 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并不是"包治百病"的。