zhanggy_zju
驱动牛犊
驱动牛犊
  • 注册日期2003-10-04
  • 最后登录2004-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1543回复:6

FX2 slave fifo的问题,大侠帮忙看看。

楼主#
更多 发布于:2003-11-17 15:23
我试着开EP2端口做Auto out传输,并且是外部master用异步方式读取。
用20MHz的有源晶振输出时序信号给SLOE和SLRD引脚。
FIFOADR0,FIFOADR1接地,以选通EP2。
固件程序见附件。
为什么用CONTROL PANEL每次512字节往EP2发送,发送4个后,就显示不能发送。
Max oprations Pending Limit Reached.
似乎FIFO口并没有把数据送出去,难道FX2 Slave FIFO真的像别人告诉我那样不
能用auto out方式?
还是我的固件有错误。
哪位大侠帮忙看看,谢谢!
//bow
附件名称/大小 下载次数 最后更新
2003-11-17_periph.c (7KB)  24

最新喜欢:

lmhhlmhhlmhhlm...
free_man_free
驱动小牛
驱动小牛
  • 注册日期2003-08-19
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-17 22:57
为什么用CONTROL PANEL每次512字节往EP2发送,发送4个后,就显示不能发送。
Max oprations Pending Limit Reached
------------------------------------------------
因为我们一般采用EP2,512大小,如果是2倍BUFFER的话,那么大小就是1024;4倍BUFFER的话,可存储的就是512×4=2048;所以最多只能发送四次!
 :D
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-19 12:45
我试着开EP2端口做Auto out传输,并且是外部master用异步方式读取。
用20MHz的有源晶振输出时序信号给SLOE和SLRD引脚。
FIFOADR0,FIFOADR1接地,以选通EP2。
固件程序见附件。
为什么用CONTROL PANEL每次512字节往EP2发送,发送4个后,就显示不能发送。
Max oprations Pending Limit Reached.
似乎FIFO口并没有把数据送出去,难道FX2 Slave FIFO真的像别人告诉我那样不
能用auto out方式?
还是我的固件有错误。
哪位大侠帮忙看看,谢谢!
//bow


谁跟你说的slave fifo不能用auto out方式???打他pp!
你的现象说明端点里的数据没有被外部master读走,因此你只能填充四次,如果你设的是双缓冲的话,说明外部读了两个包就停止了,因此一个是查你外部的时序是否和68013的slave fifo的读时序符合,另一个是查你得固件设置是否有问题,如ifclk的设置,读信号和标志信号的高低有效是否和外部逻辑匹配等。
zhanggy_zju
驱动牛犊
驱动牛犊
  • 注册日期2003-10-04
  • 最后登录2004-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-24 13:35
谢谢jinghuiren大侠!
问题解决了,是REVCTL这个寄存器设置错误。
还有个问题想请教大家。
可不可以在保证高速的情况下,让FIFO口不停的传输数据而EMPTY信号一直为非空呢?
我用VC编的主机端程序,计算一个大文件传输需要的时间。
--当我把文件分为4k往端口(out)发送的时候,700M的文件用了140000ms左右的时间。
那差不多有5MB/s的速度,虽然不高但也能达到要求。
而EMPTY标志(比如FLAGA引脚)也有时为EMPTY,表示端点为空。
--当我把文件分大为8k,16k,32k,64k发送的时候,尤其是32k,64k时,EMPTY标志总是为非空。
但是这时速度有很大影响,传输同样的文件要花几倍的时间。
我想应该是文件分割较大时,传输出错重新发送的时间也用得更多。
那么我可不可能在保证4MB/s左右的速度下,让EMPTY为非空呢?
谢谢!
zhanggy_zju
驱动牛犊
驱动牛犊
  • 注册日期2003-10-04
  • 最后登录2004-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-25 13:01
我顶
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-11-25 18:31
应该不是出错的原因,你可以试试把端点设成四缓冲,然后把其它的应用程序都关掉,在传输是不要做其它的事情,这样应该是最快的。
还有就是理论上说当你每次请求的数据量大的时候效率是增高的,也就是说应该是64k的数据最快。
zhanggy_zju
驱动牛犊
驱动牛犊
  • 注册日期2003-10-04
  • 最后登录2004-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-26 13:46
应该不是出错的原因,你可以试试把端点设成四缓冲,然后把其它的应用程序都关掉,在传输是不要做其它的事情,这样应该是最快的。
还有就是理论上说当你每次请求的数据量大的时候效率是增高的,也就是说应该是64k的数据最快。

原来大于4K时传输慢的问题解决了,应该是我的晶振输出不稳定。
现在一次发送50K,速度还不错。
但是jinghuiren大侠,你说的\"64k数据最快\"不对。我用64k传的时候总是出错,根本没法传数据。再看看《EZ-USB General Purpose Driver Specification》中IOCTL_Ezusb_BULK_WRITE的说明,nOutBufferSize必须小于64k。^_^
游客

返回顶部