微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 一种USB接口的虚拟数据采集仪快速设计模板

一种USB接口的虚拟数据采集仪快速设计模板

时间:10-22 来源:互联网 点击:

摘要:为了快速开发性价比高的基于USB接口的虚拟数据采集仪,采用了NI-VISA和CH372芯片的方案搭建一个通用的模板,并以一个温度信号的虚拟数据采集仪器的实例加以说明。实验表明该模板降低了USB通信的复杂度,缩短了开发周期。

关键词:USB;数据采集;虚拟仪器;NI-VISA;CH372

引言

构建USB接口的虚拟数据采集仪器常有如下方案:

①采用NI公司的USB数据采集模块。该方案的特点是方便使用,但成本相对高。②采用非NI公司的USB数据采集模块。通过调用厂商提供的二次开发包里面的动态链接库,驱动数据采集。该方案比方案①成本低,但应用相对复杂。③采用数据采集器件+单片机+USB接口器件。

参考文献通过涮用动态链接库模块来实现驱动设计。参考文献通过NI-VISA方案来实现驱动设计,比参考文献采用的方法方便易用。综合比较,方案③从成本和开发速度上都具有很高的性价比。

本文旨在方案③的基础上,搭建一个通用的模板。开发者只要在该模板的基础上就可以快速开发性价比高的基于USB接口的数据采集系统。本文采用了NI-VISA和CH372 USB芯片的方案,并以一个温度信号的虚拟数据采集仪器的实例加以说明。

1 CH372及其外围电路

CH372是南京沁恒生产的一款USB总线芯片,它提供8位数据线及读、写、片选、中断线各一条,内置USB通信底层协议,具有方便、简单的内置固件模式和灵活的外置固件模式。内置固件模式下,芯片自动处理端点0的所有事务,本地单片机只需要负责处理数据交换即可,程序简洁、简单;外置固件模式下,由本地单片机负责处理各种USB请求,可以灵活地实现符合USB规范的设备。

图1是CH372的外围电路。D0~D7为芯片的数据I/O口,与STC89C52RC单片机的P0~P7相连;INT与单片机的P3.2相连;CS与单片机的P3.3相连;RD与单片机的P3.4相连;WR与单片机的P3.5相连;A0与单片机的P3.7相连。单片机采用的是11.059 2 MHz晶振。温度传感器采用DS18B20,它的数据线接单片机的P2.2口。

2 单片机软件设计

CH372芯片专门用于处理USB通信,在接收到数据或者发送完数据后,CH372以中断方式通知单片机进行处理。

单片机通过CH372芯片接收数据的处理步骤如下:

①当CH372接收到USB主机发来的数据后,首先锁定当前USB缓冲区,防止被后续数据覆盖,然后将INT引脚设置为低电平,向单片机请求中断;

②单片机进入中断服务程序,首先执行GET_STATUS命令获取中断状态;

③CH372在GET_STATus命令完成后将INT引脚恢复为高电平,取消中断请求;

④由于通过上述GET_STATUS命令获取的中断状态是“下传成功”,所以单片机执行RD_USB_DATA命令从CH372读取接收到的数据;

⑤CH372在RD_USB_DATA命令完成后释放当前缓冲区,从而可以继续USB通信;

⑥单片机退出中断服务程序。

单片机通过CH372芯片发送数据的处理步骤如下:

①单片机执行WR_USB_DATA命令向CH372写入要发送的数据;

②CH372被动地等待USB主机在需要时取走数据;

③当USB主机取走数据后,CH372首先锁定当前USB缓冲区,防止重复发送数据,然后将INT引脚设置为低电平,向单片机请求中断;

④单片机进入中断服务程序,首先执行GET_STATUS命令获取中断状态;

⑤CH372在GET_STATUS命令完成后将INT引脚恢复为高电平,取消中断请求;

⑥由于通过上述GET_STATUS命令获取的中断状态是“上传成功”,所以单片机执行WR_USB_DATA命令向CH372写入另一组要发送的数据,如果没有后续数据需要发送,那么单片机不必执行WR_USB_DATA命令;

⑦单片机执行UNLOCK_USB命令;

⑧CH372在UNLOCK_USB命令完成后释放当前缓冲区,从而可以继续USB通信;

⑨单片机退出中断服务程序;

⑩如果单片机已经写入了另一组要发送的数据,那么转到步骤②,否则结束。

在内置固件模式的USB设备方式下,单片机只需要处理6种中断状态。为了进一步简化USB通信,在本文的模板中只让CH372处理如表1所列的两种中断状态。

根据表1所列的两种中断状态相关的读写操作指令如表2所列。

本文对CH372的底层驱动进行了高度的封装,只提供一个接口给应用层,接口函数如表3所列。

从通用的角度考虑,本文对应用层的功能模块划分如下:

①USB设备初始化模块。实现设置USB设备的厂商VID和产品PID,工作模式为内置固件模式,具体代码如下:

④中断服务模块。两种中断状态分别是端点2的OUT事务和端点2的IN事务。IN事务中断表示上位机已经完成数据的接收,下一步让单片机做什么就是中断服务的内容。OUT事务中断表示USB设备端已经完成数据的接收,下一步让单片机端做什么就是中断服务的内容。中断服务模块的伪代码如下:

本文给出的实例是

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top