新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 深度解读基于USB接口VSAT基带数据采集系统设计

深度解读基于USB接口VSAT基带数据采集系统设计

作者:时间:2018-08-03来源:网络收藏

CPLD控制采集外部数据的时钟可同时作为CY7C68013的从FIFO模式的读写控制时钟,即CY7C68013的接口时钟连接到IFCLK引脚,FLAGA-FLAGD为FIFO标志引脚,用于映射FIFO的当前状态,SLWR/SLRD是CY7C68013从FIFO的写使能/读允许信号,CPLD向CY7C68013从FIFO提供从FIFO输出允许信号SLOE,仅在数据输出时有效,FD[15:0]为16位双向数据总线。FIFOADR[1:0]为端点FIFO选择信号。

本文引用地址:http://www.eepw.com.cn/article/201808/385294.htm

3 软件设计

本系统软件设计部分包括固件、驱动程序和应用程序的设计。

3.1 USB设备固件程序设计

固件程序是指运行在设备CPU中的程序,是整个程序设备的核心,可采用汇编语言和C语言设计,CyPress为用户提供了一个固件程序框架,帮助用户完成相当一部分USB协议相关的工作,用户只需根据外设功能的具体要求,在相应的函数中填写函数体。Cypress提供的这一框架程序简化了用户的固件程序设计。

本系统固件开发所使用的编程语言为德国Keil公司的C51编译器,集成开发环境为μVision2,该固件共包含以下5个文件:

1)ez-usb.lib

是EZ USB函数库对象程序代码。

2)usbjmptb.obj

定义了FX2中INT2和INT4的中断跳转表。

3)dscr.a51

包含描述符的表数据,包括设备描述符、设置描述符、接口描述符、端点描述符和字串描述符等,用来定义设备的ID号、端点的设置特性,主机就是通过读取设备的描述符来获取USB外设的功能特性,从而给设备加载相应的驱动程序并配置设备。

4)fw.c

是固件运行的主程序文件,负责处理主机发出的各种USB设备请求,该程序首先初始化所有的内部状态变量,然后调用TD_Init函数进行初始化,并打开中断。之后,固件程序开始列举USB设备,直至在端点0上接收到SETUP令牌包时为止。一旦接收到STUP令牌,其将重复执行下面的任务分配过程:调用用户函数TD_Poll,以完成用户指定的任务;检测是否有USB设备请求(SETUP令牌)如果有,则执行指令并作出相应的操作,如果没有,则继续向下执行,检测USB核是否有USB挂起实践,如果有USB挂起事件,则调用用户程序TD_Suspend,交由用户处理;当TD_Suspend返回为真时,USB核检测是否重新开始事件,如果没有USB挂起事件,则使处理器处于挂起状态,当检测有重新开始的事件,USB核调用用户程序TD_Resume,并继续执行本步骤,当TD_Suspend返回为假时,则继续执行本步骤。

5)periph.c

包含各种用户功能函数(如TD_Init、TD_Poll等)及其INT2中断服务子程序的定义,它实现了本系统的主要功能。

在本系统中,把端点2配置为批量传输、IN方向,封包大小为512字节,每微帧包含2个封包,数据传输速率为64Mbit/s为就可满足实际需要,终端0作为默认的控制传输管道来处理USB事件。

3.2 驱动程序设计

FX2的设备驱动程序有两种:一种用来在设备接入时从主机下载固件到RAM中,称为固件下载驱动程序(ezloader.sys);另一种是在设备重新列举后加载的设备驱动程序(ezusb.sys)。应用软件通过该设备驱动程序与FX2通信。

固件的程序代码既可以通过外部E2PROM下载,也可以通过主机下载在本系统中选择从主机下载,此时外接E2PROM中存放的是固件下载的PID/VID,且第1个字节是0xC0H,系统通过该PID/VID找到固件下载驱动程序(ezloader.sys)将相应的固件代码下载到FX2的RAM中。ezloader.sys的生成是利用Cypress公司提供的固件下载驱动程序源代码和用户编译成功的固件代码。在Win2000 DDK中创建的,并根据E2PROM提供的PID/VID修改相应的.inf文件,在将固件下载RAM中后,系统清楚内存中的固件下载驱动程序,并进行重新列举,让C8051固件控制FX2,此时,系统获得由C8051固件提供的PID/VID(与E2PROM中的不同),认为有新的USB设备接入,并据此加载相应的设备驱动程序。

Ezusb.sys是本系统运行时所使用的主要驱动程序,它定义了几个IOCTL代码,其中:IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR用于读取USB设备描述符;IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR用于读取USB设备的配置信息,IOCTL_Ezusb_BULK_READ用于主机读取USB设备发出的块数据,IOCTL_Ezusb_GET_CURRENT_FRAME_NUMBER,用于读取USB传输过程中当前的帧序号。

3.3 用户程序设计

应用程序开发中,可用VC++编制应用程序。所有的用户程序是通过I/O控制调用来访问EZ-USB的设备驱动程序的,可以把EZ-USB设备当成文件来操作,利用CreateFile得到EZ-USB句柄,通过得到的句柄,用一个Win32函数DeviceIoControl(),把IOCTL和相关的输入输出缓冲区提交给驱动程序,来进行控制传输,用ReadFile,WriteFile进行批量传输。当应用软件退出时,用CloseHandle()关闭设备。

4 结束语

本文结合实际工程的需要,提出了基于数据采集的设计方案,并给出了硬件系统及软件设计方法,在USAT通信的实际应用中,该系统与后端软件结合,很容易实现对VSAT数据的分析与处理,可广泛应用于VSAT通信系统中。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭