AnsweredAssumed Answered

USB doesn't work until cable disconnect/reconnect after reset

Question asked by JonEvans on Aug 1, 2011
Latest reply on Aug 30, 2011 by SrinivasG

I'm working on a custom board with a BF547 operating in USB device mode.  I'm using the ADI SSL USB driver (no VDK), and running in to the following problem:

 

--USB works fine when the USB host and the BF boot together (the host is powering the BF board through a shared power controller)

 

--USB doesn't work when the BF resets but the host is already booted (i.e., if I do something to reset the BF board such as connect via JTAG to load new firmware, or use a built-in firmware update mechanism, the BF is not re-configured by the host)

 

--If I then unplug and re-plug the cable, USB starts working again.

 

Some possibly relevant details:

--Full-speed mode

 

--I have compiled my own libdrv548y in order to configure the PLL register for the crystal on the board.

 

--Looking at a USB analyzer, the "good" transaction flow on reset seems to be that an invalid (partial) GetDescriptor(Device) request is sent, the host assigns the BF an address, and then a valid GetDescriptor happens and the enumeration takes place. 

 

--In the "bad" case, the first GetDescriptor is ignored by the BF (no data is returned to the host, rather than partial data) and the transactions stop there, until I cause a reset by disconnecting and reconnecting the cable.

 

I have not made significant modifications to the example bulk USB driver code provided by ADI--I have added some debug output into the enumeration state machine, but that's about it.  Does anyone have any tips on things to try?

Outcomes