现在使用cyusb3014,将数据通过FPGA发送到CYUSB3014再到电脑端, 每次发送1024个字节,固件使用的官方的固件, 时钟是100M,总线是32位宽,总的数据速率在640Mbps, 测试发现,每隔半个小时,就会出现flagA一直为0 ,不能写数据的情况,发现flagA 为低的时间比较长,大概至少有100ms左右, 导致我这边的数据没法写到cyusb3014去,从而数据丢失。想问下 ,为什么有时候flagA会一直为低,且时间比较长了?
已解决! 转到解答。
这个16KB可能是因为brust 为16, endpoint size为1024, 所以在传完16k数据后时序上会有一个间隔。可以参考GPIF中对brust write的仿真时序。
您看看FX3的log是否有commit buffer failure. 对于Synchronous Slave FIFO Read,FlagA为低的时间应该为thread切换socket的时间,不应有100ms。对于Asynchronous Slave FIFO Read,FLAGA为低表明DMA buffer已满,这时可能因为commit failure导致此问题。
Regards,
Eddie
艾迪,你好
现在我们板子上只有JTAG接口,没有串口,log是必须通过串口才能打印么? 我们现在img用的是slave fifo sync. 因为每次只发1024个字节长度,所以用的是loopback, 没有使用stream_in_out, 下面是我们.h的设备,能帮忙看下有问题么?
你这个loopback和stream_in_out定义的是什么?我们SDK中的example并没有这两个定义。
Hi
下面这个是你们官方的AN84868里的.h文件的截图,我刚说错了,我意思是我用的是LOOPBACK_SHRT_ZLP 这个定义。因为每次只想传输1024个字节的。这个buffer好像刚好是1K的
如果你的目标是只是想向PC端传数据,没有必要用loopback,这个是测试用的,有两条DMA通道。
你可以参考下我们FX3 SDK里面的SlaveFifoSync,
Hi
我目标是只想向PC端传输数据,单向的, 那意思是使用那个stream_in_么? 但是我每次希望只发送1024个字节, 那个stream_in_out 好像每次是需要写入 16KB数据。
这个16KB可能是因为brust 为16, endpoint size为1024, 所以在传完16k数据后时序上会有一个间隔。可以参考GPIF中对brust write的仿真时序。
请问楼主问题解决了吗?我也遇到了这样的问题!
正常工作一段时间后,莫名其妙的就不工作了。用的官方AN65974的源代码,停止时,FLAGA是高,FLAGB为低,一直持续。