Hi list,
I have a USB 2.0 device that I am having trouble
reading data from its bulks' endpoint.
For every data request the device sends 240*512 bytes.
To make sure that there is no data lost, the host has
to pull 512 bytes in 256 us otherwise the transaction
will be aborted by the device after detecting a buffer
over run.
To make the bulk transfer fast I tried to use a large
transfer
by setting the length of IOMemoryDescriptor in
IOUSBPipe->Read() equal to 240*512 bytes, but that
didn't meet the required pulling time (512 bytes in
256 us). The transaction times out since the device
already aborted the request after detecting a buffer
over run on its side (the data hasn't been pulled from
the buffer in 256 us).
Does that sound an expected performance from the
function IOUSBPipe->Read()?
Does the function IOUSBPipe->Read() overlap the
transfers?
I am only able to get 1024 bytes (by having the length
of IOMemoryDescriptor = 1024) out of 240*512 before
the device terminates the transaction. If I use a
IOMemoryDescriptor larger than 1024, the function
IOUSBPipe->Read() times out because the device detects
a buffer over run and terminates the transaction.
By using smaller buffers (1024 bytes) and overlapping
the transfers, it seems I am able to get more data
from the device before timing out. I am not sure if
that is the best way to handle this kind of situation,
but I think it will be inefficient to use a very
small buffer (1024 bytes) to get all the 240*512 bytes
from the device.
Is there a better way to achieve that?
Your suggestions and recommendations will be very
appreciated....
Thanks,
Mike
____________________________________________________
Sell on Yahoo! Auctions no fees. Bid on great items.
http://auctions.yahoo.com/
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Usb mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/usb/email@hidden
This email sent to email@hidden