AnsweredAssumed Answered

Kinetis L USB BDT

Question asked by Steven Fischer on Mar 27, 2015
Latest reply on Mar 29, 2015 by Steven Fischer

I've been reading and experimenting with the USB hardware (see my project at swfischer/Kinetis-L-FreeRTOS-GCC · GitHub) and the USB BDT table still confuses me.  My confusion is related to the whole EVEN/ODD thing.  As I've read, the BDT table contains two 8 byte entries per end-point per direction IN/OUT.  This math works out and space for 16 end-points results in 512 bytes in the BDT.  So, the two 8 byte entries, as I understand it, are for double buffering the end-point data stream, which sound fine.  The confusing part is that there are two sets of control data (the buffer descriptor) for the two buffers.  Each buffer descriptor contains a DATA0/1 field, but only one buffer, so how does the double buffering work?  Does the DATA0/1 field denote which of the two 8 bytes entries is being used and, if so, what happens when the two DATA0/1 field don't match?


Also, I haven't found a good description of the buffer descriptor DTS bit.  I know DTS means "Data Toggle Synchronization" but is there a good description of what DTS is and when you should or should not use it?