Currently I am testing my EHCI driver.
I can read with the EHCI-driver from USB 2.0 pendrives (4GB and 16GB) and an external USB 2.0 500 GB winchester a 45MB-wav file and succesfully play it.
However I also have a USB 2.1 32GB pendrive and the EHCI-driver timeouts during the BULK transfer and copies to RAM only a few seconds of the wav-file.
I have checked the whole code and everything looks good.
I am also developing the XHCI-driver and I read about the Binary Device Object Store Descriptor (BOS-descriptor) in Lunt's USB book
Perhaps the BOS-descriptor should also be retrieved from USB 2.1 drives and not only from USB 3.x?
But I don't see why that would help.
It seems that there is no USB2.1 specification.
The Device, Configuration, Interface and EndPoint descriptors are below.
EDIT: I use SCSI Read10 if the pendrive is smaller than 8GB, otherwise I use Read12.
Devices showing 2.1 can now support the BOS descriptor. In the book
you mentioned, also see Chapter 21. Also note that if the device supports the BOS descriptor is might not (USB 2.1+) or must not (USB 3.0+) support the Device Qualifier and Other Speed Config descriptors. However, as a USB 2.1 device, you can ignore the BOS descriptor, because most likely it only contains the CONTAINER_ID capability.
As for the 2.1 specification, see Randy Aull's description from http://online.osr.com/showthread.cfm?link=249588
Being that your device has a 0x0210 (or possibly/rarely 0x0201), this just means that it supports the BOS descriptor and an extension to the USB 2.0 specs.
After the timeout, do you do a Request Sense command to see what the device returns? This may be helpful.
When you read the capacity of the thumb-drive, what is returned? Does Last LBA == 0xFFFFFFFF?
In all the research I have done, I understand that a 0x0210 device will function exactly as a 0x0200 device. Therefore, I believe the error might be in your code, not the device. However, I have been wrong before.