11 Replies Latest reply on Mar 18, 2014 8:21 AM by vavc

    How to test ISO transfer

    wang.fei

       Hi 

         

      i'm using FX2LP in ISO & GPIF

         

      i config EP2 as ISO OUT , AUTOOUT = 1; EP6 as ISO IN, AUTOIN = 1;

         

      i want to test is there any packet missing during ISO IN/OUT and GPIF FIFO read/write , but the ez-usb cpu can't cap isoerr interrupt in this configuration, and the host aways says the iso transfer is successful.

         

      what do i need to do ?

         

      thanks !

        • 1. Re: How to test ISO transfer
          rama.sai.krishna.vakkantula

           Hi,

             

          If you are interested in knowing whether data is missing at the GPIF interface itself, then you can probe for FULL flag of EP6 to find whether you are loosing data when GPIF is reading data.

             

          Thanks,

             

          Sai Krishna.

          • 2. Re: How to test ISO transfer
            wang.fei

            thanks !

               

            if i don't use gpif or slave fifo , and rearm an endpoint by writting EPxBCL for the ISO OUT endpoint .

               

            is it the only way i can find if there any packet lost during ISO OUT , to cap the ISOERR interrupt for this endpoint?

               

            thanks!

            • 3. Re: How to test ISO transfer
              prajith.cheerakkoda

               Hi,

                 

               

                 

              Can you please detail your application? If you are particular about data integrity, ISOC EP will not be a good choice for your applciation. As per USB protocol, ISOCHRONOUS transfers are guarantee bandwidth and not data integrity. It is usually chosen for real time applciation like video/ audio.

                 

               

                 

              Regards

              • 4. Re: How to test ISO transfer
                wang.fei

                 hi 

                   

                i'm using the EZ-USB as a data aquisition. it aquisition data from outside logic, transfer them to the host (PC), then the host processes the data, and the EZ-USB transfers them to the outside logic at last. it's a bandwidth critical using. the sample rate is 10M Byte per sec, so i have to using the ISO transfers .

                   

                i configed my EZ-USB as follows:  EP2 ISOOUT EP, 2 x 1024 buffers , EP6 ISOIN EP , 2 x 1024 buffers ,with GPIF AUTOOUT/AUTOIN.

                   

                now i want to test the max bandwidth of my design. since the ISO transfer doesn't return NAK or ACK , when i use XferData in my PC application , it always returns successfully .so i don't know whether the data packets has transfer successfully or missing , as a result i don't know whether i have reached the max bandwidth of my design.

                • 5. Re: How to test ISO transfer
                  prajith.cheerakkoda

                   Hi,

                     

                   

                     

                  How about using Interrupt endpoints? In that the data integrity and bandwitdh are both assured.

                     

                   

                     

                  Regards

                  • 6. Re: How to test ISO transfer
                    wang.fei

                    hi:

                       

                    thanks!

                       

                    but i want to find a way to know the max bandwidth of my ISO transfer. and try to reach it . is there any way to test it ?

                    • 7. Re: How to test ISO transfer
                      prajith.cheerakkoda

                       Hi,

                         

                       

                         

                      As per USB 2.0 spec, maximum allowed for ISOC ttransfers: 3 packets per microframe; and maximum packet size is 1024 bytes. Thus, maximum possible bandwidth with ISOC transfers is 24 MBps. Please note, it is not possible to get data integrity with ISOC.

                         

                       

                         

                      Regards

                      • 8. Re: How to test ISO transfer
                        elics.chang

                        Hi!

                           

                        I have configured the Ep2 like this:(showing as follows)

                           

                        And the Cpress USB console have detected a Ep2 ISO pipe, but the click on the button ISO trans, got a "ISO transfer failed"

                           

                        when i configured Ep2 as a bulk endpoint , everthing is ok.

                           

                        ps: my design is like this:PC<——Slave FIFO<——FPGA

                           

                        Waiting for reply urgently, thank you!

                           

                        =================================================================

                           

                         

                           

                        void TD_Init(void)              // Called once at startup
                        {
                         // set the CPU clock to 48MHz
                         CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;
                         
                         SYNCDELAY;
                         IFCONFIG = 0x03;//Externern CLK;;==== Slave_FIFO Mode ======
                         //IFCONFIG = 0xe3;//Internel CLK ,48Mhz,IFCLKOE=1;

                           

                         SYNCDELAY;
                         REVCTL = 0x03;
                         SYNCDELAY;

                           

                         
                         EP2AUTOINLENH=0x02;
                         SYNCDELAY;
                         EP2AUTOINLENL=0x00; //512 Bytes
                         SYNCDELAY;

                           

                         PINFLAGSAB = 0x0C;//FLAGA--Ep2 Full flag
                         SYNCDELAY;
                         PINFLAGSCD = 0x08;//FLAGC--Ep2 Empty flag
                         SYNCDELAY;
                         
                         EP4CFG = 0x02; //clear the valid bits on ep4 and ep8 and ep2
                         SYNCDELAY;
                         EP8CFG = 0x02;
                         SYNCDELAY;
                         EP6CFG = 0x02;
                         SYNCDELAY;
                         EP2CFG = 0xD0; // IN, 512-bytes, 4x, ISO
                         SYNCDELAY;
                         EP2ISOINPKTS = 0x03;//每帧3个包
                         SYNCDELAY;

                           

                         FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions
                         SYNCDELAY;    // see TRM section 15.14
                         FIFORESET = 0x02; // reset, FIFO 2
                         SYNCDELAY;    //
                         FIFORESET = 0x04; // reset, FIFO 4
                         SYNCDELAY;    //
                         FIFORESET = 0x06; // reset, FIFO 6
                         SYNCDELAY;    //
                         FIFORESET = 0x08; // reset, FIFO 8
                         SYNCDELAY;    //
                         FIFORESET = 0x00; // deactivate NAK-ALL

                           

                         // handle the case where we were already in AUTO mode...
                         // ...for example: back to back firmware downloads...
                         SYNCDELAY; //
                         EP2FIFOCFG = 0x00; // AUTOOUT=0, WORDWIDE=0
                         // core needs to see AUTOOUT=0 to AUTOOUT=1 switch to arm endp's
                         SYNCDELAY;    //
                         EP2FIFOCFG = 0x09; // AUTOIN=1, WORDWIDE=1
                         SYNCDELAY;    //
                        }

                        • 9. Re: How to test ISO transfer
                          vavc

                           Hi ,

                             

                           

                             

                          How many bytes that you are requesting from the Control Centre? What is the max packet size of the endpoint in the endpoint descriptor? 

                             

                          If possible please share the entire project.(for both BULK and ISOC)

                             

                          Regards,

                             

                          Vikas.

                          • 10. Re: How to test ISO transfer
                            elics.chang

                             Hi!

                               

                            Thanks for your reply!

                               

                            Luckly, yesterday, I have found a solution to perform a ISO trans.  The point is that I must set

                               

                            EP2ISOINPKTS = 0x01;//每微帧1个包 

                               

                            and the length to to be transfered must be eight times of the packet size.

                               

                            But , the new problem is how I can make the ISO trans persistent???? 

                               

                            I have use the CyApi XferData(PCHAR buf, LONG &len, PUCHAR pktInfos = NULL) to perform the ISO trans like this:

                               

                             

                               

                            which means the trans must stop to start a new trans when the data transfered reach the length of LONG &len.

                               

                            But what if I do NOT want to stop the trans? For example a viedio trans design??? 

                               

                            Waiting for your reply. Thank you!

                               

                             

                               

                            //=======================================================================================

                               

                            UINT XferRecieve( LPVOID params )

                               

                            {

                               

                            .........

                               

                            for (;dlg->bLooping;) {

                               

                            success = dlg->InEndpt->XferData(dlg->indata, inlen);

                               

                            if (success) 

                               

                            {

                               

                            dlg->nSuccess++;

                               

                               

                            else 

                               

                            {

                               

                            dlg->nFailure++;

                               

                            }

                               

                             

                               

                            ::PostMessage(dlg->m_hWnd,MSG_PKT_CNT,

                               

                            (WPARAM)dlg->nSuccess,(LPARAM)dlg->nFailure);

                               

                            if ((!success) && stopOnError) dlg->bLooping = false;

                               

                               

                            ......

                               

                            }

                               

                             

                               


                            • 11. Re: How to test ISO transfer
                              vavc

                               Hi,

                                 

                               

                                 

                              The API Xferdata() returns when it receives the number of bytes that it has requested or after time out.To wait for infinite time set the timeout to 0xFFFFFFFF, then xferdata waits for infinte time. But if it receives the number of bytes that it has requested for , then it will return.

                                 

                              For the applications like video streaming, you have to call the API xferdata() repeatedly in a thread or in a while loop.

                                 

                              For better bandwidth we recommend to use the asynchronous transfers by using BeginDataXfer( ). Please refer the streamer example example.(path : C:\Cypress\Cypress Suite USB 3.4.7\CyUSB.NET\examples after installing Cy3684 DVK http://www.cypress.com/?rID=14321).

                                 

                               

                                 

                              Regards,

                                 

                              Vikas.