This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Tutorial for (iso) USB CSL on non-High-Speed devices?

Is there any kind of basic tutorial for the different types of USB endpoints when coding in the CSL on Full Speed C55x devices? (1)

I am particularly having trouble with Isochronous endpoints.

What I have discovered for Interrupt endpoints is that it is helpful to set the callback event mask to include Reset as well as EOT.  Without Reset, the callback is never called unless you prime the system with an initial call to send a packet.  But, with the Reset event, the callback will be executed, and it's fairly easy to queue up a packet on Reset or EOT, and this keeps the flow going.

For the Isochronous endpoints, I have set the event mask to include Reset, PSOF, and EOT, and yet I don't seem to be getting results.  The real problem, I think, is that I don't understand whether I should be using EOT events, PSOF events, both, or something else.  Is this something that depends upon the subcategory of isochronous transfers that I want to implement? (2)

Is there any way that someone at Texas Instruments could help explain the intended usage pattern for Full Speed Isochronous USB, since the CSL USB Programmer's Reference Guide does not have any details at all on iso packets? (3)

I have found isochronous USB sample code for the new LOWPWR DSP chips, but they are all High-Speed-capable devices which have a different CSL API for USB, and thus do not translate directly to the C5506.  Control endpoints are easy, since they're in all of the examples and sample code.

P.S.  I find it rather confusing that the 5505 and 5515 are referred to as LOWPWR, when the 5506 data sheet clearly refers to the chip and other members of its family as "High-Performance, Low Power" - is there an official designation for the 5503/5506/5507/5509(A) and/or 5510? (4)

  • Hi Brian,

    For the full speed USB devices the CSL USB document at the following link has the most information.  You already mentioned it in your post above.

    http://focus.ti.com/lit/ug/spru511/spru511.pdf

    The following document does not have CSL information, but provides information on USB endpoints and isochronous transfers for some of the full speed devices, I hope it may be helpful.

    http://focus.ti.com/lit/ug/spru596a/spru596a.pdf

    Regarding CSL designations, they are described at

    http://focus.ti.com/docs/toolsw/folders/print/sprc133.html

    Best regards, Vishal

  • Thanks for the reply, Vishal, but there is still a gap in documentation.

    I have read both SPRU511 and SPRU596A.  I think that SPRU511 needs more information for the typical developer to make full use of the USB CSL.

    SPRU596A adds some insight, such as the fact that the DMA process consumes two bytes at the beginning of the array, and thus explains a detail which isn't completely abstracted away by the USB CSL: namely, that users of the USB API must allocate their packet arrays with two extra bytes, and further that the programmer must offset the data by shifting it in the array.

    SPRU596A seems like a complete reference for firmware developers who are willing to program directly to the hardware.  However, those of us who choose to use the USB CSL need a little bit more information.  While I feel like I could write my own isochronous firmware by coding the USB hardware directly, that does not seem like a project which could be completed as quickly as when using the USB CSL.  The problem is that there is no information in the USB CSL about how much of the unique characteristics of the isochronous endpoint type are handled automatically, and how much would need to be manually handled by the API client.

    For example, SPRU596A mentions that isochronous endpoints require a 10-bit length as opposed to the default 7-bit length used by the other three types of endpoints.  But SPRU511 does not say for sure whether these differences are automatically dealt with by using a 16-bit parameter.  As another example, SPRU596A mentions that the USB DMA hardware alternates between two addresses when using isochronous endpoint types, in order to facilitate the high data flow which can almost be continuous.  Again, SPRU511 does not mention whether the alternating DMA buffers are automatically used by the USB CSL, or if the API client must arrange for the ping-pong buffers.  In both of these cases, I have made the assumption that the USB CSL has the information needed to handle these details of the USB hardware automatically, and so I assume that I do not need to do anything extra.

    However, since my isochronous endpoints are not working, but my interrupt endpoint is working, it seems likely that some detail is missing from the USB CSL documentation.  In the absence of sample code illustrating the proper use of isochronous endpoints in the USB CSL for the "Standard" devices, I don't really know where to look next.

    P.S.  If you're suggesting that the USB CSL does not function for standard devices when using isochronous endpoints, then I can begin the process of writing new code which works directly with the USB hardware, as documented in SPRU596A, and hopefully would meet with success based on the documentation of the peripheral registers.  However, that seems like an expensive development effort for me to take without some assurance of whether the USB CSL will work or not.

    Is there any known example of functional isochronous endpoint transactions on standard C55x devices with firmware based on the USB CSL?