USB基本知识
同时,USB接口和FPGA的通讯大都采用的是68013芯片的FIFO模式。根据FIFO的传输特性,满足大量、速度恒定、有周期性的要求,所以应该是同步传输模式。这种通讯类型等特性的选择可以通过固件配置。
CY7C68013芯片
大概的接口图如下:
该模式是与FPGA/DSP等芯片连接的一种常见模式。之前版本的USB芯片,微处理器(51内核的)都要参与数据的处理。在速率不高的时候,12Mb/s全速传输模式下没有问题,但是到了480Mb/s的时候,微处理器就成为了瓶颈。
而此版本的68013直接解除了微处理器对数据处理的干预。
68013的通讯类型等特性可以通过固件配置。根据FIFO的传输特性,满足大量、速度恒定、有周期性的要求,所以应该是同步传输模式。
最高是96MByte/s。以8bit为例,则传输速率是96Mhz,一共四个FIFO,可以同时工作,所以fifo最高速率是24Mhz。(FPGA和FIFO的通讯同时只能和一个fifo)
画重点:外接24Mhz,内部分频,产生480MHZ供USB2.0使用。(疑问:这里的480MH的时钟就是为上文中480Mb/s高速传输模式提供的源吗)
8051的内存:由下图而知,从下至上主要分为了8K的主RAM(地址0000·1FFF),用于缓存代码和数据,同时这部分的内存可以通过EA角进行外扩内存。(地址E000·E1FF)作为临时RAM,不能跑程序。(地址E400·E47F)用于存储GPIF的波形。(地址E600·E6FF)用于保存控制状态寄存器。(地址E740·E7FF)和(F000-FFFF)都是用于数据缓冲的内存。分别称之为端点0/1/2/4/6/8。 其中端点0和端点1仅能由固件程序访问。2/4/6/8端点是FIFO的空间。
对于FPGA开发者而言,唯一需要了解的是,FIFO模式下读写的数据(端点2/4/6/8)缓存的地方其实就是8051的内存区F000-FFFF。
USB数据通过可以通过FX2的内置FIFO让数据在主设备(PC)和逻辑设备(FPGA)间传输。
GPIF和slave fifo模式其实都是属于FX2芯片的fifo模式。
对于那些逻辑芯片里没有标准fifo接口的,FX2里面内置的GPIF可以作为主控,在这种模式下(GPIF模式下)我们称之为主fifo模式,FX2本身就是FIFO的主控设备。当FIFO被外部的设备控制时(外部设备主控),例如,和FPGA相连,就是处在Slave FIFO模式。
Slave FIFO模式下,包括了四个FIFO。他们能够工作在16位和8位模式。大概的系统框图如下:
其中硬件配置涉及的部分寄存器如下:
FX2的复位只能在普通的IO模式下进行,在fifo模式下是不可以进行复位的,所以你看在slave模式下是没有复位信号的。
如果想把芯片配置到SLAVE fifo模式下,需要对IFCONFIG 这个寄存器进行设置,fifo和外部主控的信号连线如下图:
SLOE:FD数据信号是双向的,可以通过SLOE信号线进行选择。低有效。
FIFOADR:选择哪一个FIFO挂到FD总线上。低有效。
SLRD、SLWR:读写信号。分为了同步和异步两种模式。低有效。
FD:总线。可以配置为8bit和16bit模式。8模式下,用的是PORT B。16模式下,用的是PORT B和 PORT D。(PORT的概念可以去FX2手册中找)。上电默认是16位模式。其中,如果改成8位模式的时候,PORT D可以作为普通IO使用。
IFCLK:可以使用内部时候和外部时钟。内部时钟的时候,时钟频率30/48可以选择。外部时钟的时候,5到48MHZ时钟可以调整。上电默认是内部时钟48MHZ。
FLAG(FLAGA, FLAGB, FLAGC, FLAGD):这些信号主要用于监测FIFO状态,具体功能可以配置。FLAGA, FLAGB, and FLAGC 这些都可以工作在indexed和fixed两个模式。FLAGD 只能工作在FIXED模式。
Indexed模式下,flag只能显示所选择的fifo的状态,FLAGA/B/C分别代表“programmable-level” ,full,empty。Fixed模式下,flag显示特定fifo的状态,而无论是否选择了该FIFO。full,empty默认是低有效,也可以用寄存器进行配置。
上电默认是Indexed模式。
FIFOADR:选择哪一个FIFO。
PKTEND:无论设置的数据长度是多少,有效该信号则代表数据传输的结束。一般用于长度比较短的数据。例如,如果通过寄存器设置的数据长度是512byte.当一次传输的数据长度短于512时,由于数据低于设置的长度,一般主控有两个方法让数据发送。一个就是发送虚拟的数据满足最终的长度。或者有效PKTEND脚,这样就能直接写短长度的数据。
SLCS:FIFO选通信号。该信号有效,则所有控制才有效。
3.时序
引脚的控制时序:控制管脚主要是SLOE(输出使能),SLED(读使能),SLWR(写使能),PKTEND(包尾),FIFOADR(FIFO选择)。这里的读写都是以外部的主设备角度讲的。
读时序:SLOE使能FD总线脚。 同步模式,SLRD在时钟上升沿有效,SLRD有效同时FIFO计数加一个。异步模式则在SLRD变化时有效。他们默认都是低有效。
写时序:同步模式,SLWR上升沿有效。默认都是低有效。
写案例:
典型写过程(相对于主机):
典型读过程(相对于主机):
注意:读过程比写过程多了对SLOE信号的使能。
异步时序暂时不做讨论。可以参照官方文档。
调试记录
(读):
Rd和oe的关系:按照官方推荐sloe是需要提前slrd有效的
主要的参考资料:
1.《USB+FPGA开发文档》(某开发板资料)
2.《FX2开发手册》官方手册
3.《GPIF开发手册》本文中未做参考,有需要的可以看看
所有资料均在本人的CSDN的资源页面。