随着计算机技术的飞速发展,个人计算机(PC)的用户扩展不断扩大。然而一些系统I/O(如IRQ、DMA和I/O端口地址)限制了它的使用。于是一些新的接口标准如USB、IEEE1394应运而生,本文着重介绍通用串行总线(USB)。对于使用了USB接口的PC,用户不需要打开机盖,手工配置系统I/O,并为不同的外设接口发愁。而只需极其简单的安装与配置即可使用外设。USB提供即插即用(Plug & Play)和热插拔功能,可以在不断电的情况下直接将外设连接到USB上,且马上就可以被系统识别使用。所有的USB外设接口“ONE-SIZE-FITS-ALL”,可以简单方便的连接入计算机中。USB系统采用级联星型拓扑结构,每个USB设备用一个USB插头连接到一个外设的插座上,而其本身又提供一个插座供下一个外设连接用。通过这种类似菊花链似的连接,一个USB控制器可以连接多达127个外设,而每个外设间距离(线缆长度)可达5米。为PC的USB外设扩充提供了一个很好的解决方案。
二、USB基本特性
USB的硬件结构
USB采用四线电缆,其中两根是用来传送数据的串行信道,另两根为下流(Downstream)设备提供电源,D+、D- 是串行数据通信线,它支持两种数据传输率,对于高速需要高带宽的外设,USB以全速12Mbps传输数据。对于低速外设,USB则以1.5 Mbps的传输速率传输数据。USB总线会根据外设情况在两种传输模式中自动动态转换。VBUS是通常为+5V的电源,GND是地线。USB是基于令牌的总线,类似于像令牌环网络或FDDI基于令牌的总线。USB主控制器广播令牌,总线上设备检测令牌中的地址是否与自身相符,通过接受或发送数据给主机作响应。USB通过支持悬挂/恢复操作来管理USB总线电源。USB系统采用级联星型拓扑即类菊花链连接
该拓扑由三个基本部分组成:主机(Host)、集线器(Hub)和功能设备。主机,也被称为根、根结或根Hub.它是做在主板上的,或作为适配卡安装在计算机上。主机包含有主控制器和根集线器(Root hub),它控制着USB总线上的数据和控制信息的流动。每个USB系统只能有一个根集线器,它连接在主控制器上。集线器是USB结构中的特定成分,它提供叫做端口(Port)的点来将设备连接到USB总线上。同时检测连接在总线上的设备,并为这些设备提供电源管理,负责总线故障检测和恢复。集线器或是为总线提供能源,或是自身提供能源(从外部得到电源)。自身提供能源的设备可插入总线提供能源的集线器中,总线提供能源的设备不能插入自身提供能源的集线器或支持超过四个的下游端口中。总线提供能源的设备需要超过的100mA电源时,不能同总线提供电源的集线器连接。功能设备通过端口与总线连接。USB设备同时可做Hub使用。例如,USB监视器可以提供USB鼠标和USB键盘的端口。USB集线器使用A类连接器,设备使用B类连接器。
USB的软件结构
USB通信模块的基本流图,主机和设备被分为几层。实箭头表示主机上的实际通信。设备上的相应接口根据不同的仪器而不同。主机和设备间的通信最终发生在物理线上,然而,在每一水平层之间存在着逻辑接口。主机中客户程序软件与设备功能间的通信代表了设备需求与设备能力之间的约定。
每个USB只有一个主机,它包括以下几层:
USB总线接口
USB系统
USB客户软件
USB总线接口处理电气层与协议层的互连。从互连的角度来看,相似的总线接口由设备及主机同时给出,例如串行接口机(SIE)。USB总线接口由主控制器实现。
USB系统用主控制器管理主机与USB设备间的数据传输。它与主控制器间的接口依赖于主控制器的硬件定义。同时,USB系统也负责管理USB资源,例如带宽和总线能量。这使客户访问USB成为可能。
USB系统有三个基本组件:
主控制器驱动程序(HCD)
USB驱动程序(USBD)
主机软件
主控制器驱动程序能够更容易的将不同主控制器设备映像到USB系统中。因此客户可以在不知其设备连接那个主控制器的情况下与设备相互作用。HCD与USBD间的接口叫HCDI,特定的HCDI由支持不同主控制器的操作系统定义。通用主控制器驱动器(UHCD)处于软结构的最底层,由它来管理和控制主控制器。USB主控制器定义了一个标准硬件接口,以提供一个统一的主控制器可编程接口。UHCD实现了与USB主控制器通信和控制USB主控制器的一些根本细节,并且它对系统软件的其它部分是隐蔽的。系统软件中的更高层通过UHCD的软件接口与主控制器通信。[page]
USB驱动程序(USBD)位于UHCD之上。它提供驱动器级的接口,满足现有设备驱动器设计的要求,USBD所实现的准确细节随不同操作系统环境而有所不同,但USBD在不同操作系统环境下完成的是一样的工作。USBD以I/O请求包(IRPs)的形式提供数据传输构架,它由通过特定管道(Pipe)传输数据的需求组成。此外,USBD使客户端出现设备的一个抽象,以便于抽象和管理。作为抽象的一部分,USBD拥有缺省的管道。通过它可以访问所有的USB设备以进行标准的USB控制。该缺省管道描述了一条USBD和USB设备间通信的逻辑信道。
在某些操作系统中,没有提供USB系统软件。这些软件本来是用于向设备驱动程序提供配置信息和装载结构的。在这些操作系统中,设备驱动程序将应用提供的接口而不是直接访问USBDI结构。
客户软件位于软件结构的最高层,它负责处理特定USB设备的设备驱动器。客户程序层描述了所有直接作用于设备的软件入口。当设备被系统检测到,这些客户程序将直接作用于外围硬件。这个共享的特性将USB系统软件置于客户和它的设备之间,也就是说,一个客户程序不能直接访问设备硬件,而是根据USBD在客户端形成的设备映像由客户程序对它进行处理。
总体上说,主机各层有以下功能:
检测连接和移去的USB设备
管理主机和USB设备间的数据流
连接USB状态和活动统计
控制主控制器和USB设备间的电气接口,包括限量能量供应
控制信息可能以带内方式或带外方式在主机和设备间传输。带内方式将控制信息与数据混在一个管道内;带外方式将控制信息与数据放在分离的管道内。
每一个连上的USB设备都有一个被称为缺省管道的消息管道。为了像设备列举和配置这样的标准流控制,在USB设备和主机之间建立逻辑关联。缺省管道为所有的设备提供了一个标准的接口。缺省信道也用于设备通信,由USBD作为中介,USBD拥有所有设备的缺省信道。
特别的USB设备允许使用附加的消息管道传输具体设备的控制信息。这些管道使用相同的通信协议作为缺省信道,但传输的信息必须具体到特定的设备,而不被规范标准化。USBD支持其客户共享它拥有和使用的缺省信道。它也可以访问其它设备的控制管道。
基于不同级别的抽象,HCD和USBD提供不同的软件接口。他们被希望以某种特殊的方式一起工作来满足所有USB系统的需求。USB系统的需求主要体现为对USBDI的需求。USBD和HCD间任务的区分没有定义。然而,在特定的操作系统中支持多主控制器设备是HCDI必须满足的需求。
HCD提供了主控制器的抽象和通过USB传输的数据的主控制器视角的一个抽象。USBD提供了USB设备的抽象和USBD客户与USB功能间数据传输的一个抽象。总之,USB系统促进客户和功能间的数据传输,并作为USB设备的规范接口的一个控制点。USB系统提供缓冲区管理能力并允许数据传输同步与客户和功能的需求。
USB上的数据流传输
主控制器负责主机和USB设备间数据流的传输。这些传输数据被当作连续的比特流。每个设备提供了一个或多个可以和客户程序通信的接口。每个接口由0个或多个管道组成,这些管道分别独立地在客户程序和设备的特定终端间传输数据。USBD为主机软件的现实需求建立了接口和管道。当提出配置请求时,主控制器基于主机软件提供的参数提供服务。
USB支持四种基本的数据传输模式:
控制传输
同步传输
中断传输
数据块传输
每种传输模式应用到具有相同名字的终端,具有不同的性质。控制传输类型支持外设与主机之间的控制、状态、配置等信息的传输,为外设与主机之间提供一个控制信道。每种外设都支持控制传输类型,这样主机PC与外设之间就可以传送配置和命令/状态信息。
等时(Isochronous)传输类型支持有周期性、有限的时延和带宽、且数据传输速率不变的外设与主机间的数据传输。该类型无差错校验,故不能保证正确的数据传输,支持像计算机-电话集成系统(CTI)和音频系统与主机的数据传输。
中断传输类型支持像游戏棒、鼠标和键盘等人机输入设备,这些设备与主机间数据传输量小、无周期性,但对响应时间敏感,要求马上响应。
数据块(Bulk)传输类型支持打印机、扫描仪、数字相机等外设,这些外设与主机间传输的数据量很大,USB在满足带宽的情况下才进行该类型的数据传输。
USB采用分块带宽分配方案,若外设超过当前带宽分配或潜在的要求,则拒绝进入该设备。同步和中断传输类型的终端保留带宽,并保证数据按一定的速率传送。集中和控制终端按可用的最佳带宽来传输数据。但是,10%的带宽为批量处理和控制传送而保留,数据块传输仅在带宽满足要求的情况下才会出现。
USB采用1ms帧时间框来传输数据,主控制器通过产生框开始(SOF)来开始每帧的传输。
SOF标志拥有访问总线的最高权限,在框结束(EOF)间隔串音电路与其它活动的传输器电气地独立,并为SOF传输提供空闲总线[page]
USB的即插即用
USB一个主要优点就是支持设备的热插拔,用户不需要关闭电源就可以接上和使用USB设备。USB集线器驱动程序枚举设备,并通知系统设备就绪。USB设备使用描述符来识别设备和其使用的协议。串口号产生P&P用的ID,端口地址指明设备连接的端口和集线器。若设备不提供串口号,则USB使用设备端口地址。
当一个新设备被USB集线器检测到,马上通知主系统,系统软件就查询该设备,自动确定所需设备驱动器软件和总线带宽,然后对它进行配置。系统软件装载了合适的驱动器软件,用户马上就可以使用新设备。
三、USB编程
USB编程主要是指USB驱动程序编程和USB客户软件编程。
USB驱动程序接口
Windows 98通过允许USB设备驱动程序栈通讯支持USB.在USB驱动程序和USB驱动程序栈之间是USB驱动程序接口(USBDI)。在Windows 98中,这种通讯是在WDM结构中实现的。
Usbhub.sys是USB集线器驱动程序。当Usbd.sys枚举每个USB主机控制器中的根结点集线器时被加载。
Usbd.sys是类USB驱动程序。
Uhcd.sys(通用主机控制驱动程序)以及Ohcd.sys(开放主机控制驱动程序)是USB主机控制器驱动程序。
另外,Hidclass.sys(WDM输入类驱动程序)接受和发送到小驱动程序的HID报告。Hidusb.sys通过USB接受和发送HID报告。当检测到USB总线时,PCI枚举器加载USB栈驱动程序部分,并加载至少一个核心组件。
USB 驱动程序和USB客户程序
USB 驱动程序编写是和硬件相关联的。在器件方面,适合产品开发的系列芯片有Intel公司的8X930系列(基于MCS-51微处理器的内核结构)和8X931系列(基于MCS-251微处理器的内核结构)、National Semiconductor公司的 USBN9602等。Intel公司和第三方提供了一个完整的硬件和软件开发工具,Keil、IAR、PLC和Tasking等公司提供了具有ANSI C交叉编译器、汇编器、连接器/定位器、调试器和仿真器的软件开发工具。AMI、Phoenix Technologics和 systemSoft等公司提供了设备驱动器和外围微控制程序(firmware)。
针对选用的USB控制器,从第三方得到所需的软件,包括汇编器或编译器、连接器/定位器和调试器等,用它们实现USB设备驱动器。对USB 驱动程序编译成功后进行连接/定位,用调试器调试后加载在目标系统中。
虽然USB的物理和逻辑拓扑反映了总线的共享特性,客户软件(CSW)只处理它感兴趣的USB功能接口。USB功能的客户软件必须用USB软件编程接口来处理各种功能,而不是像其它总线那样通过地址或I/O访问直接处理它们的功能。在这个过程中,客户软件独立于连接在USB上的其它设备。这使设备和客户软件的设计者将精力集中于软硬件间相互作用的设计细节。
USB的客户程序实际上是对客户端设备映像的操作,这些映像由USBD或HCD产生。在98ddk中,存在着一组叫做USBD Interface (USBDI)函数的API函数集。该函数集包括了传输函数,管道(Pipe)函数,设备配置函数及其它函数。应用这些函数可编写支持任何USB兼容设备的USB驱动程序和客户程序。其中,管道(Pipe)是USB设备驱动程序建立的逻辑通信信道。
四、结论
USB为个人计算机(PC)外围设备输入输出提供了新的接口标准。它使得设备具有了热插拔、即插即用、自动配置的能力,并标准化了设备连接。USB的级联星型拓扑结构大大扩充了外设数量,使增加、使用外设更加便捷、快速。新提出的USB2.0标准更是将数据传输速率提高到了一个新的高度,因而拥有美好的应用前景。
上一篇:CAN总线与RS485的DSP通信接口设计方案
下一篇:基于DSP 内嵌ECAN模块的总线接口设计
推荐阅读最新更新时间:2024-05-02 22:51