USB技术在现场校验仪中的应用
扫描二维码
随时随地手机看文章
讨论通用串行总线(USB)技术应用于便携式电能表现场校验仪的可行性,并介绍了系统的硬件、固件、设备驱动程序以及应用程序的设计方法,最后给出了其性能测试结果。
现在市场上的同类产品多采用RS-232方式通讯,但这种产品已渐露弊端。首先,RS-232在当前微机规范中逐渐隐退。第二,现场校验产品已经朝着多功能的方向发展。已不单一的检查表误差,许多CT/PT负荷、二次压降、谐波分析、波形图、负荷曲线等功能都已经整合到现场校验产品当中。功能的增加意味着存储数据的急剧膨胀,而RS-232低的传输速率和难以保证通讯可靠性的特点决定了它不再是一个合适的解决方案。第三,采用RS-232方式的现校仪在和PC通讯的时候必须外加电源。
经过比较论证发现,USB作为近年出现的一种代表微机接口发展方向的新型总线规范,其便捷易用、速度快、可靠性高等特点,使之非常适合作为现校仪的接口。目前大多数台式计算机都具有四个以上的USB端口,笔记本电脑也都有两个以下的USB端口,USB规范规定每个端口提供5V、500mA的电量也恰好可以提供给现校仪而无须增加外接电源.
USB本身的控制协议较为复杂,需要使用相应的USB接口芯片。本设计采用了Philips公司的PDIUSBD12(简称D12),其优点是可以选择合适的微控制器及其开发系统进行外设开发。
D12内部集成了串行输入引擎(SIE)、320字节的多结构FIFO存储器、收发器以及电压调整器,支持DMA方式,采用双缓冲区技术,遵从USB1.1标准。芯片中串行输入引擎(SIE)模块起着至关重要的作用,完成所有USB协议层功能,如同步模式识别、并/串转换、位填充/解填充、CRC检验/产生、包PID产生/确认、地址识别、握手信号包响应产生等。另外,D12还集成了SoftConnect、GoodLink、可编程时钟输出、低频晶振和终端电阻等特性,提高了系统的性价比。
1.1引脚功能
PDIUSBD12的引脚排列如图1所示,功能如下:
VCC:接+5V电源;GND:接地;如要使器件工作在3.3V,则VCC、Vout3.3都为3.3V。DATA〈0〉~DATA〈7〉:双向数据总线。ALE:地址锁存使能。在多路地址数据总线中,下降沿关闭地址锁存;在单地址/数据总线配置中接地。CSN:片选端,低电平有效。SUSPEND:器件处于挂起状态,高电平有效。CLKOUT:可编程时钟输出。INTN:中断输出,低电平有效。RDN、WRN:读/写使能。DMREQ:DMA请求。DMACKN:DMA应答,低电平有效。EOTN:DMA传输结束,低电平有效;EOTN仅当DMACKN和WRN或RDN一起激活时才有效。RESETN:复位端,低电平有效;使用片内复位电路时接高电平。GLN:Goodlink LED指示器,低电平有效。XTAL1、XTAL2:晶振连接端,可采用外部时钟信号代替晶振。D+、D-:USB数据线。A0:A0=1选择命令指令,A0=0选择数据;该位在多路地址/数据总线配置时可接高电平。
1.2命令汇总
PDIUSBD12芯片中集成了串行输入引擎(SIE)模块,它完成所有USB协议层的功能、大大简化了USB的固件开发,开发人员只需使用D12提供的命令即可。D12命令如1表所示。
思达公司生产的电能表现场校验仪中使用P89C51RD2作为主控制器。P89C51RD2是Philips公司生产的51增强型的CPU,它除具备标准51的功能外,在片内集成了64KB FLASH和1KB RAM,可以在20MHz外频下以每机器周期为6个时钟周期的速度运行。P89C51RD2与PDIUSBD12的接口方法见图1。
由图可知P89C51RD2通过IO口同D12的片选、地址位信号相连,外部中断响应来自D12的中断请求,D12的操作地址可以任意指定。
所谓固件程序就是固化在程序存储器中的程序代码。本系统存储在P89C51RD2的Flash存储器中,固件开发使用Keil C51语言,开发平台为μVision2集成开发环境。
本设计参考了Philips公司提供的D12固件程序范例,对USB协议操作的相关代码直接移植使用,而数据采集、传输、存储等部分则自主开发。
固件程序结构如图2所示。硬件抽象层对D12的数据读、写以及各种指令的写入进行函数封装;D12命令接口层对D12的所有控制指令的函数进行封装;USB向量请求模块完成USB上电配置、向量请求等各类事件的响应处理;USB协议层包括对USB协议操作的封装以及对USB标准请求的响应;中断服务进程包括USB中断、ADC中断等。
当D12有事件需要处理时,将触发微控制器外部中断0,微控制器读取D12的中断状态寄存器,判断中断的来源并作出相应的处理。若由数据端点触发,则相应地读取或写入数据;若由控制端点0触发,则判断请求的类型。标准请求由USB协议处理模块处理,用户自定义向量请求由USB向量请求模块处理。
在Windows环境下,USB设备驱动程序遵循WDM(Win32 Driver Mode)方式。为了简化设计,并兼顾驱动程序的运行效率,笔者选用了DriverStudio2.7工具软件中的DriverWorks组件进行USB设备驱动程序的开发。DriverWorks为WDM设备驱动程序的开发提供了完善的支持。其中包含一个非常完善的源代码生成工具DriverWizard以及相应的类库和驱动程序范例,它还支持在C++下进行设备驱动程序的开发。通过DriverWizard生成的代码只需要进行少量的修改就可以使用,这使得驱动程序开发者可以将精力集中在驱动功能的实现上,而不必理会太多的WDM开发细节。
本设计在DriverWizard的最后自定义了四个IOCTL接口对USB设备进行控制,如表2所示。然后在自动生成的驱动程序代码中向相应的IOCTL函数添加代码,用函数BuildVerdorRequest构建USB协议的自定义向量请求(Vendor Request)。由编译修改后的源代码即可得到驱动程序文件McaD12.SYS。
我们已成功地将USB技术应用在一款现场校验产品上。测试仪器通过USB向PC传输的速率达到12~14kbyte/s。经过长期测试知,该通讯方式传输率高、容错性强,方便使用,整个开发过程获得了成功,并具有一定的创新性。对本系统编译稍加修改便可应用于其他基于微机的数据采集、自动化测控系统中。