USB是一种成功的点对点连接接口,但通过IP实现USB则是项挑战性的工作。
要 点
●设计师成功地将 USB(通用串行总线)用于连接其它通信技术;
●在任何项目中,不明确的含义都是造成错误和损失时间的根源;
●一些 USBOIP(互联网协议上工作的 USB)实现可以使多台主控计算机串行共享一台设备。



不明确的含义
与许多工程项目一样,这次的亲自动手项目也受制于许多模棱两可的含义所造成的错误假设。出现的第一个“冷不防”问题起因于 USB 连接的电气接口与逻辑接口是非对称的。在向 USB 芯片供应商采购为完成本项目所用芯片时,我们只讨论了项目在功能级上实现验证的问题。
在这种情况下,目标电路板不仅要支持至网络的以太网连接,而且还要作为连接到 USB 设备的一个主机。暗含的假设就是目标电路板会带有一个 USB 主控端口。经过与多家芯片供应商讨论之后,我们确定了一个目标处理器和开发电路板,它们既支持 USB,也支持以太网,但芯片与电路板都处于发布前的最后开发阶段。这个延迟看来对项目进度没有明显的风险,而且也无
USBoIP
项目进入正轨后,我们发现了一家提供 USB 服务器的公司 Keyspan 有一款产品(型号是 US-4A),它可以通过以太局域网将 USB 设备接入 Mac 或 PC。Keyspan 的产品是以一个嵌入式微控制器和 Cypress 的 USB EZ 主控芯片为基础的。USB 服务器的方法与我们的项目目标相当一致。Keyspan 公司的副总裁与首席技术官 Eric Welch 为我们提供技术支持,帮助我们了解项目的底层详情。我们也找到了其他一些公司,如 Icron,它提供一个采用 Freescale 处理器的 USB 电缆替代方案(见附文“替换电缆”)。
要在台式机与 USB 服务器之间通过网络传输 USB 数据,主控系统和 USB 服务器上的软件必须按普通 USB 连接进行修改。USB 服务器转过来起到 USB 设备的主控制器作用。为避免混淆,我们用 Keyspan 的术语“主客户机”来表示台式机上的主控制器,因为它实际上是与 USB 服务器通信,而不是与 USB 设备通信。另外,我们采纳了 Keyspan 的术语“NHCI”(网络主控制器接口),用它代替 USB 规范中定义的 OHCI(开放式主控制器接口)或 EHCI(增强型主控制器接口)。
在主客户机一端,软件会遍查连接到 USB 服务器上的各个设备,看它们是否已在本地插入,这样设备管理器会装入相应的类或供应商为该设备提供的驱动程序。这些驱动程序将与微软的 USB 栈进行交互,因此 NHCI 主控软件也必须仿真这个接口。于是,客户端的软件有两个任务:当设备被连接时通知设备管理器;仿真微软的 USB 栈通信 API。
当类或供应商驱动程序请求远程连接的 USB 设备时,NHCI 协议将请求打包后,通过 TCP/IP 发送。主客户机软件的最终段在网络上探测 USB 服务器,使之对用户可见。这里有一个实现细则,即网络部分是否应该与 USB 栈的仿真隔离开来,如双总线仿真器驱动程序。举例来说,微软的驱动程序开发工具包中有一个“烤面包”实例,它演示了如何编写一个内核总线仿真器驱动程序,它向设备管理器报告子设备的情况,并管理所有即插即用电源请求。NHCI主客户机端软件仿真本地 USB,与微软 USB 栈没有任何关系,而是代替它来工作。除了主客户机上的 USB 栈以外,USB 服务器也含有部分的 USB 主控栈,因为对其本地连接的设备来说,它是一个主控制器。本地 USB 栈允许服务器完成普通的轮询工作,否则主控系统会通过网络进行发送。USB 服务器提供集线器支持,因而可以管理本地带宽,独立处理集线器下游的设备,即它可以将这些下游设备连接到不同的主客户机 ,以支持串行共享。
主客户机上的 NHCI 软件需要对 USB 系统软件的其他部分作修改。由于一个 USB 上的所有设备都共享总线带宽,主控制器要做传输管理,并为每个设备分配带宽。但是,来自 USB 服务器的数据不会与任何本地 USB 共享带宽,因为数据与信息是通过网络传送的。网络传输的延迟要高于本地 USB。因此,底层驱动程序需要有比较宽松的时序要求。只要类驱动器不需要严格的时间限制,这种方法也是可以用的。有些情况下,通过网络控制 USB 设备可能无法完成,或者与用户期望的方式不相符。对无线连接的传输延迟问题来说,对底层时序宽松的要求起着至关重要的作用。
共享
本项目的概念与各种无线 USB 规格和产品有类似之处,目的是为了替换 USB 主控与设备之间的点对点连线。但有一点这些方案都没有涉及,即让多个主控制器连续地在网络上共享 USB 设备。
用 USB 服务器模型在一个网络连接上扩展 USB 可提供这种能力,这是 USB 所没有的。Keyspan公司 的 Welch 说:“我们把串行共享模型看作 USB 在网络上的抑制器应用。它可以实现所有功能的多方共享,例如一台多功能打印机上的传真、扫描仪和内存卡接口。你可以用市场上既有的 USB 设备获得这种功能,而不必等待重新设计一款产品。”
最近推出的无线 USB 规范也解决了用无线网络功能替代 USB 设备与主控之间连接的问题(参考文献 3)。在这一点上,该规范只关注连线的替换,而没有考虑通过网络连接时多设备串行共享的扩展问题。该规范表示,USB 会话将能够与主控计算机上的其他设备共享超宽带射频频段,而规范把支持这种带宽共享的任务放在了无线 USB 主控端上。如果主控端必须考虑与其他设备共享带宽,那么为什么不利用无线网络连接这个很好的机会,在同一网络上与其他主控计算机共享设备和带宽呢?
USB 接口已证明自己是一个有用且成功的电气与逻辑协议。设计师也用它增加了很多接口功能,如与主控计算机的无线连网,无需用户打开计算机外壳或者关闭计算机。本亲自动手项目验证了 USB 设备连接与共享的扩展能力,并且无需重新设计制造,无需等待未来的 USB 设备就可直接发挥连接性功能。
参考文献
1. Cravotta, Robert, "Gaming as serious business," EDN, Feb 7, 2002, pg 48.
2. Cravotta, Robert, "Forge ahead?," EDN, March 6, 2003, pg 50.
3. USB Implementers Forum, Wireless Universal Serial Bus Specification, Revision 1.0, 2005, www.USB.org.
USB 术语
要开发和支持 USB(通用串行总线)设备,就需要理解 USB 2.0 规范以及与之相关的 OHCI(开放式主控制器接口)规范的内容(参考文献 A 与 B)。我们亦参考了 Jan Axelson 关于该项目的著作(参考文献 C)。下面就是出自这些参考书的术语解释,它们可能会帮助读者熟悉 USB 术语。
USB 是一种轮询式电缆总线,它支持主控计算机与同时接入多个外设之间的数据交换。任何 USB 系统只有一个主控端。主计算机系统上的 USB 接口是主控制器,或 USB 主控端。主控制器的实现可以是硬件、固件或软件的组合。它初始化所有数据传输,因而所连接的外设可以通过一个由主控端安排、基于令牌的协议来共享 USB 带宽。总线支持热插拔外设,用户可以在主控端和其它外设处于工作状态时插入、配置、使用和拔下外设。USB 2.0 支持三种总线传输速度:高速 480 Mbps、全速 12 Mbps 和低速 1.5 Mbps。
USB 设备的一个功能是为系统提供一种能力,一个物理设备能拥有一个以上的功能。USB设备可分为多个设备类,如集线器、人机接口、打印机、扫描仪或海量存储设备。USB 设备必须保维自标识和一般配置的信息,还必须经常显示与所定义的 USB 设备状态相一致的状态。集线器设备类是一种可提供 USB 设备接入点的 USB 设备。
USB设备与 USB 主控端连接成一种多层星状拓扑结构。总线的每个线段都是主控端与一个集线器或一个功能,或者是连接到其他集线器或功能的一个点对点连接。各个集线器均位于每个星状结构的中心。主控系统整合有一个根集线器,提供一个或多个接入点。集线器保维状态位,报告每个端口上 USB 设备的连接与否情况。主控端通过查询集线器恢复这些状态位。在插入时,主控端会起动该端口,并在默认地址上通过设备的控制流水线寻址该 USB 设备。用于主控端和设备端的 USB 电缆连接器各不相同,并有密钥保护,使用户不会插入错误的设备。这种限制很重要,因为 USB 主控端必须满足的要求要多于 USB 设备,包括为每台设备提供电源和地线,即一个额定 5V电压和最高500 mA 电流。每个电缆段可以长达 5m,并且在主控端和设备之间最多可以级联五个集线器,这样外设距主控端最远可达 30m。如果要将外设距离扩展到 30m 以上,则必须用其它接口的长距电缆,例如本动手项目就使用了以太网连接。
在主机和设备端点上,源与目标之间的 USB 数据传输模型是一个管线。数据流管线没有 USB 定义的结构,而消息数据管线则有。管线有相应的数据带宽、传输服务类型,以及端点特性,如定向和缓冲区大小。大多数管线在用户配置好 USB 设备后就存在了。一旦用户为设备供电,就存在一个消息管线,即默认控制管线,它提供对设备的配置、状态和控制信息的访问。
总线枚举(Bus enumeration)功能是识别连接到总线上的设备,并为该设备分配独特的地址。由于 USB 允许在任何时候接入、拔出 USB 设备,因此总线枚举对 USB 系统软件是一个不间断的活动。总线枚举也包括对设备更换的检测与处理。
参考文献
1. USB Implementers Forum, Universal Serial Bus Specification, Revision 2.0, April 27, 2000, http://www.usb.org/developers/docs/usb_20_02212005.zip.
2. USB Implementers Forum, Open Host Controller Interface Specification for USB, Release 1.0a, 1999, http://h18000.www1.hp.com/productinfo/development/openhci.html.
3. Axelson, Jan, USB Complete, Third Edition, Lakeview Research, 2005.
替换电缆
Icron 方案不仅使 USB(通用串行总线)设备能够在网络上运行,而且其目的还在于用专用无线接口替换 USB 电缆。Icron 的无线架构采用了本地与远程 ExtremeUSB 子系统加密卡(Lex 和 Rex dongle),将 USB 设备连接到主系统上(图 A)。主 USB 系统软件不用修改,因为 Lex 和 Rex 会处理时序的适应问题。

Turnaround Timer(回转定时器)参数限制了主控端或设备端对请求或告知收到消息
