USB2.0接口传输的FPGA控制与实现
2.2.1 VHDL程序设计
FPGA是通过Slave FIFO的方式和USB控制器CY7C68013相连的。FPGA读取数据,通过查询CY7C68013中FIFO的状态来判断是否可以进行读数据,主要是查询状态标志位FLAGC。读数据程序状态转移图如图3所示。本文引用地址:https://www.eepw.com.cn/article/202550.htm
状态1:在空闲时,接到命令,发起传输,使地址指向用于下传数据的FIFO。进入状态2;
状态2:查询读状态的FIFO标志FLAGC,如果为FIFO为空,则继续等待,如果有数据则进入状态3;
状态3:使读数据信号线有效,接收数据,接收完数据后进入状态4;
状态4:如果FIFO中还有数据需要接收,则进如状态2,否则进入空闲状态。
FPGA在上传数据时,原理基本相同,方向相反,采用不同的FIFO和查询状态标志位。
2.2.2 固件编程
固件编程就是对USB设备的各类寄存器进行配置的过程。固件程序是指运行在设备CPU中的程序,只有在固件程序运行时,外设才称之为具有给定功能的外部设备。固件要完成以下主要工作:
(1)初始化工作;
(2)对设备进行重新列举(ReNumeration);
(3)响应中断,并对中断作相应的处理;
(4)数据的接收与发送;
(5)外围电路的控制。
为了简化固件编程,CYPRESS提供了开发固件库和固件编程框架,只需在此基础上添加少量代码就可以完成固件编程。USB建立固件编程框架的文件见表1,在实际编程过程中,根据自定义,只需要修改Periph.c和Dscr.a51两个文件。固件代码固化到一片EEPROM中,设备加电后由FX2通过I2C总线自动加载到片内RAM后自动执行。设备功能、工作方式等均可以通过改写固件程序,重新配置。
评论