基于USB总线的实时数据采集系统设计与实现
发布时间:2008/6/3 0:00:00 访问次数:464
摘要:介绍了基于usb总线的实时数据采集系统的usb设备固件程序、驱动程序、应用程序的设计与具体实现。
关键词:通用串行总线 实时数据采集 设备固件 驱动程序
在现代工业生产和科学技术研究的各行业中,通常需要对各种数据进行采集。目前通用的通过数据采集板卡采集的方法存在着以下缺点:安装麻烦,易受机箱内环境的干扰而导致采集数据的失真?熏易受计算机插槽数量和地址、中断资源的限制,可扩展性差。而通用串行总线usb(universal serial bus)的出现,很好地解决了上述问题,很容易实现便捷、低成本、易扩展、高可靠性的数据采集,代表了现代数据采集系统的发展趋势。
1 系统硬件设计与实现
1.1 硬件总体结构
基于usb总线的实时数据采集系统硬件组成包括模拟开关、a/d转换器、单片机、usb接口芯片,其硬件总体结构如图1所示。多路模拟信号经过模拟开关传到a/d转换器转换为数字信号?熏单片机控制采集,usb接口芯片存储采集到的数据并将其上传至pc,同时也接收pc机usb控制器的控制信息。
1.2 pdiusbd12芯片
usb接口芯片采用philips公司的一种专用芯片pdiusbd12(以下简称d12)。该芯片完全符合usb1.1规范,集成了sie、320b的多配置fifo存储器、收发器、电压调整器、softconnect、goodlink、可编程时钟输出、低频晶振和终端电阻等,支持双电压工作、完全自动dma 操作、多中断模式,内部结构如图2所示。
单片机通过8位并行接口传送经过a/d转换的采集数据,存储在fifo存储器中。一旦存满,串行接口引擎sie立刻对数据进行处理,包括同步模式识别、并/串转换、位填充/不填充、crc校验、pid确认、地址识别以及握手鉴定,处理完毕后数据由模拟收/发器通过d+、d-发送至pc。上述过程遵循usb1.1协议。d12与89c51的具体实现电路如图3所示。
2 系统软件设计与实现
系统软件包括usb设备固件编程、驱动程序和应用程序。其中设备固件是整个系统的核心,它控制芯片d12采集数据、接收并处理usb驱动程序的请求和应用程序的控制指令。
2.1 usb设备固件程序设计与实现
设备固件是设备运行的核心,用c语言设计。其主要功能是控制a/d模块的数据采集;接收并处理驱动程序的请求,如请求描述符、请求或设置设备状态、请求设备设置、请求或设置设备接口等usb1.1标准请求;控制芯片d12接收应用程序的控制指令等。其程序主框图如图4所示。单片机检测到d12后进入主循环。此时pc机先发令牌包给d12,d12接收到令牌包后给单片机发中断,单片机据中断类型设定标志位status;最后执行相应标志位的中断服务程序。单片机通过a/d模块的中断入口控制a/d模块的数据采集。
2.2 驱动程序设计与实现
usb系统驱动程序采用分层结构模型:较高级的usb设备驱动程序和较低级的usb函数层。其中usb函数层由通用串行总线驱动程序模块(usbd)和主控制器驱动程序模块(hcd)组成。
图3 pdiusbd12与89c51的具体实现电路
为使驱动程序具有通用性,也为简化应用程序的开发,编写了供应用程序调用的动态链接库。这样应用程序只需调用此库提供的接口函数即可完成对usb设备的操作。usb函数层(usbd及hcd)由windows98提供,负责管理usb设备驱动程序与usb控制器之间的通信、加载及卸载usb驱动程序等。目前windows98提供的多种usb设备驱动程序并不针对实时数据采集设备,因此采用ddk开发工具设计专用的设备驱动程序。其由四个模块组成:初始化模块、即插即用管理模块、电源管理模块以及i/o功能实现模块。
初始化模块提供一个driverentry入口点
摘要:介绍了基于usb总线的实时数据采集系统的usb设备固件程序、驱动程序、应用程序的设计与具体实现。
关键词:通用串行总线 实时数据采集 设备固件 驱动程序
在现代工业生产和科学技术研究的各行业中,通常需要对各种数据进行采集。目前通用的通过数据采集板卡采集的方法存在着以下缺点:安装麻烦,易受机箱内环境的干扰而导致采集数据的失真?熏易受计算机插槽数量和地址、中断资源的限制,可扩展性差。而通用串行总线usb(universal serial bus)的出现,很好地解决了上述问题,很容易实现便捷、低成本、易扩展、高可靠性的数据采集,代表了现代数据采集系统的发展趋势。
1 系统硬件设计与实现
1.1 硬件总体结构
基于usb总线的实时数据采集系统硬件组成包括模拟开关、a/d转换器、单片机、usb接口芯片,其硬件总体结构如图1所示。多路模拟信号经过模拟开关传到a/d转换器转换为数字信号?熏单片机控制采集,usb接口芯片存储采集到的数据并将其上传至pc,同时也接收pc机usb控制器的控制信息。
1.2 pdiusbd12芯片
usb接口芯片采用philips公司的一种专用芯片pdiusbd12(以下简称d12)。该芯片完全符合usb1.1规范,集成了sie、320b的多配置fifo存储器、收发器、电压调整器、softconnect、goodlink、可编程时钟输出、低频晶振和终端电阻等,支持双电压工作、完全自动dma 操作、多中断模式,内部结构如图2所示。
单片机通过8位并行接口传送经过a/d转换的采集数据,存储在fifo存储器中。一旦存满,串行接口引擎sie立刻对数据进行处理,包括同步模式识别、并/串转换、位填充/不填充、crc校验、pid确认、地址识别以及握手鉴定,处理完毕后数据由模拟收/发器通过d+、d-发送至pc。上述过程遵循usb1.1协议。d12与89c51的具体实现电路如图3所示。
2 系统软件设计与实现
系统软件包括usb设备固件编程、驱动程序和应用程序。其中设备固件是整个系统的核心,它控制芯片d12采集数据、接收并处理usb驱动程序的请求和应用程序的控制指令。
2.1 usb设备固件程序设计与实现
设备固件是设备运行的核心,用c语言设计。其主要功能是控制a/d模块的数据采集;接收并处理驱动程序的请求,如请求描述符、请求或设置设备状态、请求设备设置、请求或设置设备接口等usb1.1标准请求;控制芯片d12接收应用程序的控制指令等。其程序主框图如图4所示。单片机检测到d12后进入主循环。此时pc机先发令牌包给d12,d12接收到令牌包后给单片机发中断,单片机据中断类型设定标志位status;最后执行相应标志位的中断服务程序。单片机通过a/d模块的中断入口控制a/d模块的数据采集。
2.2 驱动程序设计与实现
usb系统驱动程序采用分层结构模型:较高级的usb设备驱动程序和较低级的usb函数层。其中usb函数层由通用串行总线驱动程序模块(usbd)和主控制器驱动程序模块(hcd)组成。
图3 pdiusbd12与89c51的具体实现电路
为使驱动程序具有通用性,也为简化应用程序的开发,编写了供应用程序调用的动态链接库。这样应用程序只需调用此库提供的接口函数即可完成对usb设备的操作。usb函数层(usbd及hcd)由windows98提供,负责管理usb设备驱动程序与usb控制器之间的通信、加载及卸载usb驱动程序等。目前windows98提供的多种usb设备驱动程序并不针对实时数据采集设备,因此采用ddk开发工具设计专用的设备驱动程序。其由四个模块组成:初始化模块、即插即用管理模块、电源管理模块以及i/o功能实现模块。
初始化模块提供一个driverentry入口点