微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 低功耗数据采集系统的USB接口设计

低功耗数据采集系统的USB接口设计

时间:11-21 来源:互联网 点击:

CP2101的USB功能控制器管理USB和UART间所有的数据传输,以及由USB主控制器发出的命令请求以及用于控制UART功能的命令等。CP2101的UART接口处理所有的RS232信号,包括控制和握手信号。CP2101的VBUS与VREGIN引脚必须始终连到USB的VBUS信号上。在VREGIN的输入端加去耦电容(1μF与0.1μF并联)[6]。CP2101与单片机接口是标准UART电平,与计算机的USB端口连接是USB标准电平,因此,无论与3V还是5V供电的单片机连接都不需要电平转换。

3 USB通信接口的软件程序设计

USB接口程序设计包括三部分:单片机程序开发、USB设备驱动程序开发、主机应用程序开发。三者互相配合才能完成可靠、快速的数据传输。其中USB设备驱动程序Cygnal公司已经提供。这里所要编写的是剩下的两部分。一部分为单片机MSP430F13X的串行通信程序,即对波特率、数据位、校验位、有无奇偶校验等通信协议的设计及单片机串行通信功能控制器的设置;另一部分为主机对CP2101的通信程序,这部分要在VC++环境中调用API函数实现。

3.1 单片机程序设计

在IAR EmbeddedWorkbench嵌入式集成开发环境中,编写单片机通信程序,可实现在线编辑修改。MSP430的内核CPU结构是按照精简指令集和高透明指令的宗旨来设计的,使用的指令有硬件执行的内核指令和基于现有硬件结构的高效率的仿真指令[7]。以下为系统发送数据的部分应用程序(包括初始化及触发UART端口程序):

#include “msp430x13x.h”
/************************* 串口 ***********************/
void send_byte(char sdata){
TXBUF0 = sdata; /* 发送数据缓存(UTXBUF0) */
while ((IFG1 & UTXIFG0) == 0); /*目的操作数位测试,发送中断标志*/
}
/************************** main ***********************/
void main (void){
char a;
uint a=0x0055;
WDTCTL = WDTPW + WDTHOLD;/*停看门狗,WDTCTL看门狗寄存器*/
UCTL0 = CHAR; /*8位接收控制寄存器URCTL 线路空闲\异步\无反馈\8位1位停止位\无校验位*/
UTCTL0 = SSEL0; /*发送控制寄存器UTCTL0,
UCLK = ACLK时钟*/
UBR00 = 0x0D; /*32Kb/ 2400b = 13.65,波特率选择寄存器*/
UBR10 = 0x00; /* 高字节*/
UMCTL0 = 0x6B; /*调节*/
ME1 = UTXE0 + URXE0; /*开 USART0 TXD/RXD 接收/发送允许*/
IE1 = URXIE0; /*开 USART0 RX 接收中断允许位*/
P3SEL = 0x30; /*P3.4,5 = USART0 TXD/RXD,选择外围模块功能*/
P3DIR = 0x10; /*目标操作数置位, P3.4=1,输出模式*/
_EINT(); /*开中断*/
// 主循环
for (;;)
{ send_byet(a++);}
}


图1 硬件电路

3.2 USB设备驱动程序的安装

当把开发板接到主机的USB端口时系统会提示发现新硬件,并要求安装驱动程序:

先安装CP2101的驱动程序CP2101_Drivers.exe到C:\Cygnal\CP2101,然后运行Setup.exe到C:\Program Files\USB to RS-232 Bridge Controller。

完成上面两步的安装后,在系统的设备管理器中会看见CP2101虚拟的那个COM口。在以后的设计中就是对这个口进行操作。此时可以应用串口调试助手调试下位机程序,接收发送数据。

3.3 主机应用程序设计

主机应用程序的编写使用VC++编译环境中的API(应用程序设计接口)函数实现。应用程序的设计方法与串口编程类似。首先必须查找设备并打开设备的句柄,然后进行读写和控制操作,最后是关闭设备句柄。为了提高效率,可使用多线程技术实现读写[8]。具体步骤如下:

① 把CP2101的动态链接库CP2101.DLL文件拷贝到\Windows,\winnt或者\system32路径下。当程序运行时就能调用CP2101.DLL。
  ② 在Visual Studio6.0中打开CP2101SetIDs.dsw,选择Release或者Debug建立CP2101.EXE工程文件。
  ③ 在VC++6.0中链接CP2101.LIB,这时就可以应用CP2101的动态链接库了。
  ④ 在VC++里进行编程,用API功能函数对USB堆栈、CP2101的EEPROM及数据传输的通信协议等进行编辑。

当数据传输完毕时,应用CP2101_Close()函数关闭设备句柄。可以根据实际应用修改CP2101的VID和PID,并用相应函数写进CP2101的EEPROM中。但须注意的是,修改后要用CP2101_Rest()函数使CP2101复位并重新安装驱动程序。

4 结论

通过试验证明,本设计能够很好地完成USB通信,达到了预期的目的。应用超低功耗MSP430微控制器与CP2101实现USB通信接口设计,具有体积小、功耗低、开发简单、可靠性高、移植性强等特点。在此基础上开发的低功耗数据采集系统具有很大的优越性。这种设计可以加以推广应用到其它便携式设备开发中。

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

网站地图

Top