I'm looking at the trace from the HID keyboard application (under Windows 2000 & XP), and am seeing some anomalies. I hope someone else knows what is going on here. Everything looks good up through the Addressed state. But durring the get descriptors phase there are some string requests that seem out of place.
Code:
Hlr Ept0 Stp NewReq Std gDesc Dev Write0(18)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 2 EoT
Hlr Ept0 Rd Ack
Hlr Ept0 Stp NewReq Std gDesc Cfg Write0(9)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 1 EoT
Hlr Ept0 Rd Ack
Hlr Ept0 Stp NewReq Std gDesc Str0 Write0(4)
Hlr Ept0 Wr 4 EoT
Hlr Ept0 Stp NewReq Std gDesc Str3 Write0(26)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 2 EoT
Hlr Ept0 Rd Ack
Hlr Ept0 Stp NewReq Std gDesc Cfg Write0(41)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 1 EoT
Hlr Ept0 Rd Ack
What are those get string requests doing interupting the get configuration descriptor request??? From what I understand it is normal for the host to ask for the first 9 bytes of the configuration descriptor (to determine the length of the full configuration descriptor), followed by reqesting the complete descriptor. But why are strings being requested in the middle of this process?
Code:
Hlr Ept0 Stp NewReq Std gDesc W: STD_RequestHandler: Unknown GetDescriptor = 0x06
Stall0
Hlr Ept0 Sta
Why is the host asking for something that is supportted by only high speed devices? Shouldn't the host know that this device is not a high speed device? That should be known before entering the default state.
Code:
Hlr Ept0 Stp NewReq Std gDesc Str0 Write0(4)
Hlr Ept0 Wr 4 EoT
Hlr Ept0 Stp NewReq Std gDesc Str2 Write0(48)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 0 EoT
Hlr Ept0 Rd Ack
Hlr Ept0 Stp NewReq Std gDesc Str0 Write0(4)
Hlr Ept0 Wr 4 EoT
Hlr Ept0 Stp NewReq Std gDesc Str2 Write0(48)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 0 EoT
Hlr Ept0 Rd Ack
Here are those pesky string requests again. And they are requested twice. From here on everything appears "normal". (i.e. after setting the device address, the host asks for the device and configuration descriptors before loading a driver and setting the configuration.
Code:
Hlr Ept0 Stp NewReq Std gDesc Dev Write0(18)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 2 EoT
Hlr Ept0 Rd Ack
Hlr Ept0 Stp NewReq Std gDesc Cfg Write0(9)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 1 EoT
Hlr Ept0 Rd Ack
Hlr Ept0 Stp NewReq Std gDesc Cfg Write0(41)
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 8
Hlr Ept0 Wr 1 EoT
Hlr Ept0 Rd Ack
Hlr Ept0 Stp NewReq Std sCfg Write0(0)
Hlr Ept0 Wr 0 EoT SetCfg() CfgEpt1 CfgEpt2
Read2(1) Hlr Ept0 Stp NewReq sIdle(0) Write0(0)
Hlr Ept0 Wr 0 EoT
...
Can someone explain why the string requests are interupting this phase of the enumeration? And why are there multiple requests for the same descriptors???
- Joe