USB(通用串行总线)是用于将适用USB 的外围设备连接到主机的外部总线结构,其主要是用在中速和低速的外设.USB 是通过PCI 总线和PC 的内部系统数据线连接实现数据的传输.USB 同时又是一种通信协议,他支持主系统(host)和USB 的外围设备(device)之间的数据传输. USB 的动机 1 连接PC 与电话:PC 具有很强的运算能力,而电话提供最为广泛的通信互连.运算与通信成为计算机应用的基础,而计算机与通信是两个相对独立发展的产业,USB 旨在提供可以广泛应用于PC 到电话的互连的普遍性的连接. 2 Plug-and-Play: 从用户端来看PC 的串行口并行口和键盘鼠标端口都不能Plug-and-Play, USB则提供真正的Plug-and-Play. 3 端口扩展:PC 的已有的串行/并行口等端口只适用于一两种的外设,并且不易扩展.USB提供双向低成本低速到中速(USB 2.0 可达480Mb/s)的通用外设总线,适用于连接各种各样的外设并且易于扩展. USB 的拓朴结构 USB的拓朴结构如图1 图1 USB Toplogy 在USB 的网络协议中,每个USB 的系统有且只有一个host ,它负责管理整个USB 系统,包括USB Device 的连接与删除;Host 与USB Device 的通信总路线的控制等等.Host端有一个Root Hub, 可提供一个或多个USB 下行端口.每个端口可以连接一个USB Hub或一个USB Device. USB Hub 是用于USB 端口扩展的,即USB Hub 可以将一个USB 端口扩展为多个端口.图1 中的每个Func(Function)就是一个USB Device. 如USB键盘,USB鼠标,USB MODEM, USB硬盘等等.Compound Device 是指带一个Hub 和一个或多个不可删除的USB Device 的复合设备.一个USB系统可连接多达127 个Function .
USB 的系统有且只有一个host ,而PC 端的USB 都是Host ,所以将两台PC 的USB口通过A-A USB 电缆连接起来是不能实现通信.如果将两个host 连起来通信,这样一来的一个USB 的系统有了两个的host ,与它的网络协议冲突.Anchorchip Prolific 等厂家有USB到USB的设备控制器,可以实现两个USB Host 的相连. USB 设备 USB 的设备可以接在PC 上的任意的USB 接口上.而使用Hub 还可以扩展使更多的USB设备.连接到系统中USB的Hub 有一个上行的端口(到host), 有多个的下行端口(连接其它的设备) .从而可以使整个的系统可以扩展的连接127 个外设.其中Hub 也算外设. 对于USB 系统来说,USB 的host 永远在PC 边,所有的其他连接到host 都称为设备.在设备与设备之间是无法实现直线通信的,只有通过host 的管理与调节才能够实现数据的互相传送.在系统中通常会有一个根Hub ,这个Hub 一般有两个下行的端口.
USB 的设备类型(device class) 虽然USB 设备都会表现USB 的一些基本的特征,但是USB 的设备还是可以分成多个不同类型,同类型的设备可以拥有一些共同的行为特征和工作协议.从而使设备的驱动程序的书写变得简单一些.下表中就给出一些基本的USB的设备类型分类: USB 的优点有以下几条 - USB 为所有的USB 外设提供了单一的易于使用的标准的连接类型.这样一来就简化了USB 外设的设计,同时也简化了用户在判断哪个插头对应哪个插槽时的任务,实现了单一的数据通用接口.
- 整个的USB的系统只有一个端口和一个中断节省了系统资源
- USB 支持热插拔(hot plug)和PNP(Plug-and-Play) .也就是说在不关闭PC 的情况下可以安全的插上和断开USB 设备.计算机系统动态地检测外设的插拔并且动态地加载驱动程序.其他普通的外围连接标准如SCSI 设备等,必须在关掉主机的情况下才能插拔外围设备.
- USB在设备供电方面提供了灵活性.USB直接连接到Hub 或者是连接到Host 的设备,可以通过USB 电缆供电,也可以通过电池或者其它的电力设备来供电,或使用两种供电方式的组合.并且支持节约能源的挂机和唤醒模式.
- USB 提供全速12Mbps 的速率和低速1.5Mbps 的速率,来适应各种不同类型的外设.USB2.0 还支持480Mbps 的高速传输速率.
- 为了适应各种不同类型外围设备的要求,USB 提供了四种不同的数据传输类型:控制传输,Bulk 数据传输,中断数据传输和同步数据传输.同步数据传输可为音频和视频等实时设备的实时数据传输提供固定带宽.
- USB 的端口具有很灵活的扩展性.一个USB 端口串接上一个USB Hub 就可以扩展为多个USB端口.
传输方式 USB有四种的传输方式:控制(Control), 同步(isochronous), 中断(interrupt), 大量(bulk). 如果你是从硬件开始来设计整个的系统,你还要正确选择传输的方式.而作为一个驱动程序的书写者,就只需要弄清楚他是采用的什么工作方式就行了.通常所有的传输方式下的主动权都在PC 边,也就是host 边. 1 控制(Control)方式传输:控制传输是双向传输,数据量通常较小.USB 系统软件用来主要进行查询,配置和给USB 设备发送通用的命令.控制传输方式可以包括8,16,32和64 字节的数据.这依赖于设备和传输速度.控制传输典型地用在主计算机和USB 外设之间的端点(Endpoint)0 之间的传输.但是指定供应商的控制传输可能用到其它的端点,
2 同步(isochronous)方式传输:同步传输提供了确定的带宽和间隔时间latency) .它被用于时间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传输率的即时应用中.例如执行即时通话的网络电话应用时,使用同步传输模式是很好的选择.同步数据要求确定的带宽值和确定的最大传输次数.对于同步传输来说,即时的数据传递比完美的精度和数据的完整性更重要一些. 3 中断(interrupt)方式传输:中断方式传输主要用于定时查询设备是否有中断数据要传输.设备的端点模式器的结构决定了它的查询频率,从1 到255ms 之间.这种传输方式典型的应用在少量的,分散的,不可预测数据的传输.键盘,操纵杆和鼠标就属于这一类型.中断方式传输是单向的并且对于host 来说只有输入的方式. 4 大量(bulk)传输:主要应用在数据大量传输传输和接受数据上,同时又没有带宽和间隔时间要求的情况下,要求保证传输.打印机和扫描仪属于这种类型.这种类型的设备适合于传输非常慢和大量被延迟的传输,可以等到所有其它类型的数据的传输完成之后再传输和接收数据. USB 将其有效的带宽分成各个不同的帧(frame) ,每帧通常是1ms 时间长.每个设备每帧只能传输一个同步的传输包.在完成了系统的配置信息和连接之后,USB 的host 就会对不同的传输点和传输方式做一个统筹安排,用来适应整个的USB 的带宽.通常情况下同步方式和中断方式的传输会占据整个带宽的90% ,剩下的就安排给控制方式传输数据. 数据交换(Transactions) 一个transaction 是在host 和设备device之间的不连续相互数据交换,通常由host 开始交换,交换的开始是由Token 的包开始的,接下来是双方向上的数据包,在数据包传送完之后,就会由设备device 返回一个握手handshake包.USB系统通过IN,OUT,和SETUP的包来指定USB 地址和endpoint 最多是128 个,0 通常被用来用做缺省的传送配置信息的,并且这些被指定的设备必须通过上面形式的包来回应这种形式的指定.每个SETUP的包包含8 个byte 的数据,数据用来指示传送的数据类型.对于DATA 数据包来说,设置两种类型的数据包是为了能够在传送数据的时候做到更加的精确.ACK handshake 的包用来指示数据传送的正确性,而STALL handshake 则表示数据包在传送的过程中出了故障,并且请示host 重新发数据或者清除这次传送.PRE 格式的包主要是用在在一个USB 的系统中如果存在不同速率的设备的时候,将不同于总线速度的设备中就会回应一个PRE 的包从而会忽略该设备.各种不同类型的包的大小是不同的,DATA的数据包最大是1023bytes. USB 设备的开发 - 从Http://www.usb.org/developer处得到USB 的Specification 阅读相关内容同时可参考The USB Handbook by Jaff Kosar Developing USB Peripherals by Wooi Ming Tan 等参考书
- 需要一台支持USB的PC 如果要开发WDM 驱动程序则需要一台有以下配置的PC
Windows NT 4.0 Windows NT DDK USB DDK Win 32 DDK Visual C++ 先装VC 然后DDK 然后Nemega 公司的DriverStudio 或是WinDriver(开发工具). - 编写USB Device 的规格书.
- 无论如何不要做无谓的重复,可以购买相应的评估板和评估软件,并找到尽可能多的实例,源程序,代码.然后需要有你所选的MCU的程序编译器.
- 申请成为USB论坛(USB forum)的成员(每年大约需要支付$2500). 同时就可以获得一个Vendor ID ,也可以向他们购买Vendor ID, 每个Vendor ID 的零售价格是$200, 不过USB论坛的成员可以在USB相关的支持方面可以得到许多的好处.
- 购买其它在开发中要用到的设备,如总线分析仪USB Hubs ,竞争者的相应USB 设备以及USB鼠标USB键盘等.
- 编写或改写USB驱动程序,MCU固件程序和客户程序代码
- 参加USB遵从试验,在不同的系统与配置验证你的USB设备
驱动程序编写. USB 的驱动程序和以往的直接跟硬件打交道的WIN95 的VXD 的方式的驱动程序不同它应该是WDM 类型的Windows 下的USB软件总体框图如图2 图2 USB软件总体框图
|