基于USB总线和Aduc831单片机的数据采集系统的设计
扫描二维码
随时随地手机看文章
由于信息网络化的发展,经常需要将各种设备与主机相连,传统的外设与主机的通讯接口一般是基于PCI总线、ISA总线或者是RS-232C串行总线。 PCI总线虽具有高的传输速度(132Mbps),支持"即插即用"功能,但其缺点是插拔麻烦,且扩展槽有限(一般为5~6个)。ISA总线显然存在着同样的问题。RS-232C串行总线虽然连接简单,但其缺点是传输速度慢(56kbps). 而通用串行总线(Universal Serial Bus,简称USB)的出现能很好地解决以上这些冲突。我们利用新型高性能单片机Aduc831设计了基于USB总线的数据采集系统。
1. USB简介
1.1 USB特点
USB的英文全称为Universal Serial Bus,它是一种快速、双向、同步传输的廉价的并可以进行热拔插的串行接口。它的特点主要有:
1)速度快。USB有高速和低速两种方式,主模式为高速模式,速率为12Mbps,另外为了适应一些不需要很大吞吐量和很高实时性的设备,如鼠标等,USB还提供低速方式,速率为1.5Mb/s。
2) 设备安装和配置容易。安装USB设备不必再打开机箱,加减已安装过的设备完全不用关闭计算机。所有USB设备均支持热插拔,且易于扩展。
3) 使用灵活。USB共有4种传输模式:控制传输(control)、同步传输(Synchronization)、中断传输(interrupt)、批量传输(bulk),以适应不同设备的需要。
1.2 USB总线协议
USB总线属一种轮讯方式的总线,主机控制端口初始化所有的数据传输。
每一总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输运作的种类、方向,USB设备地址和终端号的USB数据包,这个数据包通常称为标志包(token packet)。USB设备从解码后的数据包的适当位置取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包来标志数据的传输方向,然后发送端开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的 USB数据传输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道与数据带宽、传送服务类型,端口特性(如方向和缓冲区大小)有关。多数通道在USB设备设置完成后即存在。USB中有一个特殊的通道——缺省控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、查询状况和输入控制信息提供一个入口。
2. 硬件设计
2.1 Aduc831简介
ADuC831 是一个完全综合的247 k采样保持数据采集系统,在同一片中 结合了高性能的自校准12位 ADC 多路通道,双12位 DAC通道和可编程8位 MCU。微处理器核心是 8052,提供片内 62 kB 非易失性闪速/电擦除程序存储器。还提供片内 4 kB 非易失性闪速/电擦除数据存储器、256 b RAM 和2 kB 扩展 RAM。
ADuC831 还提供额外的电源监视器, 和一个高精度参考源。片内数字外围设备包括2个16位Σ-Δ DAC, 双输出16位 PWM,看门狗定时器, 定时间隔计数器,3个定时器/计数器, 定时器 3用于波特率产生核 串行接口 I/O (I2C, SPI 和UART) 。
并且片内提供串行下载和调试模式 (通过 UART), 并且通过EA引脚提供单引脚竞争模式。ADuC831 支持 QuickStart™ 和 QuickStart Plus 升级系统和低成本的软件和硬件工具。
2.2 USBN9603简介
USBN9603是一个集成的USB端点控制器,具有增强的DMA功能。USBN9603集成了一个带有3.3V的调节器的收发器,1个SIE(串行接口引擎),1个8 b并行接口,1个时钟发生器和1个MICROWIRE/PLUS接口。USBN9603可以进行7个端点的数据传输,除了1个端点必须为控制传输端点以外,其他的6个端点可以被配置成中断传输端点、批量传输端点或者等时传输端点;每一个端点都有一个专门的FIFO,控制端点的FIFO长度为8B,其他的为64B。8 b并行接口可以支持多路复用或者非多路复用2种与CPU的接口方式。USBN9603的突出特点为:低EMI(电磁干扰),低等待电流,24M晶振,增强的DMA功能;可使用5V或3.3V电源;总线操作具有异步唤醒的全速静态HALT模式;改进的3.3V电压输入的电压调节器,所有非双向端点都有64B 的FIFO;外部控制器接口简单,编程方便。
2.3 原理图设计
USB数据采集系统硬件模块主要由Aduc831芯片、USB接口芯片USBN9603组成。硬件结构简单,硬件总体结构框图如图1所示.
模拟输入信号A/D转换器,转换结果存储在FIFO存储器中;一旦FIFO存满,SIE立刻对数据进行处理,然后Aduc831系统将数据从FIFO存储器中读出,由收发器通过数据线(D+、D-)送至主机。
当USB控制器从USB总线检测到主机启动的某一传输请求后,通过中断方式将此请求通知Aduc831系统,Aduc831系统通过访问USB控制器的状态寄存器和数据寄存器获得与此次传输有关的各种参数,并根据具体的传输参数,对USB控制器的控制寄存器和数据寄存器进行相应的操作,以完成主机的传输请求。Aduc831与USBN9603接口电路如图2所示。
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;
}
即插即用管理模块用来实现USB设备的热插拔及动态配置。当硬件检测到有USB设备接入时,Windows98查找响应的驱动程序,并调用它的 DriverEntry例程。PnP(即插即用)管理器调用驱动程序的AddDevice例程,告诉它添加了一个设备。在此处理过程中,驱动程序收到一个设备启动请求(IRP_MN_START_DEVICE)的IRP。同理,当要拔除时,PnP管理器会发出一个设备删除请求(IRP_MN_REMOVE_DEVICE)的IRP,由驱动程序进行处理。通过对这些PnP请求的处理,可支持设备的热插拔和即插即用功能。
电源管理模块负责设备的挂起与唤醒。
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为计算机外设输入输出提供了新的接口标准。它使设备具有热插拔,即插即用,自动配置的能力,并标准化设备连接, 还可与MAX485结合起来实现数据的远程采集。该系统具有可靠性高、性价比高和多点采集等优点。而USB2.0标准具有更高的传输速率,更具有美好的应用前景。
参考文献:
1. Aduc831 datasheet. Analog device.
2. USB1.1. Universal serial bus specification S.
3. 张念淮、江浩.《USB总线接口开发指南》 国防工业出版社.