1
Discussion - Hardware / FT601 FT245 mode: small IN transfers
« on: September 17, 2019, 09:12:21 pm »
Hi!
I have an FT601 device in FT245 FIFO mode connected to an FPGA. On the host side, I'm running an application based on libftd3xx, i.e. data transfer via FT_ReadPipeEx / FT_WritePipeEx. What I observe is that OUT transfers happen immediately, whatever the size of the transfer. For IN transfers, however, I can only read data, after the FPGA has sent 4 KiB.
I tried the following with a loopback configuration in the FPGA:
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns no data and status 19.
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns no data and status 19.
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns no data and status 19.
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns 2 times 2 KiB.
I put data counters in the FPGA that I can read out via a side channel and I see that all 1 KiB chunks are immediately written to the FTDI. So I conclude that either the FT601 or libftd3xx buffer the data until 4 KiB are received, however long it takes (I waited for several seconds).
In my application, I am using the USB also for control information, where the IN data can be as small as one word. What do I have to do to receive these data immediately?
Thanks. Chipper.
I have an FT601 device in FT245 FIFO mode connected to an FPGA. On the host side, I'm running an application based on libftd3xx, i.e. data transfer via FT_ReadPipeEx / FT_WritePipeEx. What I observe is that OUT transfers happen immediately, whatever the size of the transfer. For IN transfers, however, I can only read data, after the FPGA has sent 4 KiB.
I tried the following with a loopback configuration in the FPGA:
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns no data and status 19.
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns no data and status 19.
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns no data and status 19.
send 1 KiB => FT_ReadPipeEx(2 KiB buffer) returns 2 times 2 KiB.
I put data counters in the FPGA that I can read out via a side channel and I see that all 1 KiB chunks are immediately written to the FTDI. So I conclude that either the FT601 or libftd3xx buffer the data until 4 KiB are received, however long it takes (I waited for several seconds).
In my application, I am using the USB also for control information, where the IN data can be as small as one word. What do I have to do to receive these data immediately?
Thanks. Chipper.