Transmit 8 bytes every 1ms with a low-speed device

Question: Can I transmit 8 bytes every 1ms with a low-speed device? The Spec says the fastest polling rate is 10ms.



It is possible to achieve 1 transaction/ms using the control pipe (i.e., using GET_REPORT and SET_REPORT requests) to achieve 8 Kbytes/sec throughput. This is 10 times faster than sending data over the data endpoint which is 8 bytes every 10ms. In fact Windows polls an IN every 8ms, so this gives a little more throughput. However, the first approach would make a device a "bad citizen" USB device because it takes aprox 25% of USB bus bandwidth unnecessarily. This approach is not recommended unless the design will be operating in a closed system

That is on UHCI hosts; OHCI hosts may schedule multiple control transfers per frame, and so may go faster, but in most circumstances the device vendor will not be able to guarantee the type of host in the target application, so must assume UHCI.

Other than GET_REPORT and SET_REPORT, 8 bytes every 8ms is the max you could get out of a low-speed interrupt endpoint. If you try to change the polling rate in the Endpoint Descriptor to 1ms, I think Windows may send an IN every 1ms (I don't know why Windows accepts this invalid request), but this will not pass the Compliance tests.