FX3 USB2.0 ISOC IN Endpoint behavior with mult settings | Cypress Semiconductor
FX3 USB2.0 ISOC IN Endpoint behavior with mult settings
FX3 Isochronous endpoint over USB2.0 sends out-of-sequence data markers when mult setting is higher than the total amount of data phases in a given micro frame. Three 1K transfers are possible in one isochronous micro frame. To achieve this, FX3 endpoint configuraiton needs to be set such that isomult = 3. In this mode, FX3 expects atleast 2049 bytes ready in a buffer to be sent out over USB. So, FX3 sends data marker DATA2 in the first data phase, data marker DATA1 in the second data phase and data marker DATA0 in the third data phase.
In the condition when there is less than 2049 bytes available, FX3 will only have two data phases. Here, according to the USB 2.0 protocol, the first data phase should have DATA1 as data marker and DATA0 as data marker for the second phase. If FX3 endpoint isomult setting is 3, FX3 sends out DATA2 as data marker for first phase and DATA1 as data marker for second phase. This causes the host to drop all data during this micro frame. Similar issue will also occur when isomult is set to 2 and total data available in buffers to send over USB IN transaction is less than 1025 bytes.
This problem does not exist on USB3.0 as a different mechanism is used to mark data phases.
1. Trivial solution is to always make sure that there are more than 2049 bytes available in the buffer committed to USB when using ISOC endpoints over USB2.0.
2. In case of manual channels, one can check the amount of bytes available in the buffer before committing to USB and change the mult setting accordingly. Remember the mult setting change would reflect in all current and later transactions.