深入USB的核心 2001年 18期 USB从1996年提出一直到1999年年底,虽然也有一些厂商努力推动USB的普及,但未见流行。一直到苹果公司推出外形很酷且大受市场欢迎的iMac电脑,USB ZIP-100或USB LS-120高容量软驱成为iMac的首选配备后,USB设备才逐渐风行。目前全世界许多厂商都推出了各种USB接口的外设,联想等品牌电脑现在甚至已经是标配USB接口的键盘和鼠标。一时之间,USB红遍全球。   USB现在红了,那以前为何不红呢?这有多方面的原因:   1.USB周边外设与传统周边外设无明显差异,这也许是最主要的一个原因,例如传统键盘是键盘,USB键盘也是键盘,使用者并不会因为换了USB键盘而加快打字的速度。同样的,其他USB装置都只是传统装置的“Bus规格转变”而已,没有明显的提升效应。   2.USB标准过于抽象   因为部分规格过于抽象,使得USB的实际产品开发进度缓慢,首先是USB芯片开发缓慢,其次是周边设备,至于驱动程序、操作系统支持和应用软件的开发就更迟缓了。   3.操作系统支持不够   Windows 95并不支持USB,OSR2也不支持,直到OSR2.1才开始支持,而OSR2.1也仅限于支持少数的USB设备,例如比较基本的USB鼠标、USB键盘等,功能比较复杂的USB,装置还是不大支持。这样的情形在OSR2.5也大致类似,直到Windows 98才提供了对USB的全面支持。   4.USB周边芯片过于昂贵   除了USB产品开发延缓外,USB周边芯片的价格在初期也是颇高的,以千颗批发价来算,可能一颗USB周边芯片的成本是5美元,但是一个传统鼠标的制造成本可能只有3美元。   如今USB的周边设备还是比传统周边设备要贵,但价格差距在逐渐缩小,如今许多新兴周边设备只推出USB版本,USB便会渐渐盛行。无论愿不愿意,随着时间迁移,USB的春天就要来临了。   #1USB的技术特征   USB到底比常规端口快多少呢?http://www.usb.org的网站上提供了一张关于PC不同连接方式的数据传输率对照简表(如表1(^18060102a^),请注意后面的单位):   支持USB 1.1标准的设备能以12Mbps 的速率传递数据。对于常用的“低速外设”来说,这样的速率已绰绰有余。这些外设包括电话、数码相机、调制解调器、键盘、鼠标、数字游戏手柄、部分CD-ROM、磁带机、软盘、扫描仪和专用打印机等等。USB的高传输率也导致一些新产品的出现,如基于MPEG-2的视频设备和数字转换器等。   #2USB的数据传输方式   USB的数据传送有四种方式:控制(Control)、同步(isochronous)、中断(interrupt)、大量(bulk)。如果你是从硬件开始来设计整个系统,你还要正确选择传送的方式,而作为一个驱动程序的书写者,就只需要弄清楚是采用的什么工作方式就行了。   通常所有的传送方式下的主动权都由PC(host)决定。   控制(Control)方式传送:控制传送是双向传送,数据量通常较小。USB系统软件用来主要进行查询、配置和给USB设备发送通用的命令。控制传送方式可以包括8、16、32和64字节的数据,这依赖于设备和传输速度。   同步(isochronous)方式传送:同步传输提供了确定的带宽和间隔时间(latency)。它被用于时间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传送率的即时应用中。   中断(interrupt)方式传送:中断方式传输主要用于定时查询设备是否有中断数据要传送。设备的端点模式器的结构决定了它的查询频率,在1ms到255ms之间。这种传输方式典型的应用在少量分散的、不可预测数据的传输。键盘、操纵杆和鼠标就属于这一类型。   大量(bulk)传送:主要应用在数据大量传送和接收上,同时又没有带宽和间隔时间要求的情况下,要求保证传输。打印机和扫描仪属于这种类型。   USB将其有效的带宽分成各个不同的帧(frame),每帧通常是1ms时间长。每个设备每帧只能传送一个同步的传送包。在完成了系统的配置和连接之后,USB的host就会对不同的传送点和传送方式做一个统筹安排,用来适应整个USB的带宽。通常情况下,同步方式和中断方式的传送会占据整个带宽的90%,剩下的就安排给控制方式传送数据。   #2使用USB需要哪些支持环境   简单说来,USB需要主机硬件、操作系统和外设三个方面的支持才能工作。目前的主板一般都采用支持USB功能的控制芯片组,主板上也安装有USB接口插座。Windows98、WindowsMe、Windows2000等操作系统都是支持USB功能的。目前已经有很多USB外设问世,如数字照相机、计算机电话、数字音箱、数字游戏杆、打印机、扫描仪、键盘、鼠标等。   #2主机和USB设备的连接   主机和USB设备之间的连接拓扑结构是星型连接。USB连接器分A系列和B系列,一般USB设备利用B系列连接器与主机连接,而键盘、鼠标和扩充集线器等USB设备则利用A系列连接器与主机实现连接。主机与要求全速传送的USB设备连接时,可利用级联方法延长连接距离,但最多只能支持五级,最长扩展连接距离不得超过30m。   #2一部电脑最多可以接几个USB设备   这个问题的答案相信许多人都已知道了:127个。但是,这只是理论数据,目前也只做到111个USB设备同时工作。但这个数字已够大了,一般电脑连接的周边外设很少超过10个。   #2USB带来电脑机背新面貌   目前电脑的机箱背部,总是纠缠着各式各样的接线,但是这种情形在USB设备普及之后,将会有所改变。   假若全部改用USB外设,则大多数的接口、插孔可以省略。例如使用USB键盘,则传统AT、PS/2规格的键盘接孔就可省略;如使用USB Modem、USB鼠标,则COM口可以省略;使用USB打印机、扫描仪,则Printer口可以省略;而使用USB摇杆、USB音箱、USB麦克风等,则Game口及Line-in/Out/MIC/Spk等音源接孔也可以省略。   当然还是有些接口是USB无法取代的,例如显示器接口、SCSI接口、IEEE1394接口以及电源线等,都是USB无法取代的。   USB外设普及后,一台电脑将使用3~5个USB周边设备,因此直接在机箱后设置3~5个USB口也将是趋势,而不再局限于现在的USB×2,事实上我国台湾的ALi公司与SiS公司已经推出支持USB×3及USB×5的南桥芯片组,因此一部电脑直接内建3~5USB接口,将可满足USB使用者初期的需求,从而省去购买USB HUB的花费。   #1USB的底层结构   USB的设备可以接在PC上的任意USB接口上。而使用USB HUB还可以扩展端口,使更多的USB设备连接到系统中,USB的HUB有一个上行的端口(到host),有多个的下行端口(连接其它的设备),从而可以使整个的系统可以扩展连接100多个外设,其中HUB也算外设。对于USB系统来说,USB的host永远在PC一边,所有连接到host的都称为设备,在设备与设备之间是无法实现直线通信的,只有通过host的管理与调节才能够实现数据的互相传送。   一个PC可以拥有一个或多个USB host控制器。一般有两种类型的控制器UHCI(USB host控制器接口),OHCI(开放的host控制器接口)。Windows的USB类驱动程序对于每一种的控制器类型都有一种miniclass驱动程序来支持。   #2USB的设备类型   虽然USB设备都会表现USB的一些基本的特征。但是,USB的设备还是可以分成多个不同类型,同类型的设备可以拥有一些共同的行为特征和工作协议,从而使设备的驱动程序的书写变得简单一些。表2(^18060102b^)中就给出一些基本的USB的设备类型分类。   #2USB的基本特性   每一个设备会有一个或者多个逻辑连接点在里面,每个连接点叫端点(EndPoint)。每个端点有四种数据传送方式:控制方式传送;同步方式传送;中断方式传送;大量传送。但是所有的端点都被用来传送配置和控制信息。在host和设备的端点之间的连接叫作管道(Pipe)。对于同样性质的一组的端点的组合叫做接口(Interface),如果一个设备包含不止一个的接口就可以称之为复合设备(Composite Device)。   同样的道理,对于同样的类型的接口的组合可以称之为“配置”(Configuration)。但是每次只能有一个配置是可用的,而一旦该配置激活,里面的接口和端点就都同时可以使用。host从设备发过来的描述字(Descriptors)中来判断用的是哪个配置,哪个接口等等。   #2Windows USB 驱动程序接口   Windows系统中的USB的驱动程序完成许多的工作。实际上对于一些HID的USB设备,如键盘、鼠标和游戏操纵杆之类的设备可以自动被系统识别并且支持。而除此之外的设备就需要自己写一个驱动程序来完成硬件和软件之间的联系。在核心模式(kernel mode)下,驱动程序用IOCTL来组织和操作一些由其他部分发过来的要求和命令。而IOCTL又是通过URB(USB request blocks)来实现数据的传送的。   Windows用设备描述字或者接口描述字来了解到底是什么样的设备被接入到系统。Windows初始化的Hardware ID中有设备提供商的ID域(IDVendor,IDProduct,和BCDDevice)。如果你没有向系统提供一个INF文件的话,系统就会自动提供一个兼容ID(可能不是工作得很好)作为该设备的驱动程序。   #2USB的物理信号   USB的电缆有四根线,两根传送的是5V的电源,有一些直接和USB HUB相连的设备可以直接利用它来供电。另外的两根是数据线,数据线是单工的,在整个的一个系统中的数据速率是一定的,要么是高速,要么是低速,没有一个中间变速的设备来实现数据码流的变速。   USB的总线可以在不使用的时候被挂起,这样做可以节约能源。在有些时候总线还有可能当机(stall),比如说像数据传送的时候突然被打断,这个时候通过host的重新配置可以让USB总线重新工作。   #2底层协议   USB的物理协议规定了大多数在总线上的数据格式,通常一个全速的数据帧最大为1500bytes,而对于低速的帧最大为187bytes。帧通常是用来分配带宽给不同的数据传送方式。同时由于帧结构的规律性,帧的这种特性也可以做同步信号来使用。一个最小的USB的数据块叫做包(packet),这个包中包括同步信号、包标识(packet ID)、CRC和传送的数据。