摘要:介绍了基于SlaveFIFO模式的USB接口测量仪器的数据通信的原理,探讨了USBTMC协议及其子协议在某USB接口的港机设备诊断测量仪器中的实现过程。经验证,这种数据通信方法可使得基于USB接口的数据交互快速、高效,并可通过统一的VISA库函数方便快捷地为用户提供程控功能,具有较强的通用性。
关键词:USBTMC协议;SlaveFIFO;VISA;USB接口;测量仪器
引言
USB接口数据通信模块是基于USB接口程控的测量诊断类仪器的重要组成部分,须满足高速度、大数据量、高频率的数据传输。为了方便与其他仪器组系统时数据通信使用统一的接口,必须实现对VISA库的支持。为实现上述要求,USB数据通信方式采用了块传输和控制传输结合的模式,并实现了通用串行总线测试测量类协议(USBTMC)及其子协议(USBTMC-USB488),具有较高的实用性和通用性。
1USB接口数据通信过程
1.1SlaveFIFO模式的数据通信本文描述的某港机设备故障诊断仪器采用高性能低功耗的DSP芯片TMS320C6747作为主控芯片,采用小体积封装的Cypress公司CY7C68014A为USB控制芯片。考虑到对数据实时性要求以及程序升级等因素,USB功率探头采用了USB控制芯片内置CPU利用率很高的传输模式:SlaveFIFO。该模式使外部主机和DSP处理器读写端点FIFO缓冲区,不需要USB控制芯片内部的CPU干预,提高了数据传输效率。CY7C68014A通过CPLD与DSP的连接框图,如图1所示。本设计配置两个端点:端点2为OUT端点,用于接收主机发给DSP的命令数据;端点6为IN端点,用于接收DSP发给主机的测量和配置参数数据。FLAGA-FLAGD引脚用于标记FIFO的状态,本设计将FLAGA引脚配置为端点2的空标志,FLAGB引脚端点6的满标志。这些配置在USB控制芯片的固件程序中完成[1]。1.2USB通用协议分析USB通用协议定义了USB总线体系结构、USB数据流模型、USB总线机械特性、电器特性、协议定义、USB设备架构、编程接口以及其他设计所需要的特性。一个完整的USB系统分为主机、USB设备和主机与设备的连接3部分[2]。在本文中主机是连接港机设备故障诊断仪器的笔记本电脑,其主要作用是检测USB设备的插入拔出,管理数据流,对设备进行必要的控制,查询设备状态信息和对USB设备供电等。下述为一个USB系统完整的系统结构,如图2所示。
2USBTMC协议
USB通用协议格式可以实现通用基本的USB数据通信,但使用通用的协议需要用户安装自定义的设备驱动,不能与其他仪器测量设备方便地兼容。本设计采用的是专门针对测试测量仪器仪表的一类USB协议:USBTMC(USBTestandMeasurementClass)协议。一个完整的USB传输事务中,USBTMC协议的令牌阶段和握手阶段数据格式符合USB通用协议规范,但在数据阶段的数据包中增加了数据头。在BULK-OUT端点传输数据时,数据前要增加12位数据头[3],如表1所示。不同的MsgID值有不同的命令消息细节格式,BULK-OUT端点数据均为下行数据,即主机向USB控制器发送的数据,在USB功率探头系统中,多为主机向功率探头发送的程控命令数据。BULK-IN端点的数据格式与BULK-OUT端点类似,只是具体的数据位定义不同,在此不再累述。
3USB功率探头数据通信的实现
3.1固件程序USB固件程序存在于USB控制芯片的EEPROM中,它控制着USB通信的整个过程。在固件程序中通过设置芯片各个寄存器的值来配置芯片引脚、时钟、工作模式等。USB控制芯片的启动采用“重列举”的软配置模式,其列举过程如下:(1)调用用户初始设置函数TD_Init(),设置USB接口为未配置状态,使能中断。(2)在一段时间间隔内,若未收到SETUP令牌包,开始重新枚举设备。(3)一旦检测到SETUP令牌包,固件架构启动工作分配器,这个工作分配器按顺序重复执行如下工作:首先调用用户函数TD_Poll(),判断设备控制传输请求是否为未定的,如果不是,解析命令请求,加以响应。然后判断USB内核报告了USB中止事件,若确定中止调用用户函数TD_Suspend()。若返回成功,则测试回复事件,反之,将微处理器放入中止模式,当检测到回复事件时,调用TD_Resume()[4,5]。在固件程序中,定义了USB设备各种描述符来对USB设备进行配置。设备描述符定义了设备总体信息,其中的PID、VID的定义即为“重列举”过程中第二次列举到的信息。接口描述符定义了设备各个接口的特点,包括端点数量,使用的设备类和子类等,本设计中只定义了一个接口,3个端点,端点2为OUT端点,端点6为IN端点,端点1为中断IN端点。并且定义了接口使用设备类为USBTMC(代码0xFE)。3.2DSP端的实现DSP端完成了设备运行数据采集、运算等所有数据操作,设置单独的线程查询主机的程控命令。当主机有数据发送,DSP检测到FLAGA标志的置位,接收主机发送来的命令数据。当解析执行完命令,接收到返回数据命令之后,按USBTMC命令的BULK-IN数据头格式加载数据头,然后通过端点6发送给主机端。3.3主机端的数据发送若主机端采用Windows系列操作系统,且安装了支持USBTMC类设备的VISA库,插入USB诊断测量设备之后,系统将自动识别。用户只需要调用VISA提供的接口函数就可以对USB功率探头进行相关操作,这样,不同的硬件接口可以使用统一API函数调用。主机端应用程序调用VISA库控制仪器的基本流程如下:通过viFindRsrc()函数查询插在USB接口上的USBTMC设备。通过viOpen()函数打开USB功率探头。通过viWrite()函数、viRead()函数、viQueryf()函数进行程控命令发送、读取等操作。通过viClose()函数关闭设备。3.4实现效果与验证主机端安装了支持USBTMC的VISA库,系统自动将插入的USB诊断测量设备识别为USBTest&MeasurementClass设备,如图3所示。经测试,使用SlaveFIFO传输模式使得USB设备单次读数时间小于4ms,达到250读数/s的传输速率,完全满足了设备故障诊断仪器要求。
4总结
本文介绍了基于SlaveFIFO模式的USB数据传输过程并分析了USB通用协议,详细分析了USBTMC协议的数据格式,在此基础上实现了USB接口的数据通信。经验证,该方法满足了USB接口港机设备诊断测量仪器基大数据量、高频率、实时响应的要求河南职称,并从便捷性和兼容性上都取得了理想效果。
作者:耿增涛 杨杰敏 董占勇 单位:青岛港科技有限公司 中国电子科技集团公司第四十一研究所