Hi Pavel,
Thanks a lot for your interest!
I've just tried what you suggested. So here is my new configuration:
TD EP# EP Type MaxLen S-mask C-mask
siTD1 EP3 ISO OUT 184 0x01 0x00
siTD2 EP2 ISO OUT 112 0x02 0x00
siTD3 EP6 ISO IN 16 0x04 0x10
qhTD4 EP7 INT OUT 64 0x04 0x10
qhTD5 EP8 INT IN 64 0x08 0x20
qhTD6 EP4 INT IN 8 0x08 0x20
stTD7 EP5 ISO IN 392 0x10 0xC0
Unfortunately, as explained above, changing S-mask and C-mask has absolutely no impact. I obtain exactly the same result!
I've also tried to change the way my TDs are chained.
With:
EP5 -> EP6 -> EP3 -> EP2 -> EP7 -> EP8 -> EP4
I obtain:
EP5 -> EP6 -> EP7 -> EP8 -> EP4 for the first frame
EP3 -> EP2 for the second frame
With:
EP3 -> EP6 -> EP5 -> EP2 -> EP7 -> EP8 -> EP4
I obtain:
EP3 -> EP6 -> EP5 -> EP7 -> EP8 -> EP4 for the first frame
EP2 for the second frame
I guess that:
- because I use the USB HC's internal Transactions Translator (TT), the HC does not care about S-mask and C-mask (it directly deals with full speed and it doesn't need to send split packets)
- the USB HC decides by itself to postpone some transactions. I guess that it manages priority thus it only accepts ISO transactions that are set first, up to a maximum size or number (or another resource), then it deals with INT transactions.
May I be wrong?
How to learn about these limitations?
How to change or control this behavior?
Best regards
Christophe