USB基础知识
USB 规范是 Intel、Microsoft 和其他几家涉及 PC 和外围设备的公司的产品。规范文档以及为开发人员提供的相关信息和工具可在 USB Implementers Forum(简称 USB-IF)的网站 ( www.usb.org ) 上获取。
每条总线都有一个主机控制器,用于控制与其总线上的设备的通信。为了增加设备可用的带宽,一台计算机可以有多个主机控制器,每个控制器控制自己的总线。
USB 支持三种总线速度:低速 1.5Mbps、全速 12Mbps 和高速 480Mbps。该规范的 2.0 版本于 2000 年发布,增加了高速功能。Windows XP 是个支持 USB 2.0 的 Windows 版本。Microsoft 承诺为Windows 2000 和Windows ME 提供USB 2.0 更新。其他操作系统也正在提供 2.0 支持。
对于嵌入式 PC,Windows CE 还支持 USB。大多数Windows CE 计算机都充当USB 主机,但Windows CE 3.0 还包括Cypress/ScanLogic 的SL11 主/从控制器的驱动程序。使用这些驱动程序或其他控制器的类似驱动程序,Windows CE 计算机可以充当 USB 外围设备。
USB 的多功能性很大程度上归功于它的四种传输类型,每种类型适合不同的用途。控制传输携带枚举过程中使用的请求,也可用于向设备发送请求并(可选)接收回复的其他通信。中断传输适用于键盘和鼠标等设备,主机定期请求或发送数据。批量传输适用于打印机和扫描仪等需要快速传输的设备,但如果总线繁忙,数据可能会等待。等时传输适用于实时音频和其他时序至关重要且可以容忍偶尔错误的应用。
在启动时或当设备连接到总线时,设备的集线器会向主机连接情况。在称为枚举的过程中,主机发送一系列请求以了解设备并与其建立通信。设备以称为描述符的数据结构返回信息。Windows 的设备管理器将描述符中的信息与 PC 的 INF 文件中的信息进行比较。设备管理器找到匹配并分配一个设备驱动程序,使应用程序能够访问该设备。
所有设备都必须符合 USB 的电源管理要求。其中包括限制设备消耗的总线电流量以及检测何时进入低功耗挂起状态。允许的电流量取决于设备描述符中的信息。
有数十种支持 USB 的设备控制器芯片可供选择。有些是带有 USB 端口的
微控制器。其他控制器是无 CPU 的控制器,具有 USB 端口和串行或并行接口,用于与通用微控制器通信。大多数支持 USB 的微控制器都有可用的 C 编译器。如果您有使用特定微控制器系列的经验,那么查看是否有支持 USB 的变体是有意义的。
测试设备的 USB 通信包括几个阶段。个目标是成功枚举。如果设备不枚举,则接口几乎不能做其他事情。其他测试包括使用设备执行其预期目的(例如,读取文件并将文件写入 USB 驱动器)以及验证设备是否遵守电源管理规则。
USB 通信的调试可以在三个位置进行:主机 PC、设备和
电缆。每个都有其优点。
有关设计 USB 设备的更多信息,请参阅 Jack Ganssle 的“ USB 开发简介”和我的文章“ HIDs Up ”。
在主机上调试
从主机中,您可以验证设备是否已枚举并可以执行其预期功能。在主机上检测到问题后,查找问题根源通常需要检查设备固件或电缆中的总线流量。'
![](https://file3.dzsc.com/news/23/07/26/160901137.gif)
图 1 Windows 的设备管理器显示所有枚举的 USB 设备
设备连接到主机后,Windows 的设备管理器(图 1)可以快速检查设备枚举是否没有问题。列表图标上的感叹号表示与设备通信或查找驱动程序时出现问题。图标上的 X 表示该设备存在但已被禁用。
要准确查看主机在枚举期间收到的信息,请使用 USBCheck 应用程序套件或新的 USB 命令验证器工具。两者均可从 USB-IF 网站获取。USBCheck 使您能够查看描述符、发送控制请求、查看结果以及对集线器和 HID(人机接口设备)类中的设备运行进一步测试。
![](https://file3.dzsc.com/news/23/07/26/160940012.gif)
图 2 从集线器检索到的设备描述符
USBCheck 的设备框架测试读取描述符并发送标准请求。这些测试对于初步检查 Windows 是否从您的设备检索预期信息非常有用。图 2 显示了 USBCheck 从集线器接收到的设备描述符。
主机枚举设备后,应用程序可以测试设备的预期用途。Windows 设备驱动程序通常允许应用程序使用 API 函数ReadFile()、WriteFile()和DeviceIoControl()的某种组合来访问设备。某些设备类别具有额外的支持。例如,应用程序可以像访问其他驱动器一样访问 USB 驱动器。应用程序不必知道或关心驱动器是否使用USB或其他接口,因为这些细节是在较低级别处理的。
对于许多设备,USB 类规范定义了设备的预期行为,从而定义了固件的职责。示例包括 HID、大容量存储设备和静态图像捕获设备。
当出现问题时,Windows 返回的错误消息通常提供的帮助有限。例如,当 HID 类设备的WriteFile()失败时,返回的常见错误是“CRC 错误”。但此消息可能是由导致传输失败的任何固件问题引起的。它通常与用于错误检查的 CRC 计算中检测到的错误无关。追踪此类问题的原因通常需要在设备或总线上进行调试。
合规性测试
USB Implementers Forum 和 Microsoft 为 USB 设备及其主机软件的开发人员提供测试机会。通过测试有助于产品获得显示 USB 徽标或 Microsoft Windows 徽标的资格。
为了在各种条件下对产品进行全面测试,USB-IF 成员可以将设备注册到合规性计划中。一年会员费为 2,500 美元。这些费用用于支持运行该计划以及支持 USB 产品开发和 USB 在市场上推广的其他活动的成本。
当设备满足合规计划的标准时,USB-IF 认为它具有“合理的可接受性措施”,并将其添加到合规设备的集成商列表中。在收到签署的许可协议和付款后,USB-IF 授权设备显示 USB 徽标。
合规性计划的两个标准是检查表和合规性测试。检查表包含与产品及其行为相关的问题。对于外围设备、集线器、带有 USB 主机的系统和电缆的供应商,存在单独的清单。有些产品需要多个清单。
外设检查表涵盖机械设计、设备状态和信号、工作电压和功耗。每个问题都附有对规范中页面的引用,您可以在其中找到更多信息。检查表可从 USB-IF 网站获取。
为了帮助通过电气测试,USB-IF 提供了包含软件和测试程序的 USBHSET 实用程序。另一个选择是 VI Engineering 的 USB 预一致性测试仪,它是执行测试文档中所有电气测试的硬件单元。随附的基于 LabView 的软件使您能够查看眼图、上升和下降时间、交叉电压、浪涌电流等。
为了帮助验证 USB 规范第 8 章中讨论的协议中的正确响应,Professional Interactive Media Center NV (PIMC) 提供了 Ch8ck 实用程序。Ch8ck 执行的测试包括发送不支持的方向或传输类型的数据包 ID、检查暂停端点的响应以及在 CRC 值中需要时检查位填充。
当您对清单上适用于您产品的所有内容都回答“是”时,您就可以进行合规性测试了。USB-IF 赞助研讨会,使您能够使用不同类型的硬件测试您的设备。每个车间都有许多供应商和产品可供选择。您可以与主机硬件供应商安排私人测试。您还可以参加 USB-IF 的“plugfests”之一,尽可能多的供应商将他们的设备连接到单个主机,以了解所有设备是否可以和平共存。USB-IF还授权一些私人实验室进行合规性测试。
合规性测试程序文档对测试进行了详细描述,包括响应标准请求、功耗和分配、信号质量和互操作性。互操作性测试使您能够模拟用户在连接了各种其他 USB 外围设备并与各种软件一起使用的系统上使用您的产品的体验。
您的设备应该正常运行,不会导致设备未检测到的错误或系统崩溃、挂起或重新启动。该设备不仅必须在仅包含您的设备的总线上通过测试,而且还必须在连接各种集线器和其他常见外设的总线上通过测试。
如果您的设备通过了合规性测试,则有资格显示 USB 徽标。为了获得该标志的资格,高速设备还必须全速运行。如果您不是 USB-IF 的会员,您还必须每两年缴纳 1,500 美元的徽标管理费。
对于连接到 PC 的设备,Microsoft 提倡 Windows 硬件质量实验室 (WHQL) 测试。这些测试使设备有资格显示 Microsoft Windows 徽标并包含在 Microsoft 的硬件兼容性列表中。Microsoft 还可能将该设备的驱动程序包含在其 Windows 驱动程序库中。
Microsoft 提供硬件和设备驱动程序的测试套件。您可以适用于您的设备的套件并运行测试。当您相信您的设备可以通过所有测试时,您可以向授权测试站点提交测试包。测试包包含设备、任何驱动程序和相关文件、测试日志和费用。
从设备调试
在设备端,调试与任何嵌入式系统中的调试非常相似。支持 USB 的微控制器供应商提供带有监控程序的开发系统,可以设置断点、单步执行、跟踪和其他诊断问题的工具。
USB 通信所需的固件支持量取决于控制器芯片的架构。来自芯片供应商或其他来源的良好示例固件也非常有帮助。
MCCI 有一个的 USB 资源编译器,可以帮助将设备描述符信息转换为 C 数据初始化结构,以便存储在设备的程序
存储器中。MCCI 还提供 USB DataPump 便携式固件包和安装实用程序。
专用开发套件的一种低成本替代方案是使用 PC 作为模拟 USB 设备,对终驻留在嵌入式设备中的代码进行初始测试。DeVaSys 的 USBLPT-PD11 板就是一个例子。该板包含飞利浦的 PDIUSBD11 USB 控制器。控制器的 I2C 接口与 PC 的并行端口进行通信。控制模拟设备的示例软件使用 Borland Turbo C for DOS。
通过这种方法,您可以编写 PC 应用程序来执行终控制设备的固件功能,包括在枚举期间发送描述符以及设备负责的其他任务。C 语言的 PC 软件在某种程度上可以移植到设备上。然而,每个控制器都有特定于芯片的操作,并且需要对终产品进行一些修改。
电缆调试
有时在主机和设备上进行调试是不够的。在主机上,您可以查看和控制的信息通过主机控制器及其驱动程序进行过滤。在设备中,固件看不到硬件管理的级别的通信。为了填补这个空白,您需要查看电缆中传输的内容。
如果您使用示波器或逻辑分析仪查看 USB 流量,您会发现读取这些位并不像将电压电平与逻辑电平匹配那么容易。总线上的数据使用不归零反转 (NRZI) 和位填充进行编码。这种编码使接收器能够与发送器保持同步,而无需发送时钟信号或每个字节的起始位和停止位的开销。
![](https://file3.dzsc.com/news/23/07/26/161041731.gif)
图 3 使用位填充的不归零反转 (NRZI) 编码
NRZI 没有将逻辑 0 和 1 定义为电压,而是将逻辑 0 定义为电压变化,将逻辑 1 定义为电压保持不变。图 3 显示了一个示例。每个逻辑 0 都会导致先前状态的变化。每个逻辑 1 都不会导致任何变化。这些位首先传输有效位 (LSB)。
需要位填充是因为接收器在转换上同步。如果数据全为 0,则存在大量转换。但如果数据包含一长串 1,则缺乏转换可能会导致接收器不同步。
如果数据有六个连续的 1,则发送器会在第六个 1 之后填充或插入一个 0(通过转换表示)。这可确保每 7 位至少有一个转换。接收器检测并丢弃六个连续 1 之后的任何位。随机数据的位填充开销仅为 0.8%,即每 125 个数据位 1 个填充位。
幸运的是,每一端的 USB 硬件都会完成所有编码和解码工作,因此设备开发人员和程序员不必为此担心。查看数据的方法是使用协议分析器来收集数据,然后将其解码并以有用的格式显示。您可以观察枚举过程中发生的情况,检测和检查协议和信号错误,查看任何传输中的数据,或专注于您想要的通信的任何方面。
连接到 USB 电缆的协议分析仪来源包括 Catalyst、Computer Access Technology、Crescent Heart Software、Data Transit、FuturePlus、Hitex、QualityLogic 和 Transdimension。显示主机中检测到的流量的纯软件分析器包括 Perisoft 的 BusHound 和软件 USB Snoopy。
![](https://file3.dzsc.com/news/23/07/26/161057465.gif)
图 4 使用协议分析仪捕获的总线流量
任何分析仪都会执行解码 USB 流量并显示结果的基本任务。产品的不同之处在于用户界面和显示信息的方式。并非所有分析仪都支持高速。图 4 显示了使用 Catalyst 的 SBAE-20 总线分析仪-练习器捕获的数据。用于控制分析仪和查看流量的用户界面可以是PC或逻辑分析仪。连接到 PC 的分析仪可以使用 USB、并行端口、以太网或 ISA 板连接。如果您拥有通用逻辑分析仪,连接到它的 USB 分析仪可能比其他选项更便宜。Crescent Heart Software 的分析仪连接到 Tektronix 的分析仪,FuturePlus 的分析仪连接到 Agilent 的分析仪。
测试设备和软件选项
在测试和调试中同样有用的是控制总线流量和信号的能力,超出了通过应用程序访问设备所能做到的范围。有些仪器也可以做到这一点。
Computer Access Technology 的流量生成器是对总线流量和事件提供控制的仪器的一个示例。您可以通过与运行其软件的 PC 的并行端口连接来控制流量生成器。您可以生成合法和非法消息以及总线条件,并且可以控制各个位的状态和位宽度。
Transdimension 的 USB 主机/设备练习器和 Catalyst 的 SBAE-20 既可用作协议分析器,也可用作可在总线上生成流量的主机。SBAE-20 的其他有用功能包括测量浪涌电流和挂起状态电流的能力。
RPM Systems 的 Root 1 USB 功能验证
适配器执行主机和根集线器的许多功能。Root 1 枚举连接的设备,并可以启动其他流量并执行各种测试,包括控制总线电压。
过去几年,随着新供应商进入市场以及现有供应商扩展和改进其产品,测试工具的数量和种类不断增加。随着 USB 设备的普及,这种趋势肯定会持续下去。
USB 调试的介绍到此结束。与任何开发项目一样,投资一些工具并学习如何很好地使用它们从长远来看可以节省您的时间和金钱。