4 Replies Latest reply on Jan 23, 2019 9:53 PM by YangyangC_06

    CYUSB3014 在 Bulk IN时总报错Error Code: 997

    xixi_3447666

      在如图架构中, 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工程。

        • 1. Re: CYUSB3014 在 Bulk IN时总报错Error Code: 997
          YangyangC_06

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

          • 2. Re: CYUSB3014 在 Bulk IN时总报错Error Code: 997
            xixi_3447666

            我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写数据了

            不是问题在哪里?谢谢

            • 3. Re: CYUSB3014 在 Bulk IN时总报错Error Code: 997
              xixi_3447666

              找到原因了。

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

              • 4. Re: CYUSB3014 在 Bulk IN时总报错Error Code: 997
                YangyangC_06

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