打印

Slave FIFO 与FPGA通信的问题

[复制链接]
8006|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happysheep224|  楼主 | 2012-7-3 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的固件程序将EP6设置为512大小,3重缓冲,8bit,IN方向,bulk传输,FLAGB(满标志位)低电平有效。现在的现象时,我用FPGA模拟一个激励,是从00000000~11111111依次加1循环。我用的是通用驱动程序,板子上有E2PROM,当打开USB console的时候显示如下


EZ-USB interface显示如下:
点击bulk trans 按钮,屏幕中打印出顺序的数据,可以判断此时PC接收到了来自FPGA的数据,但是此时FLAGB变为低电平(FLAGB为满标志位,低电平有效)。我很好奇,我设置的端点模式是AUTO IN,为什么FLAGB还会变为低电平呢?此外,bulk 传输时只有我在点击按钮的时候才传输,还是一直在传输?
还有一个疑问,就是我设置的位宽为8bit,即FD[7:0],软件上打印出来的数是01 FF 02 FF 03 FF...这是为什么呢?
一下是我的TD_Init()函数中的配置:
void TD_Init(void)             // Called once at startup
{
    IFCONFIG = 0x03;  // use IFCLK pin driven by external logic (5MHz to 48MHz)
       // use slave FIFO interface pins driven sync by external master
SYNCDELAY;
REVCTL = 0x03;   // REVCTL.0 and REVCTL.1 set to 1
SYNCDELAY;
EP6CFG = 0xE3;   // sets EP6 valid for IN
       // and define the endpoint for 512 byte packe   
SYNCDELAY;
FIFORESET = 0x80;  //reset all FIFOS
SYNCDELAY;
FIFORESET = 0x82;
SYNCDELAY;
FIFORESET = 0x84;
SYNCDELAY;
FIFORESET = 0x86;
SYNCDELAY;
FIFORESET = 0x88;
SYNCDELAY;
FIFORESET = 0x00;
SYNCDELAY;
EP6FIFOCFG = 0x0D;  // lets the EZ-USB auto commit IN packet
SYNCDELAY;    // gives the ability to send zero length packets
       // sets the slave FIFO interface to 16-bit
PINFLAGSAB = 0x00;  // defines FLAGA as prog-level flag, pointed to by FIFOADR[1:0]
SYNCDELAY ;    // FLAGB as full flag, as pointed to by FIFOADR[1:0]
PINFLAGSCD = 0x00;  // FLAGC as empty flag, as pointed to by FIFOADR[1:0]
SYNCDELAY;    // won't generally need FLAGD
  PORTACFG = 0x40;  // config the PA7 pin as SLCS
SYNCDELAY;
FIFOPINPOLAR = 0x00; // set all slave FIFO interface pins as active low
SYNCDELAY;
EP6AUTOINLENH = 0x02; // EZ-USB automatically commits data in 512-byte chunks
SYNCDELAY;
EP6AUTOINLENL = 0x00;
SYNCDELAY;
}

相关帖子

沙发
happysheep224|  楼主 | 2012-7-3 10:02 | 只看该作者
我在编写完FPGA的控制代码之后,驱动部分我是直接用的CYPRESS公司提供的通用型驱动,固件程序我只是在框架上改动了TD_Init函数,其他都未动,然后就做成了现在的状态。我要完成的功能就是用EP6接受FPGA发来的数并且传送到PC机上,速度在100Mbps以上。请问接下来我要干些什么呢?很是迷茫,请高手指点一下!感激不尽!

使用特权

评论回复
板凳
happysheep224|  楼主 | 2012-7-3 10:04 | 只看该作者
还有就是,我在往E2PROM里面下载一个以前的固件程序之后,板子插到电脑之后,CyConsole.exe软件无法识别USB Device,我知道是固件程序有问题,但是我却没办法重新烧写E2PROM了,遇到这种情况各位大侠是怎么解决的呢?

使用特权

评论回复
地板
dqyubsh| | 2012-7-3 10:38 | 只看该作者
最后一个问题是这样的,SDA线上预设一个跳线,当出现这种问题的时候,去掉跳线,CPU检测不到EEPROM,就会使用缺省的PID/VID枚举。一切重头再来。等到烧写EEPROM的时候,带电插上跳线即可。

使用特权

评论回复
5
dqyubsh| | 2012-7-3 10:46 | 只看该作者
关于FPGA,你去CYPRESS官网找**AN61345,AN63620。不看资料就动手,是要认真反省的。

使用特权

评论回复
6
dqyubsh| | 2012-7-3 10:56 | 只看该作者
你的数据应该是没把FIFO总线设置成8位,它缺省是16位工作的。

bulk 传输时只有我在点击按钮的时候才传输,还是一直在传输?——你写到FIFO之后,实际就已经到了主机端口,主机可以随时读走它,如果主机不读,你可以选择覆盖掉之前的数据,也可以选择不再继续写。由你的FPGA决定。

使用特权

评论回复
7
happysheep224|  楼主 | 2012-7-3 12:18 | 只看该作者
额,这个文档我也有看,不过看的可能不是很仔细,我会再认真看看的 5# dqyubsh

使用特权

评论回复
8
happysheep224|  楼主 | 2012-7-3 12:23 | 只看该作者
6# dqyubsh 也就是说,每次我按一次bulk trans按钮,主机就读取一次数据(512字节),FIFO就被清空一次,是这样的吗?我的FPGA是在不停地发数,当FIFO被填满的时候,FLAGB就变为低电平,这个时候如果FPGA继续发数,那么FIFO中的数据就被刷掉了,我的理解没错吧?

使用特权

评论回复
9
happysheep224|  楼主 | 2012-7-3 12:24 | 只看该作者
4# dqyubsh 原来是这样,看来下次设计电路的时候要把这个跳线加上,谢谢提醒!

使用特权

评论回复
10
happysheep224|  楼主 | 2012-7-3 19:29 | 只看该作者
6# dqyubsh 现在是这样,我的FLAGB是低电平有效,我的EP6是四重缓冲,当FLAGB为低的时候,我的FPGA控制器就不向SLAVE FIFO写数。此时,我点击CyConsole.exe中的Bulk trans按键,屏幕打印出来数,我连着点四下,屏幕打印出4*512Byte的数据。此时FLAGB又变回高电平,按理说我的程序应该继续写数啊,但是没有,而且我再点bulk trans,屏幕说trans failed。请问,我点击bulk trans是从主机中取出数据吗?还是说,只是屏幕打印出来这些数据而已?

使用特权

评论回复
11
dqyubsh| | 2012-7-3 19:48 | 只看该作者
主机能读回4个512,说明EP6的四倍缓冲都被读空了,再读就会trans failed。这是正常的。怀疑是FPGA这边没有继续填充数据。FPGA应该可以知道FIFO的"空"状态,空了就继续写。至于你说的标记,自己确认一下,我没仔细看。

FIFO只有复位操作以及满、空等状态,FPGA只能靠这几个信息与之通讯,要明确了解当前FIFO的情况,决定下一步怎么做。实际上,SLAVE FIFO模式就是把68013看成一组FIFO,别无他。

使用特权

评论回复
12
happysheep224|  楼主 | 2012-7-5 15:12 | 只看该作者
11# dqyubsh 好的,我再找找FPGA的bug,谢谢!

使用特权

评论回复
13
happysheep224|  楼主 | 2012-7-5 16:09 | 只看该作者
11# dqyubsh 现在Slave FIFO 的EP6可以收到数据,并且可以在屏幕上打印出来,我的问题是怎么能有让电脑自动从FIFO中取数,不用我每次点击Bulk Trans按钮,并能把这些数据保存下来呢?

使用特权

评论回复
14
dqyubsh| | 2012-7-5 21:30 | 只看该作者
恭喜你,硬件开发工作基本结束,整理一下文档,可以交给软件工程师了。

使用特权

评论回复
15
happysheep224|  楼主 | 2012-7-6 12:32 | 只看该作者
14# dqyubsh 是么?!哈哈,太好鸟~!请问根据大侠您的经验,主机从端口取数速度最快能达到多少呢?我的FPGA的FIFO往Slave FIFO写数的速度是24M*8bit,不知PC是否能达到比这个还高的速度

使用特权

评论回复
16
dqyubsh| | 2012-7-7 09:00 | 只看该作者
我没这方面的经验,没弄过这么快的速率,帮不到你。

使用特权

评论回复
17
mq395280980| | 2013-1-31 19:59 | 只看该作者
楼主,我也遇到同样的问题,请问你是怎么解决trans failed的问题的。

使用特权

评论回复
18
felixzdx| | 2013-2-1 21:24 | 只看该作者
也想知道 SLAVE FIFO到底是怎么工作的

使用特权

评论回复
19
wuwenjing91| | 2013-8-1 11:07 | 只看该作者
dqyubsh 发表于 2012-7-3 19:48
主机能读回4个512,说明EP6的四倍缓冲都被读空了,再读就会trans failed。这是正常的。怀疑是FPGA这边没有 ...

你好,我现在在用CY7C68013的slavefifo模式实现FPGA与PC机之间的数据传输。然后我把EP6设为autoin,缓存为512*4,每次写入2048个数后满FLAGB都会拉低很长时间才会恢复,有时甚至一直都不恢复,想问一下这个大概是什么原因?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

46

帖子

1

粉丝