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?