本帖最后由 kury123 于 2015-8-4 18:29 编辑
本人新手,最近在弄USB和FPGA通信,遇到一个很奇怪的问题,希望高手们能够帮帮忙指点一下。
我是参照AN61345的例子来测试slaveFIFO的同步传输,下位机verilog代码基本就是使用的cypress给的,没有更改,即检测FLAGB和FLAGC,如果EP6为空,则执行IN传输,如果EP2为满则执行OUT传输,读数据。上位机调试使用的是USB control center。
固件设置slaveFIFO同步传输,外部IFCLK30M,EF2 BULK OUT 512 x2,EP6 BULK IN 512 x2,EP1、EP4和EP8禁用。EP2设置AUTO OUT,16位模式; EP6设置AUTO IN,16位模式,使能零长度包,自动传输字节512.
首先,对于IN传输,只要上位机将数据读取之后,FLAGB(满标志位)无效,下位机开始往FIFO写数据,但是上位机第一次和第二次读到的是之前发送的数,第三次读到的才是刚刚发送的数,好像EP6里面多出来512个字节上一次发送的数。这个问题不知道该如何解决。
其次,对于OUT传输,只要下位机检测到FLAGC(空标志位)无效,就开始读取FD[15:0]的数据。但是,读取的数据始终不对,通过Bus Hound查看USB发送的数据是正确的,FLAG能够正常跳转。比如我发送偶数个变化的16位数,但是FPGA接收到的数却是不变的,始终为发送的第一个数或者第二个数。另外,从SLOE和SLRD的有效周期来看,读到的数据比实际发送的数据少一个。
以上就是我目前遇到的两个问题,不知道哪位同仁有没有遇到过同样的情况,或者哪位高手能够帮我解决一下,感激不尽。也可提供必要薪酬。
|