:转载时请以超链接形式标明文章原始出处和作者信息及
转:http://www.mcu123.com/news/Article/interface/usb/2 00608/210.html 摘要:以USB1.1为基础讨论了USB的基本原理、工作流程、通信协议和相应的关键技术,并介绍了一种USB接口的10M以太网卡的设计方案。已经发布的USB2.0支持480Mbps的高速数据传输,这将使PC可以通过USB接口传输更高速更大量的数据。还论述了USB2.0的改进和优点。
关键词:通用串行总线(USB) 设备驱动程序 WDM
通用串行总线USB (Universal SerialBus)是Intel、Microsoft等大厂商为解决计算机外设种类的日益增加与有限的主板插槽和端口之间的矛盾而于1995年提出制定的。它是一种用于将适用USB的外围设备连接到主机的外部总线结构,主要用在中速和低速的外设。USB同时又是一种通信协议,支持主机和USB的外围设备之间的数据传输。目前较多设备支持的是USB1.11,{zx1}的USB2.03已于2000年4月正式发布。
USB设备具有较高的数据传输率、使用灵活、易扩展等优点。
USB1.1有全速和低速两种,低速的速率为1.5Mbps,支持一些不需要很大数据吞吐量和很高实时性的设备,如鼠标等;全速模式为12Mbps,可以外接速率更高的外设。在刚刚发布的USB2.0中,增加了一种高速,数据传输率达到480Mbps,可以满足更加高速的外设的需要。
安装USB设备不必打开主机箱,它支持即插即用(Plug and Play) 和热插拔(Hot Plug)。当插入USB设备的时候,主机检测该外设并且通过自动加载相关的驱动程序来对该设备进行配置,并使其正常工作。
1 USB的结构与工作原理 1.1物理结构
USB的物理拓扑结构如图1所示。在USB2.0中,高速下Hub使全速和低速的信令环境独立出来,图2中显示了高速下Hub的作用。
通过使用集线器(Hub)扩展可外接多达127个外设。USB的电缆有四根线,两根传送的是5V的电源,另外的两根是数据线。功率不大的外围设备可以直接通过USB总线供电,而不必外接电源。USB总线{zd0}可以提供5V 500mA电流,并支持节约能源的挂机和唤醒模式。
1.2 USB设备逻辑结构
USB的设备可以分成多个不同类型,同类型的设备可以拥有一些共同的行为特征和工作协议,这样可以使设备驱动程序的编写变得简单一些。USB Forum在USB类规范2中定义了USB的设备类型,比如音频、通信、HID、HUB等设备类。
每一个USB设备会有一个或者多个的逻辑连接点在里面每个连接点叫端点。在USB的规范中用4位地址标识端点地址,每个设备最多有16个端点。端点0都被用来传送配置和控制信息。在NS公司的USB接口芯片USBN96024中有7个端点。
管道实现了在主机的一个内存缓冲区和设备的端点之间的数据传输,连接端点0的叫做缺省管道。管道是具有多个特征的信道,如带宽分配,包大小,管道类别以及数据流向。管道有两种类型分别是流管道(stream pipe)和消息管道(messagepipe)。流管道传输的数据包的内容不具有USB要求的结构,它是单向传输的;流管道支持批量、等时和中断传输。而消息管道与流管道具有不同的行为。首先,由主机发请求给USB设备,然后在适当的方向上传输数据,{zh1}是到达一个状态阶段。为了保证三个阶段的数据传输,消息管道定义了一个数据结构使命令可靠地被识别和传输。消息管道是双向的,它只支持控制传输。
对于同样性质的一组端点的组合叫做接口,如果一个设备包含不止一个接口就可以称之为复合设备(见图1)。
对于同样类型接口的组合可以称之为配置。但是每次只能有一个配置是可用的,而一旦该配置被xx,里面的接口和端点就都同时可以使用。主机从设备发过来的描述字中来判断用的是哪个配置哪个接口等等而这些描述字通常是在端点0中传送的。
1.3 USB通信分层模型 一台主机到设备的连接需要许多层与实体之间的相互作用。USB总线接口层提供了主机和设备之间的物理/信令/包的连接。在系统软件看来,USB设备层执行的是一般的USB操作。功能接口层提供和应用软件层相对应的附加功能。分层模型如图3所示,虽然逻辑上USB设备层和功能层各自与主机上的相应层通信,但物理上都是通过USB总线接口层实现数据传输的。
1.4 四种传输
USB提供了四种传输,以适应各种设备的需要。这四种传输分别是:
控制传输:控制传输是双向传输,数据量通常较小,主要用来进行查询、配置和给USB设备发送通用的命令。控制传输主要用在主计算机和USB外设中端点0之间。
等时传输:等时传输提供了确定的带宽和间隔时间。它被用于时间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传送率的即时应用中。例如进行语音业务传输时,使用等时传输是很好的选择。
中断传输:中断传送是单向的并且对于主机来说只有输入的。中断传输主要用于定时查询设备是否有中断数据要传送,该传输应用在少量的、分散的、不可预测的数据传输。键盘、游戏杆和鼠标就属于这一类型。
大量传输:主要应用在没有带宽和间隔时间要求的大量数据的传送和接收,它要求保证传输。打印机和扫描仪属于这种类型。
在开发USB设备时通过设置接口芯片中相应的寄存器使端点处于不同的工作。
1.5 USB通信协议
USB的物理协议规定了在总线上传输的数据格式,一个全速的数据帧有1500字节,而对于低速的帧有187字节。帧的作用是分配带宽给不同的数据传送。
一个最小的USB的数据块叫做包,包通常有同步信号,包标识,地址、传送的数据和CRC。包的ID由八位组成,其中后四位是纠错位。根据包功能的不同,在USB1.1中定义了以下四类十种:
token OUT IN SOF SETUP data DATA0 DATA1
handshake ACK NAK STALL
special PRE
在USB2.0中又增加了几种类型的包以满足高速传输的需要。其中data类型增加了DATA2和MDATA,handshake类型增加了NYET,special类型则增加了ERR,SPLIT,PING,Reserved。
事务是在主机和设备之间不连续地数据交换。一个事务通常由主机开始,一般分三个阶段,{dy}阶段发送token包,第二阶段发送是data包(可以向上也可以向下),在数据包传送完之后,就会由设备返回一个handshake包。
当客户端程序通过一个USB管道发送或接收数据时,它首先会调用Win32API,API会发送一个IRP到USB设备驱动程序。USB设备驱动程序的任务就是把客户端的请求通过一个管道发送到外设合适的端点。为了实现这个任务,USB设备驱动程序会递交请求给总线驱动程序,总线驱动程序可以把这些请求转变成事务,然后将这些事务组合成帧在总线上传输。
1.6 USB带宽分析举例
在USB1.1标准中将其有效的带宽分成帧,每帧通常是1ms长。但由于USB2.0的传输速率可高达480Mbps,因此在USB2.0增加了一种微帧,它只有原来帧的1/8,这使得在传输数据时使用更小的缓冲。在完成了系统的配置信息和连接之后,USB的主机就会对不同的端点和传输做一个统筹安排,用来适应它的带宽。对全速和低速的端点,系统为等时和中断的传输保留整个带宽的90%,即占每个帧时间的90%,剩下的就安排给控制传送数据。在USB2.0中,对于高速的端点,则为等时和中断的传输保留每个微帧的80%。
以等时传输为例,在某个配置中作为一个等时传输管道的端点,定义了它能传输的数据有效负载的长度。USB系统软件用这个长度限制去保证足够的总线时间使每帧的内容能容纳最多的数据有效负载。如果有足够的总线时间,配置才会建立。每个等时管道的数据有效负载可以是1,2,4,...,512,1023字节。
例如,当数据包{zd0}有效负载为512个字节时,一个全速帧(1500字节)最多可以传输2个这样的包。除去协议开销的18个字节,剩余458个字节可以用于其他事务的传输。因此每帧有效字节数为2个包的字节即1024字节,因此{zd0}带宽为1.024Mbyte/s,每个包的有效字节占整个帧的35%。同样可推算,数据有效负载长度为64、128或256时其{zd0}带宽值{zd0},为1.28Mbyte/s。
在USB2.0高速工作下,每个等时管道的数据有效负载可以是1,2,4,...,2048,3072字节。当数据有效负载长度为1024时其{zd0}带宽值{zd0},为5.7344Mbyte/s,每个包的有效字节占整个微帧的14%。
2 Windows USB驱动程序接口
USB的驱动程序和以往的直接跟硬件打交道的Win95的VxD(Virtual DeviceDriver)驱动程序不同,它属于WDM(Windows DriverModel)类型的,Win98、Win2000等操作系统均支持该类型的驱动程序。WDM首先定义了一个基本的核心驱动程序模型,处理所有类型的数据,使驱动程序模型的内核实现更加的固定。WDM驱动程序还是一种分层的程序结构,可以看做是WindowsNT驱动程序的改进,WDM驱动程序支持即插即用、电源管理和WMI(Windows ManagementInstrumentation)特性。Win98和Win2000提供了一系列的系统驱动程序,它们具有为许多标准类型设备服务所需的所有基本功能。
USB的WDM驱动程序接口框图如图4所示。 Windows提供了USB的系统类驱动程序,它处理USB上的所有底层通信,这样其他驱动程序就有了一个定义好的接口可以使用。USBHub.sys是USB集线器的驱动程序。USBD.sys是USB类驱动程序,它使用图4中UHCD.sys或OpenHCI.sys分别驱动两种类型的控制器UHCI(USB Host Controller Driver),OHCI(Open Host ControllerInterface)。当PCI枚举器发现USB主机控制器后,就会装入相关的驱动程序。
通常一些设备都需要开发者写一个核模式的驱动程序来使硬件正常工作。在核模式下驱动程序通过IRP(I/O Request Packet)来组织和操作一些由其他部分发过来的要求和命令。而IRP又是通过URB(USB Request Blocks)来实现的。但对于一些HID(Human Interface Device)的USB设备,象键盘、鼠标和游戏操纵杆之类的设备可以被操作系统自动识别并且支持,开发者不需要再另写驱动程序。
3 USB接口10M以太网卡的实现
3.1 选择器件
目前市场上USB的接口产品有两种,一种是集成了USB接口的单片机,另一种是不带单片机的USB接口芯片。由于前者需要专用的开发机故开发成本较高,本文将介绍一种使用廉价USB接口芯片USBN9602(NS公司)加高速的51单片机实现10M以太网卡的方案。
在做设计之前一定要计算好外设所要求的带宽和USB的速度是否匹配。一个USB以太网卡应该包括USB通信接口(USBN9602)、8051单片机以及IEEE802.3的MAC层和物理层。USBN9602在全速工作下可以达到12Mbit/s,采用USBN9602基本可以满足10M以太网的带宽需求。为达到较高的传输速率,USBN9602还应该用DMA与单片机通信。电路框图如图5所示。
3.2 设计单片机控制程序
对于单片机控制程序,目前没有任何厂商提供自动生成微码(firmware)的工具。USB单片机控制程序通常由三部分组成,{dy}、初始化单片机和所有的外围电路(包括USBN9602);第二、主循环部分,其任务是可以中断;第三、中断句柄,其任务是对时间敏感的,必须马上执行。
3.3 开发USB网卡驱动程序 开发USB设备驱动程序通常采用WindowsDDK来实现,但现在有许多第三方软件厂商提供了各种各样的生成工具,象Compuware的Driver Works,BlueWaters的DriverWizard等软件能够方便地生成高质量的USB的驱动程序。没有DDK或WDM基础的开发人员可使用KRFTech公司的开发软件WinDriver,它的{zx1}版本4.32已经支持USB驱动程序的开发。{zh1}的驱动程序调试工作可以使用Compuware的Softice或Microsoft的Windows Debugger来进行。
Windows下的网卡驱动程序需符合NDIS规范(Network Driver Interface Specification)。网络驱动程序不直接调用操作系统的例程,而是通过NDIS进行系统调用,NDIS还根据需要调用了驱动程序提供的例程,共同完成网卡的功能。
USB网卡驱动程序可分为NDIS中间介质小端口驱动程序和USB驱动程序两部分,然后将两部分驱动程序动态连接。如果USB设备未连接和被禁止,使USB驱动不可用,那么NDIS驱动会返回一个NOT_AVAILABLE的状态。这种实现方法可以保证用户不必重新安装NDIS或重启就可以连接或拔掉USB设备。
4 小结与展望
目前Win98、Win2000和WinCE均支持USB设备,USB并且已经得到了一个由450家技术公司组成的技术联盟的支持,今后新PC都会装有USB端口。APPLE公司更是推出了xx采用USB技术实现计算机与外设连接的新型计算机iMAC系列。市场上也已经出现了越来越多的支持USB的外设,用户将从中享受到对外设选择范围更广和与外设数据交换速度更快的好处。据Dataquest公司统计结果显示,2000年全球将会售出近1亿台USB设备。
USB2.0已经于2000年4月27日正式发布。USB2.0将向下兼容,使用与1.1版相同的电缆、连接器、软件接口、拓扑结构。对普通用户来说,在使用时不会觉得有什么改变,但是USB2.0将可以达到480Mbps的高速,用户将从2.0所提供的更高速的外设中受益。预计2000年第四季度USB2.0的外围设备将试生产,2001年将投入商业生产,USB2.0使USB具有了更好的应用前景。