moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:3931回复: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乱跳。请论坛上的前辈帮忙想想问题出在哪里。不胜感谢!
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-22 17:35
抱歉,我不太明白与PC同步什么意思。在我这个项目里,pc只是发送命令,然后device根据命令返回数据。
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-23 20:58
哦,是bulk传输,难道应该用iso传输吗?
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-26 20:29
能详细说说吗,王成儒的书中有什么做法?上哪里下载这本书?本来我老板也让我用iso,我想bulk容易实现,所以先调一下bulk,也许调好之后会用到iso。今天又折腾一天,还是 不知道什么原因。很是郁闷!
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-26 20:44
我在论坛上找到这本书了,不过有点奇怪,只有三章,而且没什么内容啊。
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-27 12:41
wjt810907你是在论坛上下的吗?我下的没什么内容啊。我该看什么?
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-03-28 14:54
谢谢楼上MM的经验。您说的空标变化之后再计数几个时钟周期以后去取数.能解释一下这么做的原因吗?
moov2000
驱动牛犊
驱动牛犊
  • 注册日期2007-01-24
  • 最后登录2007-07-17
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
7楼#
发布于: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信号也无法取到不满包呢?希望大家继续关注继续提供帮助。

另外,怎么给分啊?
游客

返回顶部