基于USB总线和Aduc831单片机的数据采集系统的设计
3. 系统软件设计
系统软件主要包括:控制程序和USB设备驱动程序。
3.1 控制程序
控制程序就是指在Aduc831中运行的程序,对USB控制器的操作是严格按照USB协议1.1进行的。在实际开发中使用了控制传输和块传输两种传输方式。控制传输主要用来完成主机 对设备的各种控制操作,也就是用来实现位于主机上的USB总线驱动程序 (USBD.SYS)以及编写的功能驱动程序对设备的各种控制操作。块传输主要用来完成主机和设备间的大批量数据传输以及对传输数据进行错误检测(若发生错误,它支持"重传"功能)。
控制程序主要功能有控制A/D采样, 控制USBN9603接受并处理USB驱动程序的请求及应用程序的控制指令。因为Aduc831带有串口下载功能,所以可以很方便的通过串口将程序下载到Aduc831中,不用仿真机,不用传统的方法向EEPROM中烧制程序,所以调试起来非常方便。控制程序流程、中断处理程序如图3、4所示。
3.2 USB设备驱动程序设计
USB设备驱动程序基于WDM。WDM
型驱动程序是内核程序,与标准的Win32用户态程序不同。采用了分层处理的方法, 较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由两部分组成:较高级的通用串行总线模块(USBD)和较低级的主控制器驱动程序模块(HCD)。USB设备驱动程序不必具体对硬件编程,所有的USB命令、读写操作通过总线驱动程序转给USB设备。但是,USB设备驱动程序必须定义与外部设备的通讯接口和通讯的数据格式,也必须定义与应用程序的接口。Windows 98/2000提供了一系列的系统驱动程序,他们具有为许多标准类型设备服务所需的所有基本功能,用户按照提示可以定义设备的配置和功能,然后做功能的修改即可。可以把USB设备驱动程序的功能划分成4个不同的模块来实现:初始化模块、即插即用管理模块、电源管理模块以及I/O功能实现模块。初始化模块提供1个入口函数DriverEntry(),在DriverEntry中,需要提供一个AddDevice例程,把驱动程序添加到驱动程序堆栈中去。另外,所有对各种IRP(I/O请求包)的处理例程都在此入口函数中作为定义。
DriverEntry(IN PDRIVER_OBJECT DriverObject,…) //驱动程序入口
{
DriverObject->DriverExtension->AddDevice=USBAddDevice;
DriverObject->DriverUnload=USBUnload;
DriverObject->MajorFunction[IRP_MJ_READ]=USBRead;
DriverObject->MajorFunction[IRP_MJ_WRITE]=USBWrite;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBDeviceControl;
RegisterForPnpNotification(DriverObject);
return status;
}
功能。
电源管理模块负责设备的挂起与唤醒。
I/O功能实现模块完成I/O请求的大部分工作。若应用程序想对设备进行I/O操作,它便使用Windows API函数,对WIN32子系统进行WIN32调用。此调用由I/O系统服务接收并通知I/O管理器,I/O管理将此请求构造成一个合适的I/O请求包(IRP)并把它传递给USB设备驱动程序。USB设备驱动程序接收到这个IRP以后,根据IRP中包含的具体操作代码,构造相应的USB请求块并把此 URB(USB请求块)放到一个新的IRP中。然后,把此IRP传递到USB总线驱动程序,USB总线驱动程序根据IRP中所含的URB执行相应的操作(如从USB设备读取数据等),并把操作结构通过IRP返还给USB设备驱动程序。USB设备驱动程序接收到此IRP后,将操作结果通过IRP返还给 I/O管理器。最后,I/O管理器将此IRP中操作结果返还给应用程序,至此应用程序对USB设备的一次I/O操作完成。
结束语:
USB为计算机外设输入输出提供了新的接口标准。它使设备具有热插拔,即插即用,自动配置的能力,并标准化设备连接, 还可与MAX
485结合起来实现数据的远程采集。该系统具有可靠性高、性价比高和多点采集等优点。而USB2.0标准具有更高的传输速率,更具有美好的应用前景。
参考文献:
1. Aduc831 datasheet.Analog device.
2. USB1.1.Universal serial bus specification S.
3. 张念淮、江浩.《USB总线接口开发指南》 国防工业出版社.
即插即用管理模块用来实现USB设备的热插拔及动态配置。当硬件检测到有USB设备接入时,Windows98查找响应的驱动程序,并调用它的 DriverEntry例程。PnP(即插即用)管理器调用驱动程序的AddDevice例程,告诉它添加了一个设备。在此处理过程中,驱动程序收到一个设备启动请求(IRP_MN_START_DEVICE)的IRP。同理,当要拔除时,PnP管理器会发出一个设备删除请求(IRP_MN_REMOVE_DEVICE)的IRP,由驱动程序进行处理。通过对这些PnP请求的处理,可支持设备的热插拔和即插即用