8 Replies Latest reply on Jun 7, 2012 8:42 AM by ken.schutz

    Isoc High Bandwidth EP using USBIsoSourceSink

    ken.schutz

      I am trying to make the example USBIsoSourceSink work as a High BW EP.  I have updated the descriptor and I have changed the code below to 2 for isoPkts but the PID that the Cypress sends back is still a Data0 packet.  What do I need to do to make this example work as a High Bandwidth EP?

         

       

         

      Ken

         

       

         

       

         

       

             

       

         

      CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg));enable = CyTrue;epType = CY_U3P_USB_EP_ISO;burstLen = (usbSpeed == CY_U3P_SUPER_SPEED) ?streams = 0;pcktSize = size;isoPkts = 2;

         

      epCfg.

         

      epCfg.

         

      epCfg.

         

      (CY_FX_EP_BURST_LENGTH) : 1;

         

      epCfg.

         

      epCfg.

         

      epCfg.

        • 1. Re: Isoc High Bandwidth EP using USBIsoSourceSink
          ken.schutz

          I forgot to add that this is for HS and I will eventually use SS for this.  Below is the cleaned up part of the code.  If there is an example that exists I could use that as an example.  The only thing I see in the API docs or these examples is this isoPkts field but no other documentation on enabling High BW endpoints.

             

           

             

           

             

          CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg));

             

          epCfg.enable = CyTrue;

             

          epCfg.epType = CY_U3P_USB_EP_ISO;

             

          epCfg.burstLen = (usbSpeed == CY_U3P_SUPER_SPEED) ? (CY_FX_EP_BURST_LENGTH) : 1;

             

          epCfg.streams = 0;

             

          epCfg.pcktSize = size;

             

          epCfg.isoPkts = 2;

          • 2. Re: Isoc High Bandwidth EP using USBIsoSourceSink
            ken.schutz

            When I change just thi field, I get an Error code 77 from the  function CyU3PSetEpConfig.  Where can I get the error code "decoder ring" and is there any examples using Isoc High BW Eps?  Do I need to double my buffer size?  Any help from Cypress on this as there is almost no documentation on using this feature.

               

             

               

                CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg));
                epCfg.enable = CyTrue;
                epCfg.epType = CY_U3P_USB_EP_ISO;
                epCfg.burstLen = (usbSpeed == CY_U3P_SUPER_SPEED) ? (CY_FX_EP_BURST_LENGTH) : 1;
                epCfg.streams = 0;
                epCfg.pcktSize = size;
                epCfg.isoPkts = 2;

               

                /* Producer endpoint configuration */
                apiRetStatus = CyU3PSetEpConfig(CY_FX_EP_PRODUCER, &epCfg);
                if (apiRetStatus != CY_U3P_SUCCESS)
                {
                    CyU3PDebugPrint (4, "CyU3PSetEpConfig failed, Error code = %d\n", apiRetStatus);
                    CyFxAppErrorHandler (apiRetStatus);
                }

            • 3. Re: Isoc High Bandwidth EP using USBIsoSourceSink
              ken.schutz

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

               

               

                 

               

                 

               

                 

               

                 

               

                 

               

                 

              Note
              Please note that a mult (isoPkts) setting of greater than 0 (multiple packets
              or bursts in a micro-frame) is only supported for endpoints 3 and 7 in either
              direction.

                 

               

                 

               

              • 4. Re: Isoc High Bandwidth EP using USBIsoSourceSink
                ken.schutz

                   

                 

                   

                Note
                Please note that a mult (isoPkts) setting of greater than 0 (multiple packets
                or bursts in a micro-frame) is only supported for endpoints 3 and 7 in either
                direction.

                   

                 

                   

                 

                • 5. Re: Isoc High Bandwidth EP using USBIsoSourceSink
                  ken.schutz

                  Sorry for the muliples here.  It was not showing my comments correctly.

                     

                   

                     

                  Grepiing through all of the files I found the below statement which implies that I need to use EP3 or 7.
                  But when I change CY_FX_EP_PRODUCER to EP3 or EP7, I do not get any data from these EPs.

                     

                   

                     

                  Note
                  Please note that a mult (isoPkts) setting of greater than 0 (multiple packets
                  or bursts in a micro-frame) is only supported for endpoints 3 and 7 in either
                  direction.

                     


                   

                  • 6. Re: Isoc High Bandwidth EP using USBIsoSourceSink
                    steve.magnani

                    Ken -
                     
                    The decoder ring is in cyu3error.h. I believe error 77 equates to CY_U3P_ERROR_INVALID_CONFIGURATION.

                    Three other changes needed to make this work come to mind:

                    * The wMaxPacketSize field of the endpoint descriptor needs to be updated to request as many transaction opportunities as your isoPkts value

                    * The 'size' field of the CyU3PDmaChannelConfig_t needs to be at least the product of the # of transaction opportunities and the maximum packet size (e.g., the max number of bytes transferrable per microframe).

                    * CY_FX_EP_PRODUCER_SOCKET will need to be redefined to CY_U3P_UIB_SOCKET_PROD_3

                    (Interdependent constants. Yuck.)

                    I would like to get this working myself to debug high-bandwidth issues I am seeing in our video application; maybe we can compare notes tomorrow.

                    -- Steve
                     

                    • 7. Re: Isoc High Bandwidth EP using USBIsoSourceSink
                      steve.magnani

                      It is working for me with those changes.  

                      • 8. Re: Isoc High Bandwidth EP using USBIsoSourceSink
                        ken.schutz

                        Once I switched to this I was able to get multiple EPs running in High BW mode

                           

                         

                           

                        Ken