FX3: AN84868 with a FPGA bit file of size > 4MB

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
suramyag1
Level 1
Level 1
5 sign-ins First question asked Welcome!

Hi,

I followed this link for configuring my FPGA using the FX3.

I'm using the FPGA configuration Utility given along with the application note.

Bitstreams with size less than 4MB work fine, but with bitstreams greater than 4 MB, the response is unpredictable.

With USB2.0 port, it almost always fails, and with USB3.0, it passes,  sporadically (20-30% of the time). 

I saw this thread: https://community.cypress.com/t5/USB-Superspeed-Peripherals/Maximum-transfer-size-for-BeginDataXfer-... where it's said that the size is limited by the host (Windows), and there's also a Cypress driver which supports bulk transfers up to 32 MB.

 

I have two questions for this:

1) Is there a plan to release signed drivers which have a 32 MB limit?

2) If we have to avoid this limit (4MB or 32 MB), what modifications should be made to AN84868?

0 Likes
1 Solution
JayakrishnaT_76
Moderator
Moderator
Moderator
First question asked 1000 replies posted 750 replies posted

Hello,

Please refer to the following link which specifies the maximum URB size that can be created for bulk transfer for a superspeed or high speed device:

https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-bandwidth-allocation

From this, it can be seen that the maximum URB size that can be created for bulk transfer in superspeed mode is 32MB and in high speed is 4MB. This is the reason why the transfer fails in USB 2.0 mode when the bitstream is greater than 4MB. Also in USB 3.0 mode, even though the maximum size of URB that can be created for bulk transfer is 32MB, the driver (cyusb3.sys) supports up to 4MB only. As you mentioned, there is an updated driver which supports bulk transfers up to 32MB but it is not signed.

Please find my comments to your questions below:

1. We do have a plan to release the signed drivers which have 32MB limit. But it will take some time. 

2. To avoid the limit you can split the Bitstream  into smaller chunks of size less than or equal to 4MB (to make it work in USB2 or USB3 mode) on the host side and then send the chunks one after the other through continuous XferData calls.

Best Regards,
Jayakrishna

View solution in original post

0 Likes
1 Reply
JayakrishnaT_76
Moderator
Moderator
Moderator
First question asked 1000 replies posted 750 replies posted

Hello,

Please refer to the following link which specifies the maximum URB size that can be created for bulk transfer for a superspeed or high speed device:

https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-bandwidth-allocation

From this, it can be seen that the maximum URB size that can be created for bulk transfer in superspeed mode is 32MB and in high speed is 4MB. This is the reason why the transfer fails in USB 2.0 mode when the bitstream is greater than 4MB. Also in USB 3.0 mode, even though the maximum size of URB that can be created for bulk transfer is 32MB, the driver (cyusb3.sys) supports up to 4MB only. As you mentioned, there is an updated driver which supports bulk transfers up to 32MB but it is not signed.

Please find my comments to your questions below:

1. We do have a plan to release the signed drivers which have 32MB limit. But it will take some time. 

2. To avoid the limit you can split the Bitstream  into smaller chunks of size less than or equal to 4MB (to make it work in USB2 or USB3 mode) on the host side and then send the chunks one after the other through continuous XferData calls.

Best Regards,
Jayakrishna
0 Likes