Fix “avrdude: verification error, first mismatch at byte 0x0000”
avrdude wrote your sketch but read back different bytes. Usually the wrong board/processor, a locked or bad bootloader, a dying ATmega or a flaky USB-serial link.
Community draft — report a mistake
What you see
avrdude: writing flash (924 bytes):
Writing | ################################################## | 100% 0.15s
avrdude: 924 bytes of flash written
avrdude: verifying flash memory against C:\Users\me\AppData\Local\Temp\arduino\sketches\5E1F\Blink.ino.hex:
Reading | ################################################## | 100% 0.12s
avrdude: verification error, first mismatch at byte 0x0000
0x0c != 0x62
avrdude: verification error; content mismatch
Failed uploading: uploading error: exit status 1avrdude: writing flash (924 bytes):
Writing | ################################################## | 100% 0.15s
avrdude: 924 bytes of flash written
avrdude: verifying flash memory against C:\Users\me\AppData\Local\Temp\arduino\sketches\5E1F\Blink.ino.hex:
Reading | ################################################## | 100% 0.12s
avrdude: verification error, first mismatch at byte 0x0000
0x0c != 0x62
avrdude: verification error; content mismatch
Failed uploading: uploading error: exit status 1
After writing your sketch, avrdude reads the flash back and compares it byte by byte with the .hex file. “Verification error” means they differ, so the board isn’t running what you uploaded.
Most of the time the cause is a mismatch between the chip and the board settings, or a protected bootloader that ignored the write. Pick the exact board, and if that doesn’t help, re-burn the bootloader.
Quick fix — try in order
- 1
Select the exact board and processor
Uploading Uno settings to an ATmega168 Nano, or 328P settings to an LGT8F328P or 328PB clone, writes to the wrong page layout. Check the chip marking and match Tools → Board and Processor.
- 2
Try a different cable and USB port
Corrupted bytes on the way back also fail verification. If the mismatch address changes each time, suspect the link.
- 3
Re-burn the bootloader
Using another Arduino as ISP (or a USBasp), run Tools → Burn Bootloader. This resets the fuses and lock bits; a lock bit left set makes reads return wrong data.
- 4
Check the supply voltage
Flash writes can fail on a Pro Mini or bare ATmega running below ~4.5 V at 16 MHz. Use a solid 5 V for programming.
Why it happens
What do the two numbers mean?
0x0c is what avrdude expected (from your .hex), 0x62 what it read back from the chip. Byte 0x0000 is the very start of flash — the reset vector — so the write didn't take at all.
0xff values read back
Reading 0xff means flash stayed erased — the write was ignored, typically because of lock bits or a bootloader protecting itself from the wrong upload.
Mismatch at a high address
If it fails near the end of flash, the sketch may overlap the bootloader area — the wrong Processor (Old Bootloader vs new) is selected.
Board-specific notes
Arduino Mega 2560 clone: Some Mega clones fail verification only with sketches over 64 KB because of an old bootloader bug. Burning the current bootloader fixes it.
Did this fix it?
Thanks — that helps us keep this page right.