Isoc High Bandwidth EP using USBIsoSourceSink

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
Not applicable

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.

0 Likes
8 Replies
Anonymous
Not applicable

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;

0 Likes
Anonymous
Not applicable

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);
    }

0 Likes
Anonymous
Not applicable

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.

   

 

   

 

0 Likes
Anonymous
Not applicable

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.

   

 

   

 

0 Likes
Anonymous
Not applicable

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.

   


 

0 Likes
Anonymous
Not applicable

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
 

0 Likes
Anonymous
Not applicable

It is working for me with those changes.  

0 Likes
Anonymous
Not applicable

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

   

 

   

Ken

0 Likes