I'm going to answer the first of my two questions: What is required to upgrade Starterware to the USB 2.0 specification?
Answer: The following simple change to usbdbulk.c
unsigned char g_pBulkDeviceDescriptor[] =
{
18, // Size of this structure.
USB_DTYPE_DEVICE,
USBShort(0x200), // was USBShort(0x110) This change will report the USB version as 2.0
....
That change is sufficient to get MS Windows to treat the device as meeting the USB 2.0 specification. This is sufficient for all practical purposes, with two caveats:
- With that simple change alone, the device will only operate at "full-speed", which is not the fastest speed. (Many additional Starterware changes will be needed to operate at high-speed.)
- The Starterware software might not (???) implement the four "test-modes" needed for full-implementation of the USB 2.0 spec. I believe these physical requirements are built into the OMAP-L138 hardware, but the Starterware software (and the usb_dev_bulk example) does not implement those test-modes, so far as I am aware. (And they're scarcely needed.)
_____________________
Footnote: A comment in Starterware usbdbulk.c says "(if we say [USB] 2.0, hosts assume high-speed - see USB 2.0 spec 9.2.6.6)" But I say that is a needless worry:
- The USB 2.0 spec, section 9.6.2 says: "If a full-speed only device (with a device descriptor version number equal to 0200H) receives a GetDescriptor() request for a device_qualifier, it must respond with a request error." -- in other words, a stall. And that is precisely how the Starterware software already behaves. It goes like this: The device start at "full-speed", and reports that it is using USB 2.0. The Host then requests a device_qualifier, to determine whether a speed-increase is in order. Then the Starterware (correctly) stalls that request. So the device remains operating at "full-speed" (not high-speed). There is no problem here.
- I tried the above described change, and it works. The device functions well, and MS Windows treats it exactly like a USB 2.0 device.
-- Walter