What is the throughput for isochronous transfers using FX2LP, showing the relationship among buffer length, MaxPktSize, and wMaxPacketSize?
For ISO transfers, the buffer length and the endpoint's transfer size are a multiple of eight times the endpoint's MaxPktSize.
If wMaxPktSize is 0x1400 (binary = 0001 0100 0000 0000)
MaxPktSize = [100 0000 0000 binary] * [10 binary + 1] = 1024 * 3 = 3072
We have a maximum of 4096 Bytes of FIFO buffer space available for FX2LP. Accordingly, if you are using one endpoint, the 4K is available to you to be allocated.
You need to use Endpoint 2 configured for quad buffering in the EP2FIFOCFG register.
Note that the EP2 FIFO can be a maximum of 4096 bytes long, the EP6 FIFO can be a maximum of 2048 bytes long, and the EP4 and EP8 FIFOs can be a maximum of 1024 bytes long.
Therefore, when only 4KB of endpoint RAM are available, for Isochronous transfers you can transfer only 1024 bytes per isochronous packet.
To achieve maximum bandwidth, the USB 2.0 specification allows for a single device to request up to three isochronous packets per microframe; that would make the maximum bandwidth in a microframe 3072 bytes. Please note that a microframe is 125 microseconds, for a throughput of 24 Mbytes per second.
The number of transfers per microframe is defined in the wMaxPacketSize field of the endpoint descriptor. Bit 12 and Bit 11 of this field specify the number of additional transactions per microframe and can be set to the following:
00 = None (one transaction per microframe, e.g., 1024 bytes).
01 = 1 additional (two transfers per microframe, e.g., 2048 bytes per microframe).
10 = 2 additional (three transfers per microframe, e.g., 3072 bytes per microframe).
11 = Reserved