I am in the process of designing and prototyping up a circuit using the ATMega328P in a MLF package. It's the first time I've worked with the '328P on my own circuit, and the first time I've worked with MLF (though QFN is an every day experience for me, and I work daily with plenty of other microcontrollers...)
The ICSP portion of the circuit is pretty standard. I lifted it directly from the Arduino UNO schematic, but it's really just directly pins to header.
Trying to program it with a USB-ASP (cheap one from China) and it can't find the chip. I have confirmed the programmer works by connecting it to an Arduino, so that's fine. I have tried powering externally and powering from the USB-ASP. Nothing has any effect.
I have triple and quadruple checked the schematic and the PCB layout, and all seems perfectly fine to me - however I have probably gone PCB-Blind and am missing something absolutely obvious. I have checked continuity, probed for shorts, reflowed the chip, replaced the chip with one from a completely different batch, built a new circuit with just the AVR and decoupling capacitors - everything. I have even tried injecting a 1MHz clock signal into XTAL1... And all to no avail.
Reflowing is done using low-temperature paste at 250C.
AVRDude output with "force" enabled:
$ avrdude -p atmega328p -c usbasp -F avrdude: error: program enable: target doesn't answer. 1 avrdude: initialization failed, rc=-1 avrdude: AVR device initialized and ready to accept instructions avrdude: Device signature = 0xd037cf avrdude: Expected signature for ATmega328P is 1E 95 0F avrdude done. Thank you.
The device signature is a random number. I get the same result with the programmer completely disconnected.