- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It is working for me with those changes.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Once I switched to this I was able to get multiple EPs running in High BW mode
Ken