|
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。
事务是在主机和设备之间不连续地数据交换。一个事务通常由主机开始,一般分三个阶段,第一阶段发送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字节。
例如,当数据包最大有效负载为512个字节时,一个全速帧(1500字节)最多可以传输2个这样的包。除去协议开销的18个字节,剩余458个字节可以用于其他事务的传输。因此每帧有效字节数为2个包的字节即1024字节,因此最大带宽为1.024Mbyte/s,每个包的有效字节占整个帧的35%。同样可推算,数据有效负载长度为64、128或256时其最大带宽值最大,为1.28Mbyte/s。
在USB2.0高速工作方式下,每个等时管道的数据有效负载可以是1,2,4,...,2048,3072字节。当数据有效负载长度为1024时其最大带宽值最大,为5.7344Mbyte/s,每个包的有效字节占整个微帧的14%。
2 Windows USB驱动程序接口
USB的驱动程序和以往的直接跟硬件打交道的Win95的VxD(VirtualDevice Driver)驱动程序不同,它属于WDM(Windows DriverModel)类型的,Win98、Win2000等操作系统均支持该类型的驱动程序。WDM首先定义了一个基本的核心驱动程序模型,处理所有类型的数据,使驱动程序模型的内核实现更加的固定。WDM驱动程序还是一种分层的程序结构,可以看做是WindowsNT驱动程序的改进,WDM驱动程序支持即插即用、电源管理和WMI(WindowsManagementInstrumentation)特性。Win98和Win2000提供了一系列的系统驱动程序,它们具有为许多标准类型设备服务所需的所有基本功能。
USB的WDM驱动程序接口框图如图4所示。
Windows提供了USB的系统类驱动程序,它处理USB上的所有底层通信,这样其他驱动程序就有了一个定义好的接口可以使用。USBHub.sys是USB集线器的驱动程序。USBD.sys是USB类驱动程序,它使用图4中UHCD.sys或OpenHCI.sys分别驱动两种类型的控制器?UHCI(USBHost Controller Driver),OHCI(Open Host ControllerInterface)。当PCI枚举器发现USB主机控制器后,就会装入相关的驱动程序。
通常一些设备都需要开发者写一个核模式的驱动程序来使硬件正常工作。在核模式下?驱动程序通过IRP(I/O RequestPacket)来组织和操作一些由其他部分发过来的要求和命令。而IRP又是通过URB(USB RequestBlocks)来实现的。但对于一些HID(Human InterfaceDevice)的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单片机控制程序通常由三部分组成,第一、初始化单片机和所有的外围电路(包括USBN9602);第二、主循环部分,其任务是可以中断;第三、中断句柄,其任务是对时间敏感的,必须马上执行。
3.3 开发USB网卡驱动程序
开发USB设备驱动程序通常采用WindowsDDK来实现,但现在有许多第三方软件厂商提供了各种各样的生成工具,象Compuware的Driver Works,BlueWaters的DriverWizard等软件能够方便地生成高质量的USB的驱动程序。没有DDK或WDM基础的开发人员可使用KRFTech公司的开发软件WinDriver,它的最新版本4.32已经支持USB驱动程序的开发。最后的驱动程序调试工作可以使用Compuware的Softice或Microsoft的Windows Debugger来进行。
Windows下的网卡驱动程序需符合NDIS规范(Network DriverInterfaceSpecification)。网络驱动程序不直接调用操作系统的例程,而是通过NDIS进行系统调用,NDIS还根据需要调用了驱动程序提供的例程,共同完成网卡的功能。
USB网卡驱动程序可分为NDIS中间介质小端口驱动程序和USB驱动程序两部分,然后将两部分驱动程序动态连接。如果USB设备未连接和被禁止,使USB驱动不可用,那么NDIS驱动会返回一个NOT_AVAILABLE的状态。这种实现方法可以保证用户不必重新安装NDIS或重启就可以连接或拔掉USB设备。
4 小结与展望
目前Win98、Win2000和WinCE均支持USB设备,USB并且已经得到了一个由450家技术公司组成的技术联盟的支持,今后新PC都会装有USB端口。APPLE公司更是推出了完全采用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具有了更好的应用前景。
|
|