图2 固件程序的总体流程
1)设备识别。USB设备的识别过程分别由操作系统和设备驱动两个部分通过USB协议的标准设备请求来完成。操作系统在USB设备连接时加载设备驱动程序并分配通信地址,驱动程序启动后通过中断读取相关描述符进行资源配置并使能传输端点,从而为应用程序提供接口。
2)数据采集与传输。通过单片机的定时器可对数据的采集频率进行设置。本系统的数据采集频率为1 000 Hz,因此设置定时器每一毫秒中断一次进行数据采集,而主机端对USB设备的读写操作则通过外部中断实现,定时器中断优先级高于外部中断以保证采集频率固定为1 000 Hz.主机端通过写操作向USB设备发送控制信息,包括设备启动和停止的相关初始化与清理的工作,其中在对USB设备进行读操作前要先在端点的缓冲区填写64字节数据并通过命令使其有效,不然主机端对USB设备进行读操作时,无效的缓冲区将导致PDIUSBD12芯片不会产生中断,从而导致读操作失败。
2 驱动程序设计
Windows CE下的USB设备驱动模型由3个层次组成,其中由操作系统实现的有两层,它们分别是HCD模块(USBHoST Controller Driver)和USBD模块(USB Bus Driver),而第三层则被称为USB客户端驱动(USB Client Driver),由驱动开发人员实现。HCD模块处于最底层,是CPU中USB控制器的驱动,为USBD模块提供底层的功能访问服务。USBD模块处于HCD模块的上层,它根据HCD模块提供的功能设计USB驱动接口函数,并提供给第3层使用。USB客户端驱动处于USB驱动模型的最顶层,也是本文所要设计的USB驱动程序,它向上为应用程序提供接口以方便对USB设备进行控制,向下利用USBD模块提供的接口函数传递控制信息和数据。因此,要成功开发USB设备的驱动程序,在操作系统定制的时候就需要把HCD和USBD的相关组件添加进去。
本文开发的USB设备驱动程序是流接口形式的驱动程序,它被设计用来与通常的文件系统API(如CreateFile、ReadFile和WriteFile等)进行通信,应用程序通过对文件系统的操作来完成对设备的控制。本驱动所设计的流接口如表1所示。
表1 驱动所设计的流接口
3 系统测试
3.1 测试条件与结果
本测试的目的在于检验本文设计的数据采集系统能否在采集频率较高的情况下准确地采集数据,并通过USB接口完整地进行数据传输。因此,测试将基于以下5个条件进行。其中一个通道的部分测试数据结果如图3所示。