- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于USB2.0的高速数据通信接口设计
(3)对FIF0进行配置。相应的寄存器操作为E192FIFO(:FG=0xl 1,EP6FIFOCFG=0x0D。本案例将FIF02,FIF06设置成自动方式。
图3 固件架构程序流程
初始化完成后,打开中断,之后固件程序开始枚举USB设备,直至端点0上接收到通信建立包时为止[5]。一旦收到通信建立包,将重复执行下面的任务分配过程:
(1)调用TD_Poll()函数,以完成用户指定的任务。
(2)判断是否有USB设备请求?如果有,则调用ParseControlTransfer()函数进行相应的处理;如果没有,则继续向下执行。
(3)检测USB总线是否空闲。如果空闲,则调用TD_Suspend()函数,交由用户处理。在TD_Suspend返回真值后,8051处于空闲状态。这时,只有USB总线活动或芯片Wakeup管脚活动,才能将8051重新激活。
(4)8051被激活后,固件程序将首先调用TD_Resume()函数,以使8051从空闲状态中恢复出来,然后再处理用户指令。
3.2 设备驱动程序设计
开发USB设备驱动程序,可采用Numege公司的开发包DriverWorks和Mitmsoft公司的
Windows 2000 DDK.并以VC++6 0作为辅助开发环境。
CY7C68013的设备驱动程序有两种:一种用来在设备接人时从主机下载困件到RAM中,称为固件下载驱动程序(ezloader.sys);另一种是在设备重新枚举后加载的设备驱动程序(ezusb.sys),应用软件通过该设备驱动程序与CY7C68013通信。固件的程序代码既可以通过外部E2PROM下载,也可通过主机下载。本文以从主机下载为例进行说明,若选择主机下载方式,则此时外接E2PROM中存放的是固件下载的PID/VID,且第1个字节是0xC0H,系统通过该PID/VID找到固件下载驱动程序(ezloader.sys),将相应的固件代码下载到FX2的RAM中。
在将固件下载到RAM中后,系统清除内存中的固件下载驱动程序.并进行重新枚举,让C8051固件控制CY7C68013。此时,系统获得由C8051固件提供的PID/VID(与E2PROM中的不同),认为有新的USB设备接入,并据此加载相应的设备驱动程序。
3.3 应用软件设计
应用软件满足系统与用户的接口,它通过通用驱动程序完成对外设的控制和通信,如开启/关闭USB设备、检测USB设备、设置USB数据管道等。它由动态链接库和应用程序两部分组成:动态链接库负责与USB设备驱动程序通信,响应应用程序的各种请求;应用程序则则以定时查询的方式将TMS320C6203B后的数据读入计算机事先开辟的大容量内存缓冲区, 同时从缓冲区读出数据实时显示, 处理结束后再将内存缓冲区的数据存盘以及向TMS320C6203B发送控制命令。
动态链接库对设备驱动程序的访问都是通过I/O Control调用来实现。首先调用Win32函数CreatFile()得到设备驱动程序的句柄,然后调用Win32函数DeviceIocontrol (),通过得到的句柄把IOCTL和相关的输入输出缓冲区提交给驱动程序。当应用软件退出时,用
CloseHandle()函数关闭设备。
在编写应用程序时,先建立与外没的连接,然后实施数据的传输。在系统启动信号处理算法后,为保证不丢失数据,用户程序应建立一个新的工作线程专门获取外没传来的数据。程序中主要用到两个API函数CreateFile()和DeviceIoControl()。CreatFile()取得设备句柄后,DeviceIoControl()根据该句柄完成数据传输。,
部分程序代码如下:
hDevice=CreateFile(".EZUSB_0",
GENERIC_READ| GENERIC_WRITE,
FILE_SHARP_WRITE,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORAL,NULL);
If(hDevice= =INVALID_HANDLE_VALUE)
{ Application->MessageBoxA("创建设备失败,请确认设备是否连接上!",NULL,IDOK);}
else{DeviceControl(hDevice,IOCTL_ EZUSB_BULK_WRITE,
&blkctl,sizeof(BULK_TRANSFER_CONTROL),
&inBUFFER,
sizeof(inBuffer),
&nBytes,
NULL);
…}
4 结论
采用两种方法对本系统的数据传输速度进行测试:
(1) DSP 将ADC 采集的语音信号进行处理后,将其频率、相位等数据上传给计算机进行分析处理;
(2)计算机将控制指令传给DSP。结果显示, 两种方法的传输速度均可达到64Mb/s以上, 完全可以满足实时数据处理的需要。
该接口电路在本人开发的基于DSP的语音信号采集与处理系统中, 实现了数据高速传输的任务, 工作性能良好。
本文作者创新点:传统的信号处理系统中数据传输接口在低速时常采用标准串行口或并行口, 高速时一般采用PCI总线接口。但标准串行口或并行口数据传输速率较低; PCI总线尽管数据传输速率可以达到1Gbps , 但是硬件设计和驱动开发难度较大,USB总线具有快速、双向、低价并可热插拨等特性,而且支持各种PC与外设之间的连接,本文将USB2.0接口芯片CY7C68013用于信号处理系统中,处理后的数据经USB 向计算机传输,速度得到了大大提高, 并且系统可靠性也达到了理想效果。本文所述的方法具有一定的普遍性, 可用于多种微处理扩展USB 接口的方案中。