cancel
Showing results for 
Search instead for 
Did you mean: 

USB Superspeed Peripherals

xixi_3447666
New Contributor II

pastedImage_3.png

在如图架构中, fireware用的是cypress提供的SlaveFifoSync.img,把cypress的control center工具略作修改,在PC机上不断进行BULK IN 传输测试,总是报BULK IN transfer failed with Error Code:997. 然后再也收不到任何数据,CYUSB3014的FLAG标志FLAGA=0、FLAGB=1。

易发生错误时的情况是:

     1、当FPGA里fifo变空时必报;

     2、上电后,FPGA里fifo有数据,刚开始BULKL IN测试偶尔报,

     3、当出错是,示波器观察发现总是BULK IN 3次后停止,但PC机未收到任何成功的数据

文档AN65974里说添加CyU3PUsbLPMDisable()函数,但SlaveFifoSync固件工程里已经添加这个函数了。

文档FX3_SDK_TroubleShooting_Guide.pdf的2.3的II建议添加CyU3PDmaChannelResume (chHandle, CyFalse, CyTrue)和

CyU3PDmaChannelSetSuspend (chHandle,CY_U3P_DMA_SCK_SUSP_NONE, CY_U3P_DMA_SCK_SUSP_EOP),添加后也没有效果,不知添加的位置是否正确。

请问这是什么原因呢?Error Code的含义是什么?在哪里能查到?谢谢

附件是SlaveFifoSync工程。

0 Likes
1 Solution
xixi_3447666
New Contributor II

找到原因了。

在c#中,host在每次BULK IN时调用 XferData(ref buffer, ref bytes)后,都会修改bytes值,导致bytes值可能小于512。所以在调用XferData(ref buffer, ref bytes)之前,先让bytes=512就解决了

View solution in original post

0 Likes
4 Replies
YangyangC_06
Employee

error code 997 一般会在Control center 工具没有成功获取到数据,有可能是FX3的buffer里面没有数据。如果你的FPGA只向FX3写了1024 byte的数据,那么在这1024数据被control center读取后,如果没有新的数据进来而control center又读数据,就会出现997的错误

0 Likes
xixi_3447666
New Contributor II

我PC机用的是USB2.0的接口,SlaveFifoSync.img固件定义的FLAGA=0表示FX3 full,FLAGB=0表示FX3 partial full。

我的FPGA是否向FX3写数据,靠判断FLAGA标志。当FLAGA=1且FLAGB=1,启动写操作,当FLAGB=0、或者FPGA的fifo空、或者写字节大于500个,则结束写操作,同时给出pktend标志(cypress例程也是这样,只是没有字节大于500个结束写操作这个条件)

这几天的实验发现,刚上电的第一次BULK IN容易出错,点击control center的reset按钮复位后继续操作,发现:

当FPGA向FX3写的过程中,如果将每次BULK IN写的字节数由512向0的方向减小,直到变为0都不会出错;如果将每次BULK IN写的字节数由0向大的方向增加,每增加一次就一定会出错。

出错现象就是报error code 997,在 control center 中 C# 代码增加打印信息:

OutputBox.Text += "Bulk IN ......" + " Error Code: " + FxDev.BulkInEndPt.LastError + "\r\n";

OutputBox.Text += CyUSBDevice.UsbdStatusString(FxDev.BulkInEndPt.UsbdStatus) + "\r\n";

显示:

Bulk IN ...... Error Code: 997

[state=HALTED status=UNKNOWN]

出错后FX3的FLAGA=0,FLAGB=1,由于写操作的条件不满足,所以这个时候FPGA无法再向FX3写数据了

不是问题在哪里?谢谢

0 Likes
xixi_3447666
New Contributor II

找到原因了。

在c#中,host在每次BULK IN时调用 XferData(ref buffer, ref bytes)后,都会修改bytes值,导致bytes值可能小于512。所以在调用XferData(ref buffer, ref bytes)之前,先让bytes=512就解决了

View solution in original post

0 Likes
YangyangC_06
Employee

Xferdata里的参数 “长度” 是个返回值,调用后会把实际获取到的数据长度填充到里面。

0 Likes