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用于设置这四个引脚的功能。程序举例如下:

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

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

   FIFORESET =0x80;             // activate NAK-ALL toavoid race conditions
SYNCDELAY; // see TRM section 15.5.4
FIFORESET =0x02; // reset, FIFO 2
SYNCDELAY; //
FIFORESET =0x04; // reset, FIFO 4
SYNCDELAY; //
FIFORESET =0x06; // reset, FIFO 6
SYNCDELAY; //
FIFORESET =0x08; // reset, FIFO 8
SYNCDELAY; //
FIFORESET =0x00; // deactivate NAK-ALL
SYNCDELAY; //

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

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

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

  CY7C68013A的Slave FIFO方式指示引脚的高低有效状态不是固定的,是受寄存器FIFOPINPOLAR的控制的,如图9所示,默认情况下此寄存器的值为0x00:

图 9 FIFIPINPOLAR寄存器

  在默认状态下,此寄存器的各位均为0。那就表示信号低有效:

表1 FIFOPINPOLAR = 0x00时,各位的指示说明
位名  bit = 1‘b1 bit = 1’b0 
SLOE 禁止读 允许读 
SLRD  禁止读 允许读 
SLWR 禁止写 允许写 
 EF  FIFO里面有数据,非空  FIF0 Empty,所有缓冲区均空
 FF  FIFO所有的缓冲区还有空间,如果4个缓冲区中的一个缓冲区满,此bit = 1‘b1  FIFO Full,所有缓冲区均满

  同理:FIFOPINPOLAR = 0x1F(1'b0001_1111)时的情况,请自行分析。

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

  1. USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)

    转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...

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

    此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...

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

    Cy7c68013A驱动电路设计注意事项 转自:http://group.chinaaet.com/116/79029#0-tsina-1-71467-397232819ff9a47a7b7e80a4 ...

  4. USB小白学习之路(1) Cypress固件架构解析

    Cypress固件架构彻底解析及USB枚举 1. RAM的区别 56pin或者100pin的cy7c68013A,只有内部RAM,不支持外部RAM 128pin的cy7c68013A在pin脚EA=0 ...

  5. USB小白学习之路(6) IIC EEPROM读取解析

    IIC EEPROM读取解析 1. 编译错误处理(这里可以忽略) 在解压包解压了程序后,直接编译,出现如下错误. *** WARNING L14: INCOMPATIBLE MEMORY MODEL ...

  6. USB小白学习之路(3) 通过自定义请求存取外部RAM

    通过自定义请求存取外部RAM 1. 实验简述 此实验是对自定义的供应商特殊命令(vendor specific command bRequest = 0xA3)进行解析,程序中的read me说明如下 ...

  7. USB小白学习之路(5) HID鼠标程序

    HID鼠标程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...

  8. USB小白学习之路(4)HID键盘程序

    HID键盘程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...

  9. USB小白学习之路(2)端点IN/OUT互换

    端点2(out)和端点6(in)的out_in互换 注:这里的out和in都是以host为标准说的,out是host的out,在设备(Cy7c68013)这里其实是输入端口:in是host的in,在设 ...

随机推荐

  1. Jmeter学习前提:Jmeter安装

    一.Jmeter下载 1. 前提:已经安装 jdk8+ 1.1 JDK下载 a. 进入jdk8+下载地址:https://www.oracle.com/technetwork/java/javase/ ...

  2. 阿里云zabbix的python脚本

    由于阿里云只能用465端口.所以这个zabbix的脚本修改成了465端口的python脚本. 修改于https://www.jianshu.com/p/9d6941dabb47 #!/usr/bin/ ...

  3. eclipse安装tfs插件

    Eclipse安装TFS插件   1.打开Eclipse.点击菜单栏上的 “Help”——>选择“Install New Software”. 2.在弹出框中输入点击“Add”. 3.在弹出框中 ...

  4. 函数动态传参,命名空间,gloabal,nonlocal关键字

    一.函数参数->动态传参(形参的第三种) 动态参数分为两种: 1)动态接收位置参数 普通的位置传参: def func(quality_food,junk_food): print('我要吃', ...

  5. Spring Boot 2.x 整合 Redis最佳实践

    一.前言 在前面的几篇文章中简单的总结了一下Redis相关的知识.本章主要讲解一下 Spring Boot 2.0 整合 Redis.Jedis 和 Lettuce 是 Java 操作 Redis 的 ...

  6. 42)PHP,mysqli函数功能总结

    fetch----------------一个一个的取值,这个注意 fetch_array(),fetch_assoc(),fetch_object(),这三个方法的使用请看手册 请注意是FETCH, ...

  7. 34)PHP,PHP从数据库读取数据并在html中显示

    首先是我的数据库截图: 然后展示我的php文件: b.php文件: <?php $link= mysqli_connect('localhost','root','root'); // mysq ...

  8. jQuery性能优化与技巧

    1.使用最新版本的jQuery类库 jQuery的每一个新的版本都会较上一版进行Bug修复和一些优化,同时也会包含一些创新,所以建议使用最新版本的jQuery来提高性能,需要注意的是在更换版本之后,要 ...

  9. 一、安装Docker CE

    卸载旧版本 较旧版本的Docker被称为docker或docker-engine.如果已安装这些,需要卸载以及相关的依赖项. $ sudo yum remove docker \ docker-cli ...

  10. Java面试题3-附答案

    接口有什么用 1.通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类. 2.通过接口可以指明多个类需要实现的方法. 3.通过接口可以了解对象的交互界面,而不需了解对象所对应的类. 另:Ja ...