USB weird behaviour between pre-production units GET DESCRIPTOR fail on some

Hi, I have this weird issue with the USB behaviour of some of our pre-production units.

2 boards with USB came out of the oven and their USB was working fine. I was able to program them with jtag and the usb cdc bootloader at the factory. 

Next day one of the boards is giving us a device descriptor request fail error in windows while the other works fine.

I tried with another PC, change cables, reflashed the unit, etc. but the one pcb still has the same issue. The other PCB works well on all machines with all cables.

Ok that must be a hardware issue right? Maybe some dry solder joint.

Before doing any rework, I loaded a simple program that enables the USB peripheral and toggles the D+/- lines like this on the pcb that was not enumerating.

HAL_USB_SERIAL_begin(); 
while(1){
        nrf_usbd_dpdmvalue_set(2);
        nrf_usbd_task_trigger(NRF_USBD_TASK_DRIVEDPDM);
        HAL_CORE_delay(1);
        nrf_usbd_dpdmvalue_set(4);
        nrf_usbd_task_trigger(NRF_USBD_TASK_DRIVEDPDM);
        HAL_CORE_delay(1);
}

The toggling is seen (img below) on the scope once 5V is provided to the board that enables the USB peripheral. So the D+/- pins are connected to the USB connector!

On both PCBs the USB signal integrity looks ok.

On the data side, I can notice the PCB that has the issue is not replying to the get descriptor request.

/resized-image/__size/756x102/__key/communityserver-discussions-components-files/4/2d20d7b0cd12478d3c86f16707995c0.png

On the PCB that works, there is a PID ACK present.

/resized-image/__size/755x126/__key/communityserver-discussions-components-files/4/c17c00081fb2f02bfed2d87ac858056.png

Added/removed 39Ohm series resistors too, but no change.

Code wise, the issue exists even when loading the stock CDC USB bootloader.

Chip revision on the board is QIAA-D0x

Is there anything else that can affect the USB block behaviour?

Any thoughts on what I should try next? Thanks!

Parents Reply Children
  • Hi Kenneth,

    The SDK used is nRF5_SDK_17.0.0_9d13099. I have also read all the erratas and the schematic is very close to the official one.

    We also made around 10 samples, all are working fine, and we are about to make 500+ units.

    I think with this particular unit, I was fiddling too much with the test jig and might have fried something.

    If indeed I fried the D+ or D- how can I test this? From what I read, the DPDMDRIVE block is infront of the USB engine and that works in my case.

    But is there a chance that while the USB engine was running at DPDMNODRIVE mode, the damage was done at the USB engine block? 

    Is there a way to apply some voltage on the USB pins and read the current value high/low or J/K from the USB engine directly? 

    Thanks!

  • Hi,

    I honestly don't know. If you are interested we can do a failure analysis of the chip in question (e.g. do a ATE re-test), this should confirm if something have been damaged.

    Kenneth

Related