slaveFIFO模式下USB和FPGA的数据通信

时间:2022-09-19 06:04:54

slaveFIFO模式下USB和FPGA的数据通信

【摘要】 本文介绍了基于USB2.0的EZ-USB FX2系列接口芯片之一CY7C68013,为解决PC与FPGA的高速数据传输,利用芯片的SlaveFIFO主从模式将CIS传感器采集的纸币数据准确无损地传给PC机,利用verilog HDL语言在FPGA中产生相应的控制信号,最终实现对数据的快速传输,在上位机得到CIS采集的清晰的纸币画面。

【关键词】 FPGA CY7C68013 SlaveFIFO模式 USB 纸币图像数据

一、引言

USB全称为通用串行总线,是一种作为设备与计算机之间通信的标准接口,具有可热插拔、即插即用、快速、双向、以及价格低廉等特性,获得了越来越多用户的接受。本文使用支持USB2.0协议的CY7C68013接口芯片,作为FPGA与PC之间的传输接口。

二、系统总设计

本文利用FPGA芯片作为系统的逻辑控制核心,控制CIS传感器采集纸币数据,并通过A/D将数字信号最终存入SDRAM。USB接口与上位机通信,只需将SDRAM中的数据通过USB传输到上位机显示。整体设计如图1所示:

2.1 USB枚举过程

当集线器端口悬空时,被电阻下拉,当设备插入到集线器时,接了上拉电阻那条数据线的电压对集线器来说,是一个高电平信号,集线器检测到此状态后,报告给USB主控制器,此时便检测到设备。USB的枚举过程是主机获取USB设备信息的过程。

(1)USB主机检测到有设备插入后对其复位,使用缺省地址发送获取设备描述符的标准请求,主机获取到一个数据包的设备描述符并确认无误后,开始进入设置地址阶段。(2)USB主机向缺省地址发送设置地址的请求,设备受到该请求后,直接进入到等待主机输入令牌包,主机确认收到后发送ACK,设备收到ACK之后开始启用新地址。以后主机就通过这个唯一的地址访问该设备。(3)主机使用新地址再次获取配置描述符。枚举完成。

2.2 USB批量传输

本文设备和主机的数据传输采用批量传输,批量传输由建立包、数据包、握手包构成事务。用在数据量大,对数据的实时性要求不高的场合。传输过程如图2所示:

2.3 系统硬件结构

本文采用了USB的slaveFIFO模式,利用FPGA产生CY7C68013的控制信号。USB与FPGA的接口信号FLAGB、FLAGC用来指示FIFO的空满状态,SLOE、SLRD、SLWR信号分别为输出使能信号、读写控制信号,FIFOADD[1:0]的4个位用于选择芯片内部的4个缓冲区之一。FD[15:0]为双向数据端口。

三、软件设计

系统的软件设计包括三部分:FPGA控制器的verilog程序,USB的固件程序、上位机的控制程序。

3.1 同步SlaveFIFO写的状态机如下

IDLE:空闲,此时写事件如果发生,转入状态1;

状态1:触发FIFOADD[1:0]指向IN FIFO,转向状态2;

状态2:如果FIFO满,则保持本状态,否则转向状态3;

状态3:驱动数据到总线上,触发SLWR有效,转向状态4;

状态4:若还有数据写,则转向状态2,否则转向IDLE;

3.2 USB的固件程序

USB固件是运行在CY7C68013芯片中的代码,只有将固件程序完整的下载入芯片中,芯片才可以被信号控制。SlaveFIFO模式中,USB内嵌的8051固件的功能只是配置SlaveFIFO相关的寄存器以及控制USB何时工作在SlaveFIFO模式下。一旦8051固件将相关的寄存器配置完毕,FPGA即可按照SlaveFIFO的传输时序,高速的与主机进行通讯,而在通讯过程中不需要固件的参与。在固件程序中,TD_Init函数只会在USB启动后调用一次。在这个函数里添加自己的初始化代码,也就是传输数据前要处理的,例如USB工作模式、CPU时钟频率、端点选择、端点传输方向、FIFO大小配置等。TD_Poll函数就是用户调度程序,USB会在空闲的时候反复调用该函数,所以我们把自己需要反复执行的代码放在这里。本文在初始化函数TD_Poll中,改动的部分如下:

Void TD_Init(void)

{...

IFCONFIG = 0x03;// 设置外部时钟源、同步传输、slave fifo模式

EP2CFG = 0xE2;//2端点IN、批量传输、512字节双缓冲

EP6CFG = 0xE2;//2端点IN、批量传输、512字节双缓冲

AUTOPTRSETUP |= 0x01 //使用自动指针,使用自动指针

....

}

3.3 上位机应用程序设计

上位机应用程序的作用就是提供一个人机交互的显示界面,体现系统的运行状态。这里采用MicrosoftVisual C++ 6.0 进行上位机应用程序的设计,程序中采用CYAPI 控制函数类。CyAPI 控制函数类为EZ-USB FX2LP系列USB接口芯片提供了十分精细的控制接口。在使用Cypress 公司提供的驱动程序基础上,只需在主机程序中加入头文件CyAPI.h 和库文件CyAPI.lib 即可调用相应的控制函数。

四、测试结果

主机与设备之间通过USB的数据传输,实现对SDRAM中纸币数据的上位机图像显示。显示如图3所示:

五、结束语

本文主要利用USB与FPGA的通信进行纸币数据采集的验证,能高速的将CIS采集的数据在上位机上进行显示,便于观察与调试。USB通信与其他串口扩展技术相比具有较大的优越性。其设置比较灵活,应用受限制少,在各种分布式控制领域部有推广使用的价值。

上一篇:虚拟无线电中CUDA技术实现GPU通用计算及性能分... 下一篇:城市道路养护维修施工中存在的问题及解决方法...

文档上传者
热门推荐 更多>
精品范文更多>