moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:3924回复:18

请教slave fifo模式下的68013A同步读写问题。

楼主#
更多 发布于:2007-03-22 06:15
XDJMS好,
我现在用68013A与FPGA通信。68013A工作在slave fifo模式下,autoin,autoout,bulk transfer。现在异步读写已经测试过,工作正常。昨天开始测同步读,一个很奇怪的现象发生。当我用控制面板发送一个byte的数据给68013A时,out端点的empty flag确实从低变高了(低有效),也就说明有数据到了fifo里,而且FPGA也正确读进了这个byte数据。按理来说empty flag应该从高变到低。但是它却开始跳变,就像个clock。这样的话也导致我的FPGA开始乱读,因为FPGA开始读的条件就是empty flag为高也就是68013A的fifo有数据了。但是empty flag这么乱跳,FPGA根本无法正常读了。我觉得问题应该出在68013A上,可查了半天的文档,也不知道是出于什么原因才导致empty flag乱跳。请论坛上的前辈帮忙想想问题出在哪里。不胜感谢!
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-03-22 10:33
请问您与pc通讯也用同步马?
mcu_boy
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-22 17:35
抱歉,我不太明白与PC同步什么意思。在我这个项目里,pc只是发送命令,然后device根据命令返回数据。
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-03-23 08:31
你的同步应该是fpga与fx2 fifo之间,是吗?我是说你fx2与 pc driver之间是iso or bulk?
mcu_boy
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-23 20:58
哦,是bulk传输,难道应该用iso传输吗?
alittlebug
驱动牛犊
驱动牛犊
  • 注册日期2005-07-28
  • 最后登录2011-07-07
  • 粉丝0
  • 关注0
  • 积分451分
  • 威望52点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-25 22:43
顶上去,我也有问题
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
6楼#
发布于:2007-03-26 09:31
不是,我做的bulk好像没有问题,你可以参考一下王成儒的书中的做法,

不过我在做iso时有漏桢情况,请同行指点!
mcu_boy
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-03-26 20:29
能详细说说吗,王成儒的书中有什么做法?上哪里下载这本书?本来我老板也让我用iso,我想bulk容易实现,所以先调一下bulk,也许调好之后会用到iso。今天又折腾一天,还是 不知道什么原因。很是郁闷!
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-03-26 20:44
我在论坛上找到这本书了,不过有点奇怪,只有三章,而且没什么内容啊。
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
9楼#
发布于:2007-03-27 08:49
论坛中有下载,最近该书第二版出版,不过大同小异!
mcu_boy
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-03-27 12:41
wjt810907你是在论坛上下的吗?我下的没什么内容啊。我该看什么?
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
11楼#
发布于:2007-03-27 12:54
我刚把第一第二版整理上传了
mcu_boy
amygirl
驱动牛犊
驱动牛犊
  • 注册日期2006-11-07
  • 最后登录2008-03-06
  • 粉丝0
  • 关注0
  • 积分360分
  • 威望37点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-03-27 15:27
我也做过类似的东西,给点我的教训给你吧。同样的方案,但是没有遇到你这样的问题,如果确定是fifo空标的问题,你可以检查一下是不是固件原因,另外,最好把out端点空标编固定为flagX,如果不这样的话,非得用a0a1选通端点,才能对应的表示端点满空信号,有可能你看到的是端点切换所对应的空标变化.同步信号我们是从ifclk引出到fpga的,另外发一个字节的数下来也不保险,如果你拿这个字去表示地址或者做控制用,万一丢了或者读错了怎么办?可以充满了,读出来比较了再丢.还有,数发下来后,空标变化之后再计数几个时钟周期以后去取数.
驱网无线,快乐无限
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-03-28 14:54
谢谢楼上MM的经验。您说的空标变化之后再计数几个时钟周期以后去取数.能解释一下这么做的原因吗?
amygirl
驱动牛犊
驱动牛犊
  • 注册日期2006-11-07
  • 最后登录2008-03-06
  • 粉丝0
  • 关注0
  • 积分360分
  • 威望37点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-03-28 21:55
让数据稳定一下
驱网无线,快乐无限
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-03-29 20:06
旧问题解决了。我先是又仔细的查了下文档。在第351页发现了EPXFIFOCFG寄存器的INFM1和OEP1这两位跟同步有关。于是在固件里设置了这两位。结果empty flag就不跳变了,FPGA读正常工作。但是控制面板却只能往68013A里发送数据有限地几次,再发送就发送失败了。但是有了INFM1和OEP1的提示,我就按着楼上MM的重要经验"空标变化之后再计数几个时钟周期以后去取数"改了下FPGA程序,结果读彻底正常了,控制面板发送多少次数据都没问题了。后来又测试了FPGA的写,结果也正常了。严重建议看到这个帖子的朋友重视楼上MM的宝贵经验。

旧问题解决了,又有了个新问题。我昨天测试FPGA写的时候,所写的数据都是512 bytes的整数倍。后来突然想到如果不是整数倍的话最后一个包不满的情况,也就是pktend信号的设置问题。我的想法是,不管最后一个包是否是512 bytes,我都要使pktend信号有效。这样的话如果是满包挺多再提交一个长度为零的包,如果不是满包,那就正好可以使这个不满包提交了。于是我让FPGA只写64 bytes的数据给68013A,我观察pktend确实有跳变,也就是从初始的无效变成了有效,接着又无效。但是用控制面板取数据却失败。我仔细看了文档关于设置pktend的要求。Pktend assertion 的时候FIFOADDR保持稳定,固件里的EPXAUTOINLENH:L也设置了,pktend有效的时候full flag是无效的(也就是buffer不满)。还有什么需要注意的地方我没有注意吗?为什么设置了pktend信号也无法取到不满包呢?希望大家继续关注继续提供帮助。

另外,怎么给分啊?
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
16楼#
发布于:2007-03-29 20:36
谢谢大虾宝贵的经验

请问INFM1和OEP1 与 同步有关系吗?

我的设计是fpga控制slave fifo(fpga异步写), fx2 usb与pc之间是iso的,发现有丢桢和多桢现象,
大约1/1500~1/2000的样子

但是固件中的INFM1和OEP1 没设置(用默认)
mcu_boy
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
17楼#
发布于:2007-03-29 20:39
丢桢和多桢的检测:

1、通过fpga将桢进行编号

2、在pc端进行检测,统计
mcu_boy
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
18楼#
发布于:2007-03-29 20:43
设置EPXAUTOINLENH:L,我的32B/frame就是这样设计的,成功了!
mcu_boy
游客

返回顶部