USB设备的调试与测试技巧

发布者:JoyfulSerenade最新更新时间:2015-03-20 来源: eechina关键字:USB设备  调试  测试技巧 手机看文章 扫描二维码
随时随地手机看文章
USB是一种灵活的高速接口技术,可以替代计算机中原来的串行口和并行口,但灵活性高也意味着更加复杂,使得USB设计调试以及设计完成后的验证都比较困难。本文首先对USB规范做一简要介绍,然后详细讨论USB产品在调试与规范验证方面的一些实用技巧。

通用串行总线(USB)是一种很流行的接口,可用于那些与个人计算机进行通信的设备。近年来,所有新PC机和Mac机都支持USB技术,这种接口有足够的灵活性,既可用于驱动器和键盘之类的普通外围设备,也可用于定制按特殊用途设计的外设。此外USB还有一些对用户和开发人员都很有吸引力的特性,如从总线向设备提供电源、易于通过集线器进行总线扩展,以及主计算机对设备能自动识别等等。

但USB的超强性能也意味着它的接口要比它所替代的老式串行和并行接口都复杂,每个USB设备必须响应总线上的一系列标准请求和各种事件。大多数总线交流需要双向通信,而且延迟必须很小,总线上的数据都经过编码,单单只用示波器或逻辑分析仪观察不是很容易。工程技术人员可以选择不同的工具与技术或采用不同设计,简化并加快USB的开发和故障排除。

USB规范

                                              图1:Windows的设备管理器会显示出所有枚举成功的USB设备。

USB规范是由英特尔、微软和另外几个PC及外设公司共同提出的,在USB应用者论坛(USB-IF)的网站上提供了供开发人员使用的规范文本、相关信息及工具(详情可访问www.usb.org)。 

每个总线上有一个主控制器,用来控制与总线上面设备的通信。为了给设备提供更大带宽,一台计算机可以有多个主控制器,分别控制其自己的总线。

USB支持三种总线速度:低速1.5Mbps、全速12Mbps和高速480Mbps。高速模式是2000年发布的规范2.0版本新增加的, Windows XP是支持USB 2.0的第一个Windows系统,微软公司允诺在Windows 2000和Windows ME中对USB 2.0提供更新支持,而其它操作系统以后也将逐渐支持USB 2.0。

对于嵌入式PC操作系统,Windows CE也支持 USB。大多数Windows CE计算机作为USB主机使用,Windows CE 3.0中还包括用于Cypress/ScanLogic公司SL11主/从控制器的驱动程序。有了这些驱动程序(或者用于其它控制器的类似驱动程序),一个Windows CE计算机还可以作为USB外设使用。

USB的多功能性主要归功于它的4种传输类型,每一种类型适用于不同的用途。其中控制传输模式用于传输枚举过程中的请求,也用于发送请求至设备和接收答复(可选);中断传输模式用于键盘鼠标之类由主机定期发出请求和发送数据的设备;批传输模式用在诸如打印机和扫描仪之类的设备中,这类设备要求传输速度快,但在总线忙碌时传输数据可以等待;同步传输用于实时伴音和其他应用,这类应用对时序要求很高,但允许有偶尔的错误。

在自举或者当某个设备连接到总线上时,设备集线器就向主机报告连接情况,在一个称为枚举的过程中,主机发送系列请求以了解连接的设备并与之建立通信,设备则以所谓描述符数据结构返回应答信息。Windows的设备管理器将描述符内的信息与PC内部INF文档进行比较,从中找出最佳匹配,然后指定一个设备驱动程序,这样应用程序就能够访问该设备了。

所有设备必需遵循USB对功率管理的要求,包括限制设备吸收的总线电流和检测什么时候进入低功耗挂起状态,允许的电流量取决于器件描述符中的信息。

目前市面上有很多带USB功能的设备控制器芯片可供选用,有的是带一个USB口的微控制器,有的是非CPU控制器,上面带有一个USB口和一个用于与普通微控制器通信的串口或并口。大多数具有USB功能的微控制器都有C语言编译器,如果你熟悉某个微控制器系列,那么它提供的USB功能变量将非常有用。测试USB设备的通信功能包括几 个阶段,第一个目标是成功枚举,如果设备不能枚举,那么接口什么事也做不了。其它测试包括让设备执行预定的任务(例如读出或写入文档至一个USB设备),以及验证该设备是否遵循功率管理规则。 

                                                              图2:从集线器上收到的设备描述符代码。

USB通信调试可在三个位置进行,即在PC主机、设备和线缆等处,每个方案都有其自己的优点。

在主机上进行调试

在主机处,可以验证一个设备是否枚举成功并能执行预定的功能。在主机检测到问题后,要找到问题根源常常还需要检查设备本身硬件或线缆中的总线通信流量情况。

当USB设备连接到主机后, 

Windows的设备管理器 (图1)会进行快速检查,看设备枚举是否有问题。图标列表上的惊叹号表示与该设备通信或寻找驱动程序时有问题,而图标上的X号则表示设备存在但己不起作用。

为精确地看到主机在枚举时收到什么信息,可以使用USBCheck应用软件包或者新的USB指令验证器工具,USB-IF网站上免费提供了这两种工具。USBCheck能观察描述符、发送控制请求、观察结果以及在集线器和HID(拟人接口设备)上对设备做进一步测试。

USBCheck的设备框架测试能读出描述符并发送标准请求,这些测试作为初始检查非常有用,此时Windows从设备上检索到它所想要的信息。图 2显示了USBCheck从集线器接收到的设备描述码。主机对USB设备枚举成功后,应用软件可以按预定用途对设备进行测试,Windows设备驱动程序可通过组合API函数如ReadFile()、 WriteFile()或DeviceIoControl()等使应用软件访问USB设备。有些不同等级的设备还有额外支持,如应用软件能以访问其它驱动器的同样方法访问USB驱动器,应用软件不必了解驱动器是使用USB还是其它接口,因为这些细节在更低一级中进行处理。对于许多设备来讲,USB等级规范定义了设备的预定功能及固件响应,如HID、大容量存贮器件和用于静止图像捕获的设备等。

当出现错误时,Windows返回的错误信息通常提供不了太多帮助。例如向HID类设备发送WriteFile()函数失效时,返回的错误一般是 “CRC Error”,而造成传输失效的任何固件问题都会得到这个错误信息。通常排查错误要是从CRC计算着手基本上是找不到什么的,跟踪这类问题出现的原因常常需要在设备或总线上进行调试。

认证测试USB应用者论坛和微软公司可为USB设备和主机软件开发人员提供测试,通过测试的产品可以在上面使用USB标识或者Microsoft Windows标识。[page]

为了能在多种条件下彻底测试产品,USB-IF成员可以将自己的设备在USB-IF指定的认证程序中进行登记,一年登记费用为2,500美元,其中包括程序运行费用,以及其它支持USB产品开发和在市场上推广USB活动的费用。当某个设备符合认证程序的标准时,USB-IF将认为该设备“测量结果可以接受”,然后会把它加到认证设备总表中。在收到签署的许可协议和付款后,USB-IF将授权这一设备可以使用USB标识。

认证程序有两项评判标准,分别是检查对照表和认证测试。检查对照表包括一些与产品及其功能有关的问题,检查表可以提供给供应商,外围设备、集线器、带USB主机系统和线缆等不同供应商有不同的对照表,有些产品还需要多个检查表。外围设备检查表覆盖了机械设计、设备状态与信号以及工作电压和功耗,每个问题都相应附有标准规范中的对应页面作为参考,可以从中找到更多信息。从USB-IF的网站上可得到这些检查表。

图3:带位填充的不归零倒置编码。 为帮助通过电气测试,USB-IF还提供了一个USBHSET工具,其中含有软件和测试步骤。另外也可以使用专业测试服务咨询机构VI Engineering的USB预认证测试仪,这是一个硬件单元,能执行测试文件中的所有电气测试,其中包括在LabView下运行的软件,可以观察到眼图、上升与下降次数、截面电压、浪涌电流及其它更多内容。

为帮助验证USB规范第八章中所讨论协议的响应情况,位于比利时的PIMC公司提供了一个名为Ch8ck的工具。Ch8ck执行的测试包括向并不支持的方向或者传输类型发送一个信息包ID,然后检查中断端点的响应,以及要求CRC值时的位填充情况。当认为产品能通过检查表上各项内容时,就可以准备进行认证测试了。USB-IF对一些机构提供资助,可以用不同类型的硬件测试设备,每个机构都有很多供应商和产品。你可以与主机硬件供应商一起安排专门测试,也可以参与USB-IF的“plugfests”测试,这个测试将有尽可能多的供应商把他们的设备连到一台主 
机上,观察所有设备 是否可以相互和平共处。USB-IF也授权一些私人实验室进行认证测试。

认证测试程序文件对测试有详细描述,包括对标准请求的响应、功率的消耗和分配、信号质量和协同性等。其中协同性测试将你的产品与其它多个USB外围设备连在一个系统中并使用多种软件,以模拟用户使用情况。

设备应该工作正常,不会出现任何设备检测不到错误或者系统崩溃、死机或重新自举等错误。设备不仅要在一条只连接一个设备的总线上通过测试,而且也应该在一条连有多种集线器和其它通用外围设备的总线上通过测试。

如果设备通过认证测试,就有资格使用USB标识,为取得标识使用权,高速设备还必须在全速模式下测试所有功能。此外非USB-IF成员还须支付额外一项管理费,数额为每两年1,500美元。

对于连接在PC上的设备,微软公司鼓励采用Windows硬件质量实验室(WHQL)的测试方案,通过这些测试的设备可以使用 Microsoft Windows标识,并将列入到微软公司的硬件兼容表中,同时微软公司也会将设备的驱动程序加入到Windows驱动程序库中。

微软公司提供了用于硬件和设备驱动程序的测试组件,你可以下载所需组件并对你的设备进行测试。当你相信你的设备能够通过所有测试时,就可以提交一份材料给授权的测试机构,材料中应包括设备、驱动程序和相关文档、测试记录以及相应的费用。在www.microsoft.com/hwtest网站中可以找到有关WHQL的更多信息。

在设备上进行调试

在设备上的调试与任何嵌入式系统调试类似,提供带USB功能微控制器的供应商同时也提供了带监控程序的开发系统,监控程序可以设置断点、单步运行、跟踪模式和其它自诊断工具。

USB通信所需的固件支持数量取决于控制器芯片的结构,从芯片供应商或其它地方获得高品质固件也很重要。

MCCI公司有一个免费的USB资源编辑器,有助于将设备描述符信息翻译成C语言的数据初始化结构,并将其存在设备的程序存储器中,MCCI还提供了USB DataPump便携式固件包和安装实用程序。

                                                               图4:协议分析仪采集到的总线通信数据。

用PC作为模拟的USB设备是专用开发组件的一个低成本替代方案,可对最终驻留在嵌入式设备中的代码进行初始测试。如DeVaSys公司的USBLPT-PD11板,上面带有飞利浦PDIUSBD11 USB控制器,控制器的I2C接口与PC并口进行通信,软件使用DOS版Borland Turbo C语言控制被仿真设备。

使用这一方法,你可以编写PC应用,使最终控制设备的固件执行一些功能,包括在设备枚举和响应其它任务时发送描述符。C语言编写的PC软件对设备是可移植的,不过每个控制器都有芯片专用操作,因此针对最终产品还需要作一些修改。
在线缆上进行调试

有些时候,仅仅在主机和设备上进行调试还不够。在主机上,能够观察和控制的信息要经过主机控制器及其驱动程序过滤;而在设备上,固件又看不到硬件管理的底层通信。为填补这一空白,需要观察线缆中发送的是什么。

如果用示波器或逻辑分析仪来观察USB通信,你将会发现读取位的状态并不像将电压与逻辑电平匹配那么容易。在总线上的数据是用带有位填充的不归零倒置(NRZI)代码进行编码的,这种编码能使接收器与发送器保持同步,不需要每个字节都发送时钟信号或开始与结束位等额外的工作。

NRZI不是采用电压方式定义逻辑0和逻辑1,而是用电压改变代表逻辑0,电压保持不变代表逻辑1。如图3所示,每个逻辑0都会使前面一个状态发生改变,而每一个逻辑1则不发生状态改变,数据首先发送最低有效位。

之所以要用位填充是因为接收器在切换时要同步,如果数据全部为0会有许多转变, 但如果数据中有一长串1,由于缺少转变会使接收器失去同步。

例如数据有6个连续的1,发送器就在第6个1后面填充或插入一个0(用一个切换来表示),这样就保证每7个位至少有一个转换,接收器检测到每6个连续1以后的任意位都会丢弃掉。随机数据的位填充开销仅为0.8%,即每125个数据位有1个填充位。

幸运的是,每个端口的USB硬件会进行所有编码和解码工作,所以设备开发人员和编程人员不必担心这一点。观察数据的最好方法是使用协议分析仪,这种分析仪可收集数据,然后进行解码并以有用的格式显示出来。你可以看到在枚举时发生了什么,检测和检查协议及信令错误,观察任何传输中的数据,或者关注通信中你所希望的任何方面。

任何分析仪都可以执行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设备  调试  测试技巧 引用地址:USB设备的调试与测试技巧

上一篇:R&S和CCI推出LTE安装与维护测试综合解决方案
下一篇:是德科技与中国移动演示下一代 5G 无线通信系统

推荐阅读最新更新时间:2024-03-30 22:55

基于CAN的程序下载器与通讯调试器设计
在电子产品的各种通讯方式中,CAN(Controller Area Network)总线以其高可靠性、实时性、传输距离远的特点得到广泛的应用,已经成为许多高档汽车(如奔驰、宝马等)车电系统的总线标准。于是出现了许多内部集成CAN控制器的单片机,如Atmel公司的T89C51CC0X系列单片机就是其中性价比较高的一款,它具有丰富的内部资源,支持CAN方式的在线编程。我们在使用此系列产品的过程中,针对其应用普遍但编程器较少的特点,开发了一款基于T89C51CC01CA芯片的CAN程序下载和CAN节点调试器,它既能对同类单片机进行编程,又能通过CAN总线对具有CAN通讯功能的设备进行调试。 2. 系统结构框图 2.1  系统原理框图。如图
[嵌入式]
基于Proteus的嵌入式应用系统仿真中的源码调试
0 引 言     Proteus是功能最强的嵌入式系统(单片机、ARM等)的设计与仿真平台。它主要由Proteus VSM(Virtual System Model)和PCB设计构成。ProteusVSM的最大特色就是能对嵌入式系统(硬、软件)及其外围电路进行协同、动态、交互式的仿真,并提供了仿真中进行源码调试的三种方式。     Proteus源码调试综合并突破了传统硬件仿真器和软件集成开发环境(Integrated Development Envi-ronment,IDE)源码调试功能。不仅能跟踪、分析嵌入式系统内的指令执行,观察、改变存储单元内容等的调试;且从工程角度实现了过程与结果,硬件与软件,全速与跟踪,中断与
[嵌入式]
Keil5(MDK5)在调试(debug)过程中遇到的问题
参考原子哥教程 使用开发板:STM32F103RC Keil5(MDK5)在调试(debug)过程中崩溃(IDE已停止运行) http://blog.csdn.net/qq_33259138/article/details/70224581 现象是程序编译下载都没有问题,开始Debug调试之后,只要进入C源代码文件,立即崩溃。 在论坛上找到一种解决办法,将你的工程拷出来,发到一个短路径文件夹下,再次编译,崩溃就没有了。 按论坛里大神说法是,Debug调试程序路径不能超过170个字节。 http://www.openedv.com/posts/list/52892.htm
[单片机]
Keil5(MDK5)在<font color='red'>调试</font>(debug)过程中遇到的问题
弯管流量计如何调试
弯管流量计广泛应用于电力、热力、冶金、钢铁、石油、化工、机械、纺织、造纸、制药、食品加工、公用事业等部门的液体、气体和蒸汽的流量测量,它是由弯管传感器、差压变送器、压力变送器、温度变送器以及二次仪表配套组成的测量系统。那么液体、气体弯管流量计应如何调试呢? 1、排污:a、三阀组两侧阀关闭,中间阀打开,然后打开排污阀彻底排污,保证导压管内无杂质并充满测量介质。 b、打开差压变送器后部排气阀放气,使膜盒内也充满测量 介质 2、调零:在三阀组两侧阀关闭,中间阀打开状态下测量静态零点电流信号,通过零点旋钮(Z)将其调整为4.000mA 3、投运:三阀组两侧阀打开,中间阀关闭,系统投入运行即可。
[测试测量]
基于HARQ的TD-LTE基站性能测试技巧
0 引言 LTE(Long Term Evolution长期演进)技术是第三代移动通信演进的主要方向。作为一种先进的技术,LTE系统在提高峰值数据速率、小区边缘速率、频谱利用率、控制面和用户面时延以及降低运营和建网成本等方面拥有巨大的优势。同时,LTE系统与现有系统(2G/2.5G/3G)能够共存,并且实现平滑演进。 LTE系统按照双工方式分为频分双工(FDD)和时分双工(TDD)两种。其中LTE-TDD制式相对于FDD制式具有频谱利用灵活、支持非对称业务等诸多优势,是中国通信业界力推的国际标准。 系统吞吐率是衡量TD-LTE基站综合性能的重要指标。吞吐率的测试需要基站(eNB)与测试仪器(模拟UE)之间实现实时反馈并动态
[测试测量]
基于HARQ的TD-LTE基站性能<font color='red'>测试</font><font color='red'>技巧</font>
单片机开发调试应注意的问题
1、使用总线不外引的单片机 是最正统的单片机使用模式 符合小型、简单、可靠、廉价的单片机设计初衷 总线封闭的产品最可靠 2、使用单片机C语言编程 * C语言是简洁、高效、而又最贴近硬件的高级编程语言 * 90年代初单片机C语言就已成熟为专业水平的高级语言,不应再有顾虑 * 当前厂商在推出新的单片机产品时纷纷配套C语言编译器 3、使用中、高档的单片机仿真工具 * 只有中、高档仿真工具才能仿真总线封闭式的单片机 * 仿真器必须使用band-out chip或hooks chip
[工业控制]
介绍几种单片机打印调试信息的方法
单片机作为一种嵌入式系统,通常需要在开发过程中进行调试和输出调试信息,以便开发者能够及时发现问题并进行解决。本文将介绍几种常用的单片机打印调试信息的方法。 1. 串口输出 串口输出是最常用的单片机打印调试信息的方法。单片机通过串口发送数据到计算机,然后在计算机上进行接收和显示。需要注意的是,单片机和计算机之间需要使用串口线进行连接,同时还需要设置波特率、数据位、停止位等参数。 在单片机的程序中,可以使用printf函数将需要输出的调试信息发送到串口。例如,下面的代码片段可以将一个整数值输出到串口: ```c #include stdio.h #include string.h int main() { int num =
[单片机]
介绍几种单片机打印<font color='red'>调试</font>信息的方法
Wi-Fi产品射频电路调试经验及问题分析
    1 前言     这份文档总结了我工作一年半以来的一些射频(Radio Frequency)调试(以下称为Debug)经验,记录的是我在实际项目开发中遇到并解决问题的过程。现在我想利用这份文档与大家分享这些经验,如果这份文档能够对大家的工作起到一定的帮助作用,那将是我最大的荣幸。     个人感觉,Debug过程用的都是最简单的基础知识,如果能够对RF的基础知识有极为深刻(注意,是极为深刻)的理解,我相信,所有的Bug解起来都会易如反掌。同样,我的这篇文档也将会以最通俗易懂的语言,讲述最通俗易懂的Debug技巧。     在本文中,我尽量避免写一些空洞的理论知识,但是第二章的内容除外。“微波频率下的无源器件”这
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新测试测量文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved