Veronica Merryfield wrote:
My device is producing 1.49MB/s.
Sorry, that exceeds the usable capacity of a full-speed USB bus. It is
simply not possible. You’ll need to switch to high-speed, or compress
the data.
My understanding, perhaps incorrect, is that for a FS 1ms frame, an endpoint is transferred once which gives me a bandwidth of 512000 Bps implying that I need to use 3 end points. For HS, 8 endpoints could be transferred per 1ms frame, 1 per micro-frame.
No, this depends entirely on the type of endpoint. With an interrupt
endpoint or an isochronous endpoint, the endpoint descriptor determines
how often you will get an opportunity to transmit, up to once per
frame. In a full speed device, a maximum-bandwidth isochronous endpoint
can do 1023 bytes per frame.
However, a bulk endpoint can do many packets in a single frame – as
many as will fit in the available bandwidth. The theoretical maximum
(with bus overhead) is 1.216 MB/s.
In either case, I need to bring multiple pipes (bulk) come together in the driver to service a single ReadFile call.
Even if that capacity were available, how would you expect to
synchronize them? You cannot rely on having data from multiple pipes
arrive neatly in order. Remember that the device cannot transmit
anything unless the host controller tells it to send, and the host
controller scheduling will not promise to alternate transfers in exactly
the order you want.
I’m sorry, but your design is flawed.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.