FPGA与PC的USB2.0通信实现

更新时间:2023-12-01 23:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

FPGA使用USB2.0接口同PC进行同步传输

FPGA端完整的应用方案

参考官方的AN61345文档《Designing with EZ-USB FX2LP Slave FIFO Interface using FPGA》,同时附有verilog,VHDL,芯片固件库函数。

参考官方的《EZ-USB Technical Reference Manual》文档 基于CY7C68013A模块,使用SLAVE-FIFO模式

要先整理好数据传输的流程和编写好状态机,主要参考文档2

一系统硬件

内部框图

硬件连线

引脚说明:

SLRD SLWR SLOE FIFOADR[1:0] FD[15:0] FlagA/FlagB/ FlagC/FlagD IFCLK PARASET[2:0] 端口配置

FIFO读使能,同步模式可以和SLOE连在一起 FIFO写使能

允许FIFO数据输出使能 端口地址选择 16-bit data bus.

端口2输出空标志 =1可读出,输出满表示有数据,可读出。

端口6输入满标志 =1可写入,输入空表示缓冲器没有剩余空间可写入了 48 MHz and is generated by FX2LP.用于同步 我自己添加的,以便后面增加额外功能或工作方式。

端口2 地址00,输出,四缓冲*512K Bytes 端口6 地址10,输入,四缓冲*512K Bytes

(16位的接口应该每来一次数据和每写一次数据需要256次操作(或者严格按照时序要求来))(也即是说数据传输的最小单位是512K Bytes,最后一次数据传输可能小于它,要么填充假数据要么给PKTEND一个负脉冲(低有效)。同步模式下PKTEND pulse插入时间没有限制(只要缓冲器可用))

各种状态FPGA产生的基本控制信号: 状态 写入数据 写等待: 读数据 读等待 标志 FLAGD=1 FLAGD=0 FLAGA=1 FLAGA=0 读使能 slrd = 1 slrd = 1 slrd = 0 slrd = 1 输出使能 sloe = 1 sloe = 1 sloe = 0 sloe = 1 写使能 slwr = 0f slwr = 1 slwr = 1 slwr = 1 端口地址 addr = 10 faddr = 10 faddr = 00 faddr = 00 写入数据过程:

The FPGA monitors the Full flag of EP6 (Flag D) and Sync signal. FPGA continuously writes incrementing data into the FIFO when both Flag D and Sync signals are high(同步时钟下降沿时数据有效,因而同步时钟上升沿时写入数据,下降沿时读出数据). While writing data into the EP6 FIFO, the FPGA pauses the writing as soon as the Full flag gets asserted, and resumes the

writing when the flag gets de-asserted.读出数据过程和写入类似,只是针对的信号不一样。 (asserted指信号的active状态,这里指低电平,de-asserted指信号invalid状态,这里指高电平)

同步模式特点详细描述

1,IFCLK可以有usb芯片产生,也可FPGA产生,最好是内部产生,我修改程序内部产生, CLKOUT也可输出一个48M的时钟,因为它输出了一个48M的时钟。The FIFOADR[1:0] 选择端口,我们用到了2和6,分别为00和10。16位总线宽度时FD[15:8] 使用芯片的Port D,FD[7:0] 使用芯片Port B。通过FIFO’s WORDWIDEbit, (EPxFIFOCFG.0)寄存器设置。注意传输奇数个包的情况,

2,FLAGA, FLAGB, FLAGC, and FLAGD指示FIFO empty和full的状态或者indicates that a FIFO has filled toa user-programmable level.外部设备主要监视输入端口的满状态和输出端口的空状态。寄存器配置:The FLAGA, FLAGB, and FLAGC pins can operate in eitherof two modes: Indexed or Fixed, as selected via the PINFLAGSABand PINFLAGSCD registers。The FLAGD pinoperates in Fixed mode only.在fixed模式下The condition and FIFO are userselectable. For example, FLAGA could be configured toreport FIFO2’s ‘empty’ status, FLAGB to report FIFO4’s‘empty’ status, FLAGC to report FIFO4’s ‘programmablelevel’ status, and FLAGD to report FIFO6’s ‘full’ status。默认都是低电平有效但可以通过FIFOPINPOLAR寄存器设置反转。 3,控制引脚 (SLOE, SLRD,SLWR, PKTEND, FIFOADR[1:0]) SLOE (Slave OutputEnable), SLRD (Slave Read), SLWR (Slave Write),PKTEND (Packet End), and FIFOADR[1:0] (FIFO Select).‘Read’ and ‘Write’ are from the external master’s point ofview;SLOE and SLRD are active-low; their polaritiescan be changed via the FIFOPINPOLAR register.

在同步传输模式下,SLRD和SLOE可连在一起, the FIFO pointer isincremented on each rising edge of IFCLK while SLRD is asserted.异步传输模式下, theFIFO pointer is incremented on each asserted-to-deassertedtransition (上升沿)of SLRD.同步模式下data on the FD busis written to the FIFO (and the FIFO pointer is incremented)on each rising edge of IFCLK while SLWR is asserted. Inasynchronous mode, data on the FD busis written to the FIFO (and the FIFO pointer is incremented)on each asserted-to-deasserted transition(上升沿) of SLWR.

4,PKTEND 包结束控制,比如默认包大小是512K,如果传输小于512K的数据要么填充假数据要么给PKTEND一个负脉冲(低有效)。同步模式下PKTEND pulse插入时间没有限制(只要缓冲器可用),异步模式下SLWR and PKTEND should not be pulsed at the same time. PKTEND should be asserted after SLWRhas been deasserted for the minimum deasserted pulsewidth. In both modes, FIFOADR[1:0] should be held constantduring the PKTEND pin assertion.

时序图和仿真波形(参考) 1, 写入数据开始

写入数据时序

2, 写入数据结束

发送一个短数据包时

3, 读出数据开始

4,读出数据结束

实例

官方提供的程序和上面描述的硬件连接有些出入,上面的连接应该是有效的,关键处理好同步时钟信号和读写控制信号和状态监视。上面的实现是简单的,不知道为什么官方是另一种连接方式,

1,官方例程硬件连接图,程序参考文件

我们如何应用这个库呢?

1, 验证FPGA和USB模块同电脑的基本数据传输 2, 编写上位机验证数据传输

3, 编写上位机进行复杂,大量数据的传输

4, 考虑我们需要添加的特殊功能和是否需要修改固件 我的工作:

1, 主要熟悉用VC编写上位机通信软件,学习官方提供的USB操作的库函数,固件库几乎

不需要修改

2, 数据的接收和发送测试

3, 针对我们这个项目实现需要的数据传输,接收,图片和普通数据文件操作

我们如何应用这个库呢?

1, 验证FPGA和USB模块同电脑的基本数据传输 2, 编写上位机验证数据传输

3, 编写上位机进行复杂,大量数据的传输

4, 考虑我们需要添加的特殊功能和是否需要修改固件 我的工作:

1, 主要熟悉用VC编写上位机通信软件,学习官方提供的USB操作的库函数,固件库几乎

不需要修改

2, 数据的接收和发送测试

3, 针对我们这个项目实现需要的数据传输,接收,图片和普通数据文件操作

本文来源:https://www.bwwdw.com/article/l0vt.html

Top