4 Replies Latest reply on Sep 4, 2013 12:11 PM by anand.srinivasan.asokan

    Bulk_IN and Interrupt_IN Endpoint Problems

    jens.wagner
              Hi! I'm developing a chain for data transfer from a testing system with a FPGA over GPIF II and FX3 to a PC-Host. My first tests with the demo applications for fx3 and the host ( Control Center,...) were successful. At the moment I have a Problem with the endpoint on the host, Interrupt_In and Bulk_In. I have on the host a c#-application with 2 threads for transmit and receive data. sending data to the testing System works perfect. But I'm having following Problems while receiving: Interrupt endpoint: how can I detect an Interrupt? there is no example in the CyUsb .Net Reference...any flag or Routine, there is no document which describe the Interrupt endpoint exactly Bulk_In_Endpoint: timeout problems or data length...i'm not sure and not able to programm a interface to read continuously from a bulk_in_endpoint. The System sends data after starting by sending the command over the transmit_thread....Thank you in advance!   
        • 1. Re: Bulk_IN and Interrupt_IN Endpoint Problems
          anand.srinivasan.asokan

           Interrupt is actually an misnomer in this sense. The endpoint doesn't actually send an interrupt, you'll have to poll it to get the data.
          Have you tried using control center to do the IN transfer to isolate whether the issue is with the firmware or the host application?
          Regards,
          Anand

          • 2. Re: Bulk_IN and Interrupt_IN Endpoint Problems
            jens.wagner
                    ok, but how can i effective poll in the Interrupt case? i found an endpoint describtor property called bInterval, which is used to specify the polling interval of certain transfers. but the value is always 0 and in the CyUSb.dll .NET it is only a get-function. and when reading data with Xfer() and getting a false-return, the endpoint Transfer is blocked. Yes, i tried first with the control Center and the single Transfer works. in the burst write mode from the fpga i get the data in the callback-function of the Firmware and send them to the endpoint. but the in-Transfer on the bulk_endpoint on the host with XferData() returns with false. i currently have no idea, who to check continuously the endpoint_XX on the host, while irregular data can come from the testing System without a crashing endpoint....   
            • 3. Re: Bulk_IN and Interrupt_IN Endpoint Problems
              anand.srinivasan.asokan

               There is not much difference between single transfer and burst of transfers. You just queue the requests to achieve that. Does single transfer work properly in your application? You might want to make sure that part is right before trying burst of transfers.
              bInterval is provided by the device as part of the descriptor. So only it has a get-function associated with it. You just have to queue bunch of transfers based on your requirement. The lower driver stack will take care of the polling interval.
              Using asynchronous transfer (begindataxfer/waitforxfer/finishxfer) will give you better throughput and polling consistency if you're trying to do a streaming application.
              You can use our streamer application that comes as part of suiteusb as reference to develop your code.
               

              • 4. Re: Bulk_IN and Interrupt_IN Endpoint Problems
                anand.srinivasan.asokan

                  There is not much difference between single transfer and burst of transfers. You just queue the requests to achieve that. Does single transfer work properly in your application? You might want to make sure that part is right before trying burst of transfers.

                   

                bInterval is provided by the device as part of the descriptor. So only it has a get-function associated with it. You just have to queue bunch of transfers based on your requirement. The lower driver stack will take care of the polling interval.
                Using asynchronous transfer (begindataxfer/waitforxfer/finishxfer) will give you better throughput and polling consistency if you're trying to do a streaming application.
                You can use our streamer application that comes as part of suiteusb as reference to develop your code.