Error: "Failed to submit transfer status=0xe2100001"?

famacam report abuse

Hi community, I hope, someone can help me.
What does the USB3.0 error "Failed to submit transfer status=0xe2100001" on Linux mean?

Comments

Answers

mbinev report abuse

Hi,

this is probably related to badly working host controller (xHCI or eHCI) and/or cable. I will hence firswt suggest you to use officially supported USB cables e.g. by Basler and in addition try out decreasing the bandwidth of your camera, especially if it is run on USB2.0 (eHCI).

In addition you may find this information also useful:

If you run an USB3.0 camera on Linux and increased the transport layer parameter Maximum Transfer Size to a value bigger than 65536 Bytes, you may repeatedly get the following error message in the console:

Failed to submit transfer status=0xe2100001.

 

FYI: increasing the transport layer Maximum Transfer Size would usually reduce the CPU load as it reduces the data overhead and causes less CPU interrupts.

On Linux, the maximum size of the Maximum Transfer Size is around 3MB.

 

The reason for this error message is that the kernel module "usbcore" does not have enough memory for the requested URBs (USB Request Block) size.
By default, the "usbcore" has about 16MB of memory available.

 

The requested URBs size is calculated as follows:
„Maximum Transfer Size“ x „Num Max Queued Urbs“

 

„Num Max Queued Urbs“ is by default set to 64.

 

In order to avoid the following error message one can do the following:

1) considering the above mentioned formula reduce the „Num Max Queued Urbs“ value in pylon viewer or in your application until the error message disappeared.

 

2) allocate more memory for the kernel module "usbcore":

In order to find out what the currently allocated memory is (in MBytes), execute the following command in the console:
cat /sys/module/usbcore/parameters/usbfs_memory_mb

 

In order to increase the memory (e.g. to 32MB) for the current session only, log in as a root and execute:
echo -n 32 > /sys/module/usbcore/parameters/usbfs_memory_mb


How to permanently increase the allocated memory depends on the given Linux distribution.
For Ubuntu with "grub2" one can do the following:


- edit the file:
/etc/default/grub

 

- change the variable:
GRUB_CMDLINE_LINUX

For example:
GRUB_CMDLINE_LINUX="usbcore.usbfs_memory_mb=32"

 

- now execute the following command as a root and reboot:
update-grub

Comments
Add Answer