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:
--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?