Hello,
I created a modified version of Microchip's USB HID bootloader a few years back. The HID bootloader used Interrupt transfer with 64 byte IN and OUT pipes very similarly to Microchip's present HID bootloader. The only problem is I configured my device for USB LOW speed. According to the USB spec, low speed devices cannot have an interrupt pipe larger than 8 bytes. I am well aware of this restriction now (though I wasn't when I originally wrote the bootloader). Windows XP and 2000 had no problems with me unknowingly violating the spec. The bootloader cannot be changed. The unit utilizes an EXTERNAL USB pullup resistor on the D- pin, so it is unfortunately stuck with USB low speed. The only way to work around this issue is to use a driver of some kind to force the unit to enumerate and communicate despite the USB spec violation.
Now that Windows 7 has been around for a while we tested our bootloader on it a few months back. I have since rewritten the bootloader to work around this issue by using control transfer, so I have no issue with newly produced units. Anyway, I have a large number of units in the field that need a firmware upgrade, and Windows 7 will not allow the device to enumerate.
I have tried 2 separate approaches so far to solve this issue, with no success with either. I created an inf file to load WinUSB and updated my PC application to work with the WinUSB library. Everything worked just fine on my Windows XP machine, but when I tried moving over to the Windows 7 machine the device wouldn't enumerate. I can only guess that WinUSB is imposing the same restriction that the standard HID driver is that a low speed USB device cannot have interrupt pipes larger than 8 bytes.
I also tried LibUSB. LibUSB allowed the device to enumerate on Windows 7, so, again I updated my PC application to work with LibUSB. Again, everything worked fine in Windows XP. I moved over to Windows 7 and as soon as I attempt to write to the device, I get a Win32 exception saying PipeTransferSubmit saying "parameter not correct." I'm thinking this also has to do with the Interrupt transfer limitation.
So, now I find myself stuck. I'll be spending part of my day setting up Windows XP mode and attempting to get the device to work through that. Setting up Windows XP mode is relatively simple, but for users who are just trying to do a firmware update on their device its a bit excessive to ask. Having some idea of how it works, I am hopeful that it will work, but even if it does, it is an imperfect solution. (Also it isn't available on Windows 7 Starter).
Does anyone know of a driver setup that would enable me to bypass this limitation? Or did I do something wrong with the 2 approaches I already tried?
Joe