I am using an STM32F302C8T6 and ST-LINK v2. The MCU should normally be pulling NRST high through its weak pull-up resistor, however it's being held low somehow. This prevents me from being able to flash.
BOOT0 is tied low. If I hold NRST high with a PSU at 3.3V with current limiting to 5mA, the debugger can pull NRST low temporarily to reset the MCU and flash reliably.
This is the MCU schematic:
The only thing that was connected between NRST and the debugger was a TVS diode that I removed (D41).
I am seeing this behavior across multiple boards with similar schematics.
I suspected that D42 was backdriving the MCU as I was reading 3V on the open drain STATUS_R/G/B inputs, so I removed D42.
After re-reading the datasheet, I realize that I should have a 0.1uF decoupling cap from NRST to GND. I don't think that is the problem though.
Best Answer
I measured the resistance from NRST to GND and it was ~2k. I de-soldered the MCU and re-measured the resistance from NRST to GND, which was now larger than 20M.
The internal circuitry is just a pull-up and schmitt trigger, so I concluded that there was some internal short in the MCU, which is backed up by bizarre behavior by the MCU beyond this NRST problem. I cannot double check this with another MCU as the pads are messed up from all the rework now.