AnsweredAssumed Answered

Scheduling problem with T1040's USB host controller

Question asked by Christophe Beausoleil on Apr 4, 2016
Latest reply on Apr 18, 2016 by Christophe Beausoleil



I'm using T1040’s USB host controller to access a Full Speed (USB 1.1) device.


Here is (very) basically how our periodic transfer descriptors are built:

TD    EP#   EP Type   MaxLen S-mask C-mask

siTD1 EP3   ISO OUT    184    0x01   0x04

siTD2 EP2   ISO OUT    112    0x02   0x08

siTD3 EP6   ISO IN      16    0x04   0x10

qhTD4 EP7   INT OUT     64    0x04   0x10

qhTD5 EP8   INT IN      64    0x04   0x30

qhTD6 EP4   INT IN       8    0x08   0x20

stTD7 EP5   ISO IN     392    0x10   0xC0


and how they are chained together :

siTD1->next_link_ptr  = siTD2 | UEH_CT_TYPE_siTD;

siTD2->next_link_ptr  = siTD3 | UEH_CT_TYPE_siTD;

siTD3->next_link_ptr  = qhTD4 | UEH_CT_TYPE_qhTD;

qhTD4->horiz_link_ptr = qhTD5 | UEH_CT_TYPE_qhTD;

qhTD5->horiz_link_ptr = qhTD6 | UEH_CT_TYPE_qhTD;

qhTD6->horiz_link_ptr = siTD7 | UEH_CT_TYPE_siTD;


The USB device is a custom card for which I expect 7 transactions in one frame (see pic1.jpg in attachment. Time slots 0/1000/2000 are where we observe the SOF)


But what I observe if different (see pic2.jpg in attachment). It appears that:

  • S-mask and C-mask are not respected (same result is obtained with all S-mask=0x01 and all C-mask=0x04)
  • EP6 and EP5 (both isochronous input data) are delayed in next frame


What does explain this behavior?


Can we force USB host controller to respect the specified scheduling?


If it could help, pic3.jpg is an overview of how we configured USB HC (without connected device here).


I'll be very grateful for any help !