Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.
Upload error · avrdude

Fix “avrdude: Expected signature for ATmega328P is 1E 95 0F”

avrdude read a valid chip — just not an ATmega328P. It's a 328PB, an ATmega168, or an LGT8F328P clone. Select the matching board core instead of using -F.

Arduino Nano (clone)Arduino Uno (clone)LGT8F328P NanoATmega328PB boardsUpdated 3 Nov 2026

Community draft — report a mistake

What you see

OutputOutput
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9516 (probably m328pb)
avrdude: Expected signature for ATmega328P is 1E 95 0F
         Double check chip, or use -F to override this check.

Failed uploading: uploading error: exit status 1

Before writing, avrdude reads the chip’s signature and compares it with the chip you selected. Here it read a real signature, so the wiring and programmer are fine, but the chip isn’t an ATmega328P.

Cheap “Nano” and “Uno” clones sometimes carry a 328PB, an older ATmega168 or a Chinese LGT8F328P. Identify the chip and install the core made for it.

Quick fix — try in order

  1. 1

    Read the signature avrdude printed

    0x1e9516 = ATmega328PB. 0x1e9406 = ATmega168. 0x1e950f = 328P (correct). 0x1e9514 = ATmega328 (non-P). Anything else on a “Nano” may be an LGT8F328P or another clone chip.

  2. 2

    Look at the chip marking

    Use a phone torch and zoom: MEGA328P, MEGA328PB, MEGA168PA or LGT8F328P. Sellers often list all of them as “Nano ATmega328P”.

  3. 3

    Install the matching board package

    ATmega328PB: MiniCore (by MCUdude) → ATmega328 board → Variant 328PB. ATmega168: Tools → Processor → ATmega168. LGT8F328P: the LGT8fx core.

  4. 4

    Burning a bootloader? Use the same core

    Burn Bootloader also checks the signature. Select the correct chip first, or the fuses written will be wrong.

Why it happens

Why not just use -F?

-F skips the check but still uploads code built for a different chip. A 328PB build works on a 328P only by chance, and a 168 has half the flash — the sketch may not even fit.

Signature is right but this still appears

If avrdude prints 0x1e950f and still complains, a different Processor (for example ATmega328P on an Uno vs ATmega328 non-P) is selected. Re-check Tools.

Board-specific notes

LGT8F328P “Nano” boards: These run at 32 MHz with a different core and pinout details. They need the LGT8fx board package — the standard Nano entry will never upload to them.

↑↓ to move · Enter to open