基于LabVIEW NI-VISA实现PC与C8051F320的USB数据通信

2013-08-13 06:10段晋军位恒曦常晓明
电子技术应用 2013年8期
关键词:描述符固件驱动程序

段晋军,位恒曦,常晓明

(太原理工大学 计算机科学与技术学院,山西 太原030024)

随着当今电子技术的发展,人们对数据通信速度和操作安装的简易性等方面的要求日益提高,使得数据通信技术不可避免地成为一项关键技术。USB是一种通用串行总线,其发展速度非常迅猛,USB协议已由传输速度为12 Mb/s的USB1.1发展到传输速度支持低速、全速、高速和超高速的USB3.0,最大传输速度高达5 Gb/s。USB总线技术由于数据传输速度高、使用方便和能够连接多达127个外设,因此其在数据通信中的应用越来越广泛。

Windows平台下传统的USB应用系统的开发步骤是:先用Windows DDK或第三方开发工具开发USB驱动程序,然后用Visual C++开发应用程序。若让不熟悉Windows编程的开发者用传统方法开发USB驱动程序和应用程序,将会非常困难[1]。因此,本文介绍了一种难度较低的USB应用系统实现方案,即在LabVIEW环境下基于NI-VISA实现PC与C8051F320单片机的USB通信系统。

1 系统总体设计

本系统选用具有USB接口的C8051F320-TBC开发板实现数据的双向通信。该设计完成两项任务:(1)采集单片机上温度传感器的数据,通过USB上传至PC;(2)PC通过USB发送指令至单片机,控制单片机执行相应的动作。

本系统的硬件平台结构如图1所示。

图1 硬件平台结构图

本系统的软件平台设计包括单片机端的固件(Firmware)程序设计、PC端的驱动程序设计和PC端的应用程序设计3方面。

单片机端固件程序的任务是处理来自USB主机端的标准请求和完成与USB主机的数据交换;PC端的驱动程序作为 USB主机(PC)和 USB从机(单片机)的桥梁,其主要任务是让USB主机可以识别USB设备,并将硬件本身的功能告诉USB主机;PC端的应用程序的任务是通过驱动程序与USB设备进行通信并对USB数据进行处理。

本文采用LabVIEW平台开发PC端的驱动程序和应用程序,采用Silicon Laboratories IDE集成开发环境开发固件程序。本系统软件平台结构如图2所示。

2 模块设计

2.1 固件程序设计

单片机端固件程序设计的目的是使USB主机能够识别USB设备(本系统为C8051F320设备),并正确与USB设备进行双向通信。

固件程序完成的任务有三项:(1)使得USB主机可识别USB设备,并建立二者之间的通信;(2)接收由USB主机发送来的控制指令,在本设计中为点亮单片机的LED灯;(3)将采集的温度数据传送给USB主机。

本设计将固件程序划分为USB描述符声明程序(usb_desc.c)、中断服务程序(usb_isr.c)、标准设备请求程序(usb_stdreq.c)、主程序(main.c)4个子模块。

USB描述符声明程序(usb_desc.c)用来描述设备的USB信息。该文件包含有USB协议中规定的5种标准描述符信息:设备描述符信息、配置描述符信息、接口描述符信息、端点描述符信息和字符串描述符信息。USB主机通过访问这些描述符即可实现对设备类型的识别和配置。

中断服务程序(usb_isr.c)用来处理所有与USB相关的中断事件,当有任何类型的USB中断事件发生时,固件程序都会调用这个中断服务程序。

标准设备请求程序(usb_stdreq.c)包括所有标准设备请求的处理例程,这些处理例程都是通过控制端点的处理来调用,该文件主要用来处理USB主机发送的标准请求。

主程序(main.c)的功能是响应USB主机发送的控制指令并将采集的温度数据传送给USB主机。

固件程序流程图如图3所示。

由图3可知,该固件程序首先进行设备列举[2],其目的是使 USB主机能够识别USB设备。USB主机根据设备的描述符信息对USB设备进行配置并分配资源,待通信建立后,USB设备可接收由USB主机发来的控制指令,并将采集的温度数据通过USB传给USB主机。

2.2 驱动程序设计

图2 软件平台结构图

图3 固件程序流程图

驱动程序的设计采用虚拟仪器软件架构NI-VISA实现,NI-VISA(Virtual Instrument Software Architecture)是由美国NI公司开发的一种用来与各种仪器总线进行通信的高级应用编程接口。VISA是一个综合软件包,可在任何平台、总线和环境下对 USB、串口、GPIB、VXI、PXI及以太网等进行配置、编程和调试。

USB设备有USB INSTR设备与USB RAW设备两类。符合USB测试和测量类(USBTMC)协议的设备称为USB INSTR设备;不符合USBTMC协议的设备称为USB RAW设备。

NI-VISA有USB INSTR类函数与USB RAW类函数两种VISA类函数,它们可分别控制USB INSTR与USB RAW两种设备。USB INSTR设备可通过LabVIEW直接调用USB INSTR类函数实现对其控制;而USB RAW设备则需先使用NI-VISA来创建USB设备的驱动程序[3],创建正确后才能利用LabVIEW调用USB RAW类函数实现对其控制。

使用NI-VISA软件包中的VISA Interactive Control测试可知,本设计中的USB设备属于USB RAW类设备,因此需要通过NI-VISA来创建驱动程序。驱动程序设计的任务是制作INF文件、配置USB设备及安装驱动程序并验证其正确安装,可分为以下 3个步骤[4]:(1)使用 VISA驱动开发向导(Driver Development Wizard)创建INF文件;(2)使用INF文件安装驱动程序和USB设备;(3)使用NI-VISA交互式控制测试设备。

2.3 应用程序设计

当正确安装VISA驱动程序之后,便可通过Lab-VIEW程序调用USB RAW类函数来完成与USB设备的通信[5]。本应用程序设计的主要任务有两个:(1)PC接收由单片机采集的温度数据,并通过LabVIEW显示;(2)PC通过LabVIEW软件发送指定的指令点亮单片机的LED灯。

由于本设计中的RAW设备编程较为复杂,不像INSTR设备那样可以使用USBTMC协议直接调用VISA常用函数,故需重新编写程序。编写本设计主要用到的控件为:VISA打开、VISA启用事件、VISA等待事件、VISA获取USB中断数据、VISA写和VISA关闭。

PC通过USB向单片机发送指令的流程图如图4所示,PC接收单片机通过USB传送来的数据的流程图如图5所示。

根据图4和图5的流程图进行LabVIEW编程,其后面板的核心代码分别如图6和7所示。

图4 PC机向单片机发送指令流程图

图5 PC机接收单片机数据流程图

图6 PC机向单片机发送指令的核心代码

图7 PC机接收单片机数据的核心代码

3 系统功能测试

在完成各个模块的设计后,需进行系统集成。结合硬件框图进行实物连接,依次完成固件程序下载、驱动程序安装和应用程序整合。

(1)单片机将所采集的温度信息通过USB将数据传送给PC,其LabVIEW前面板及测试结果如图8所示。

图8 LabVIEW前面板及测试结果

单片机的核心代码如下:

通过与单片机发送数据的格式对比可知,所传送数据的格式正确,使用“Bus Hound”软件验证了所传送的数据正确无误。

(2)PC机通过USB将指定的数据传送给单片机,可观察到正常点亮单片机的LED灯。

本文介绍了如何在LabVIEW环境下基于NI-VISA实现PC与单片机C8051F320的USB通信,并给出系统实现方案。实验测试表明,该方案能够实现USB通信,且方案实现难度较低。本系统可为USB应用系统的设计提供参考。

[1]佘志荣,杨莉.基于 NI-VISA与LabVIEW的 USB接口应用设计[J].单片机与嵌入式系统应用,2007(1):66-68.

[2]赵宏斌,全厚德.基于C8051F320的数据采集系统USB接口设计[J].单片机开发与应用,2009,25(9):92-94.

[3]蔡共宣.基于LabVIEW的单片机USB数据采集系统设计[J].实验科学与技术,2009,8(1):58-59.

[4]National Instruments.USB 仪器控制教程[Z],2009.

[5]张桐,陈国顺.精通 LabVIEW 程序设计[M].北京:电子工业出版社,2008.

猜你喜欢
描述符固件驱动程序
基于结构信息的异源遥感图像局部特征描述符研究
基于AKAZE的BOLD掩码描述符的匹配算法的研究
计算机硬件设备驱动程序分析
Linux单线程并发服务器探索
特征联合和旋转不变空间分割联合的局部图像描述符
基于UEFI固件的攻击验证技术研究*
基于固件的远程身份认证
提取ROM固件中的APP
基于MPC8280的CPU单元与内部总线驱动程序设计
多路手机固件升级工具设计