Electronics > Microcontrollers


(1/4) > >>

Quick question - not completely sure about the answer: what's the max data throughput one can get with HID in USB High-Speed mode? Is it anywhere close to the max rated throughput? Are there any known limitations, either from the standard, or from actual OS implementations?

6MB according to this guy: https://www.eevblog.com/forum/microcontrollers/usb-hid-enumeration/msg1154756/#msg1154756

64kb/s for FS is theoretical max

Yes, I knew for FS.
Thanks for the pointer.

Table 5-8. "High-speed Interrupt Transaction Limits" in the spec answers that question. The maximum number there is 53248000 bytes/second. The real OSes are not scheduling interrupt transfers anywhere close to this.

Ok, so I think I figured what they mean by that table. They mean the bandwidth occupied by all the endpoints at once.

For a single regular (non high bandwidth) endpoint you are still limited to 1 transfer per microframe. For a 512 byte endpoint this gives you 512 * 8000 = 4 MBytes/second. I'm too lazy to setup a dedicated experiment, but this is the configuration used by Atmel-ICE, and I just tried to flood it with fast DAP commands and got this exact throughput. For a 1024 byte endpoint you should get 8 MByte/sec, but this is where standard HID APIs start to struggle, especially sending data to the device. Receiving should work, since the bandwidth is allocated anyway.  I bet direct libusb style access would be fast enough to handle it.

And absolute theoretical maximum for one (high bandwidth) endpoint is 1024 * 3 * 8000 = 24.576 MBytes/second. I think I tried that at some point, but the issue you start to run into is that OS fails to enumerate the device if it is not connected to the root hub directly, since it is hard to allocate guaranteed bandwidth with multiple things connected to the hub.

Generally bulk is the fastest practical endpoint type.


[0] Message Index

[#] Next page

There was an error while thanking
Go to full version