Hello
I loose bytes ( some multiple of 64 bytes ( =MaxPacketSize ) ) with
Windows XP SP1 on a Gibabyte PC 566 MHz ( single CPU ) with a VIA
chipset ( USB 1.1 HC ).
The following happens:
My USB device driver sends 'read' urbs down the stack ( reading a
picture ~1.5MB from scanner ). USBD_SHORT_TRANSFER_OK ist set and
MaximumTransferSize ist default ( 4KB ).
If i read the image with
urb->UrbBulkOrInterruptTransfer.TransferBufferLength=64 bytes, some 64
byte-packets get lost in lower drivers.
When TransferBufferLength is set on some higher value ( multiple of 64
) the image is transfered correctly.
Tests:
Tested some ( faster ) ASUS pcs with Intel chipset -> No problems.
Downloaded and installed the latest USB hotfix -> No changes.
Wrote a filter driver 'lower' my driver -> Yes, bytes get lost when
requesting 64 bytes.
Wrote a 'HC debug driver' permanent checking the HC registers -> HC
never reports errors ( did not check transfer descriptors ).
Counted bytes on USB analyzer -> The whole image is transferred.
Activated debug outputs in my driver -> OK, also when
TransferBufferLength=64!
Changed internal flowings in my usb driver to be faster -> Bytes get
lost on TransferBufferLength=64 AND TransferBufferLength=128 ( OK, on
higher values )!
Tested my own NT and OS/2 drivers on that motherboard ( the image is
transferred twice faster than under XP ) -> OK.
Used checked build versions of the XP usb drivers -> did not see any
errors reported in windbg, but i'm not very experienced in that.
I know, that VIA has ( maybe had? ) some special 'features'
implemented in USB ( in contrast to Intel ), but for me it looks like
a bug in the XP USB driver stack; maybe some 'timing issue' ( the
faster the usb device driver, the more bytes it must request each
urb!? ).
Any ideas?
Thank you,
Bernhard Ruhsam
PS: The reason, why i have to request just 64 bytes is, that there's a
bug in the firmware of the scanner, which does not send zero length
packets.