Tue Jun 12 08:15:49 EDT 2012

USB cont

So on the wire things go wrong after SetAddr.  The device does seem to
receive the address.

address @ .
77 OK

But UADDR isn't correct.

112 OK

That's actually a bug in tethered.ss because the correct value 4D is
visible on the dump:

#xF6 abd
F60  00 00 00 00 00 00 00 00
F68  08 00 00 9F 04 20 4D 14

So UADDR is set, but device doesn't reply.  Maybe it should only be
set once?

I see the value of address changes..  Data corruption?  Might be the
vector table.  Or something more subtle.  Do variable addresses clash
when defined in modules?  Doesn't seem so..

OK, problem is missing "UIR TRNIF low".

But this probably means there is no transaction.IN handler for the
SETUP packets?  I'm confused..

Next error: for the initial addr==0 GetDescriptor there is
SETUP,IN,OUT but for the subsequent GetDescriptor to the new address,
the OUT phase is missing, and DataCenter (Beagle USB sniffer software)
doesn't see it as a GetDescriptor transaction.

Questions: if there is supposed to be an OUT, why isn't this visible
in the sniffer?

Aha, the IN phase in SETUP is DATA0, not DATA1 as in the successful

Correct should be:

Get Device Descriptor:
  IN    DATA1

Set Address
  IN    DATA1

Looks like I'm just toggling from the Set Address IN reply, but I
should reset.

EDIT: Refactored a bit, now I get different errors.  Stall on OUT
phase of first GetDescriptor call.

    0 OUT/DATA0        \ make room for next SETUP request on EP0