(转)USB小白学习之路(12) Cy7c68013固件之Slave FIFO

Cy7c68013固件之Slave FIFO

转自:http://blog.csdn.net/zengshaoqing/article/details/53053539

 选择SlaveFIFO传输方式

  SlaveFIFO传输示意如图1:

图1 Slave FIFO传输示意图

  在Slave FIFO方式下,FX2LP内嵌的8051固件的功能只是配置Slave FIFO 相关的寄存器以及控制FX2LP何时工作在Slave FIFO模式下。一旦8051固件将相关的寄存器配置完毕,且使自身工作在SlaveFIFO模式下后,外部逻辑(如FPGA)即可按照SlaveFIFO的传输时序,高速与主机进行通讯,而在通讯过程中不需要8051固件的参与。

  在SlaveFIFO方式下外部逻辑与FX2的连接信号图如图2所示:

图 2 FX2 SlaveFIFO模式端口引脚连接信号

  SlaveFIFO传输方式可分为同步和异步两种,由于同步方式对时钟要求严格,故选择异步传输方式。以下为异步SlaveFIFO读写方式:

 异步SlaveFIFO读

  异步SlaveFIFO读的标准连接图如图3所示:

图 3 异步FIFO读引脚连接

  异步Slave FIFO读的标准时序如下:

  IDLE:当读事件发生时,进状态1;

  状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2;

  状态2:如FIFO空,在本状态等待,否则进状态3;

  状态3:使SLOE有效,使SLRD有效,从数据线上读数,再使SLRD无效,,以递增FIFO读指针,再使SLOE无效,进状态4;

  状态4:如需传输更多的数,进状态2,否则进状态IDLE。

  状态跳转示意图如图4:

图 4  异步FIFO读状态跳转

  几种情况的时序图示意如图5所示(FULL,EMPTY,SLRD,SLOE均假定低有效):

图 5 异步FIFO读时序

 异步Slave FIFO写:

  异步Slave FIFO写的标准连接图如图6(其实这个图是有误的,自己看看呗):

图 6 异步FIFO写连接图

  异步Slave FIFO写的标准时序如下:

  IDLE:当写事件发生时,进状态1;

  状态1:使FIFOADR[1:0]指向IN FIFO,进状态2;

  状态2:如FIFO满,在本状态等待,否则进状态3;

  状态3:驱动数据到数据线上,使SLWR有效,再无效,以使FIFO写指针递增,进状态4;

  状态4:如需传输更多的数,进状态2,否则进状态IDLE。

  状态跳转示意图如图7(这个图也有错误):

图 7 异步FIFO写状态跳转

  几种情况的时序图示意如图8(FULL,EMPTY,SLWR,PKTEND均假定低有效):

图 8 异步FIFO写时序

  Slave FIFO模式下常用寄存器


IFCONFIG


接口配置寄存器

 
EPxFIFOPFH/L


FIFO 可编程PF状态长度


PINFLAGAB


FLAGx引脚配置

寄存器


PORTACFG


端口A配置


PINFLAGCD


INPKTEND


强制结束IN传输寄存器


FIFORESET


端点缓冲复位寄存器


EPxFLAGIE


端点FIFO中段


FIFOPINPOLAR


引脚极性设置寄存器


EPxFLAGIRQ


EPxCFG


端点2/4/6/8配置


EPxFIFOBCH:L


端点FIFO计数


EPxFIFOCFG


端点FIFO配置


EPxFLAGS


端点状态标志寄存器


EPxAUTOINLENH:L


端点长度设置


EPxFIFOBUF


端点缓冲寄存器

  编程举例

  cy7c68013-56在使用Slave FIFO进行数据传输的时候,默认EP2、EP4作为OUT端点,EP6、EP8作为IN端点。一般要用到FLAGA,FLAGB,FLAGC,FLAGD几个引脚,用于得到端点的状态,寄存器PINFLAGSAB,PINFLAGSCD用于设置这四个引脚的功能。程序举例如下:

1 PINFLAGSAB =0xe8;  // FLAGA - fixed EP2EF(empty flag), FLAGB -fixed EP6FF(full flag)
2 SYNCDELAY;         //FLAGA引脚,EP2空时为0,非空为1,FLAGB引脚,EP6满为0,非满为1。信号有效电平通过FIFOPINPOLAR寄存器设置,0为低有效,1为高有效,默认都为低有效。
3 PINFLAGSCD =0xac;  // FLAGC - fixed EP2FF, FLAGD - fixed EP6EF
4 SYNCDELAY;         //FLAGC引脚,EP2满时为0,非空为1,FLAGD引脚,EP6空为0,非满为1

FIFORESET是用于FIFO状态复位的。复位FIFO如下:

 1   FIFORESET =0x80;             // activate NAK-ALL toavoid race conditions
 2   SYNCDELAY;                   // see TRM section 15.5.4
 3   FIFORESET =0x02;             // reset, FIFO 2
 4   SYNCDELAY;                   //
 5   FIFORESET =0x04;             // reset, FIFO 4
 6   SYNCDELAY;                   //
 7   FIFORESET =0x06;             // reset, FIFO 6
 8   SYNCDELAY;                   //
 9   FIFORESET =0x08;             // reset, FIFO 8
10   SYNCDELAY;                   //
11   FIFORESET =0x00;             // deactivate NAK-ALL
12   SYNCDELAY;                   //

EPxFIFOCFG,用于设置端点的操作方式。

1  EP2FIFOCFG =0x11;           //AUTOOUT="1", WORDWIDE="1"
2  SYNCDELAY;                  //自动输出端点,8位数据总线
3  EP4FIFOCFG =0x11;           // AUTOOUT="1",WORDWIDE="1"
4  SYNCDELAY;                  //自动输出端点,8位数据总线
5  EP6FIFOCFG =0x0c;           // AUTOIN="1",ZEROLENIN="1", WORDWIDE="1"
6  SYNCDELAY;                  //自动输入端点,允许0长度端点,8位数据总线
7  EP8FIFOCFG =0x0c;           // AUTOIN="1",ZEROLENIN="1", WORDWIDE="1"
8  SYNCDELAY;                  //自动输入端点,允许0长度端点,8位数据总线

注:其实这里才是最重要的(当然,上面的提到的读写FIFO的状态机也是很不错的):

FLAGA引脚,EP2空时为0,非空为1,FLAGB引脚,EP6满为0,非满为1。信号有效电平通过FIFOPINPOLAR寄存器设置,0为低有效,1为高有效,默认都为低有效。

原文地址:https://www.cnblogs.com/kybyano/p/8215728.html

时间: 2024-08-28 19:06:51

(转)USB小白学习之路(12) Cy7c68013固件之Slave FIFO的相关文章

USB小白学习之路(9) CY7C68013A Slave FIFO模式下与FPGA通信

CY7C68013A Slave FIFO模式下与FPGA通信 CY7C68013A的时钟是由FPGA提供的24MHz,RESET引脚也是由FPGA控制. 1.开始时没有给FPGA烧录程序,将CY7C68013A接到PC上,安装驱动后,是检测不到device的,经查找,原因有两个: ①没有时钟,这种情况下需要先让FPGA跑起来,为CY7C68013A提供时钟 ②复位引脚没有控制,因为CY7C68013A的复位时低有效,如果FPGA的引脚不控制,就会使得此引脚电平不固定,CY7C68013A处于复

(转)USB小白学习之路(8)FX2LP cy7c68013——Slave FIFO 与FPGA通信

此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 1 USB 概述 USB名称解释 USB是通用串行总线(Universal Serial Bus)的缩写.能过在计算机运行过程中随意地接入,并且立刻就能投入工作,那么这样的特性叫做即插即用PnP(Plug and Play).由于USB是主从模式的结构,设备与设备之间.主机与主机之间不能互连.为了解决这个问题,出现了USB OTG(On the go),它的做法:同一

(转)USB小白学习之路(11) Cy7c68013驱动电路设计注意事项

Cy7c68013驱动电路设计注意事项 转自:http://group.chinaaet.com/116/79029#0-tsina-1-71467-397232819ff9a47a7b7e80a40613cfe1 CY7C68013的驱动电路非常简单,除了提供24MHz时钟源,设计好USB差分接口,做好电源滤波,其他信号均可由数字控制.这里简单的对Bingo设计CV7C68013A-56PVXC驱动电路进行介绍,如下所示: (1)首先,USB差分电路设计的好坏,决定了实际能运行的速率. 采用U

USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析

void TD_Init(void) { CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);          //设置CPU时钟频率为48M,寄存器CPUCS的位如下所示.此语句就是将CPUCS的b4,b3位设为10, //同时不改变其他bit. 图1 寄存器CPUCS的描述 //USBCS = Ox80; //set high speed mode 添加此语句时工程编译不通过 IFCONFIG = 0XCB; //选择内部时钟频率为48M,FIFO/GPIF

小白学习之路,基础四(函数的进阶)

一,内置函数 前面已经认识了函数,对函数都有所了解了,其实呢,在Python中提供了很多内置的函数方便给我们调用.下面会给大家提到一些常用的常用内置函数的用法,当然还有一些其他没讲到的,你也可以看参考文档,深入学习一波.咳咳咳,不多说了,直接进入装逼的代码环节. 更多的内置函数详情请参考http://www.runoob.com/python3/python3-built-in-functions.html 1 abs(-3) #取绝对值 2 all([1,2,5,0]) #当全部为真或者全部不

小白学习之路,网络编程(下)

一,socket进阶 在前面的博客中讲到了一些基本的计算机网络知识,有一点也是为我在要考传输与交换看到一个题,然后就看到说ARP属于网络层,因为ARP协议跟网络相关,但是我前面的博客说的是ARP协议属于数据链路层.当时我就呆了,不会讲错了吧,后来查了一下,原来都是可以的,ARP协议有的人说在网络层也行,在数据链路层也行.当然这只是一个小插曲.昨天在讲到socket的几种情况还没解决,这篇文章就跟大家解决.大概有几个问题,一个是每次只能接受一定数据大小的数据,如果数据太大怎么办?还有提到的粘包的问

Python小白学习之路—变量、字符编码、字符拼接

变量命名规则: (1)变量名只能是字母,数字,下划线的任意组合. ex:_amber_666NAme (2)关键字不能声明为变量名 ex:['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not'

学习之路 1-2

1. 属性选择符(7个)2. font-family 字体用法 p{font-family:'黑体',‘宋体’;}3. font-size 字体大小 p{font-size:12px;}4. font-weight p{font-weight: bold;}5. font-style 样式 P{font-style: italic;}6. font 缩写 p{font: italic bold 14px/22px "微软雅黑";}7. color 颜色 P{color:red;}8.

Python学习之路12?模块与包

一 模块 1.1 什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 1.2 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script. 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理.这时我们不仅仅可以把