From the workshop: Arduino Uno R3 Development Board (ATmega328P) With USB Cable

View product
All articles
Technology

πŸ› οΈFix avrdude "not in sync: resp=0x00" and "programmer is not responding" Arduino Upload Errors

Getting "avrdude: stk500_getsync() not in sync: resp=0x00" on an Arduino Uno or Nano? A ranked checklist, flowchart and loopback test: board and port settings, Old Bootloader, pins 0/1, CH340 drivers, cables and re-burning the bootloader.

TThinking Robot Team 11 min read
Arduino Uno and Nano with the avrdude not in sync upload error and a troubleshooting flowchart
In this article (17)

The avrdude "not in sync" upload error (avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00, usually after avrdude: stk500_recv(): programmer is not responding) is the most common error beginners see on an Arduino Uno or Nano. The good news: the board is almost always fine.

Direct answer: "programmer is not responding" and "not in sync: resp=0x00" mean the PC sent data but the bootloader on the Arduino never replied. The usual causes are the wrong board, port or Processor setting (especially "ATmega328P (Old Bootloader)" on Nano clones), something connected to pins 0 and 1, a missing CH340 driver or a charge-only cable. Re-burning the bootloader is the last resort, not the first.

Quick fix: avrdude not in sync checklist

Work from the top; the causes are ordered from most to least likely.

#Likely causeHow to confirmFix
1Wrong port selectedThe ticked port does not vanish when you unplug the ArduinoPick the port that appears when you plug the Arduino in
2Wrong board or ProcessorNano, or a board that is not an UnoMatch Tools β†’ Board; on a Nano switch to ATmega328P (Old Bootloader)
3Wires on D0/D1Bluetooth, GPS or a shield using pins 0 and 1Unplug them during upload
4Port busyAccess is denied in the outputClose other Serial Monitors and serial apps
5Missing CH340 driverNo COM port, or yellow ! in Device ManagerInstall WCH's CH341SER driver
6Charge-only or bad cableBoard LED lights but no COM portUse a known data cable
7Auto-reset not workingLoopback passes; manual RESET timing makes it workPress RESET as "Uploading..." appears
8Missing or damaged bootloaderLoopback passes, everything else failsBurn the bootloader with Arduino as ISP

Flowchart: check board and port, then Nano processor option, then pins 0 and 1, then the loopback test, then the bootloaderWork down the chart. Most uploads are fixed in the first three boxes.

What does "programmer is not responding" mean?

It means avrdude could not get a valid reply from the bootloader on your board. When you click Upload, the board resets, a small program called the bootloader starts and listens on the serial pins for a moment, and avrdude sends a "get sync" command. A healthy bootloader answers with the byte 0x14 ("in sync"). If nothing useful comes back, avrdude retries ten times and gives up:

text
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
...
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

Arduino IDE 2 then shows Failed uploading: uploading error: exit status 1. Newer avrdude versions word these lines a little differently, but the causes are the same. Any resp= value other than 0x14 also means "no proper reply".

MessageBoardMeaning
stk500_getsync() ... not in sync: resp=0x00Uno, Nano, Pro MiniNo reply from the bootloader
stk500v2_ReceiveMessage(): timeoutMega 2560The Mega's version of the same problem
ser_open(): can't open device "\\.\COM4": The system cannot find the file specified.AnyWrong COM port, or the board was unplugged
ser_open(): can't open device "\\.\COM4": Access is denied.AnyAnother program has the port open
ser_open(): can't open device "/dev/ttyUSB0": Permission deniedLinuxYour user is not in the dialout group

Block diagram: the USB-to-serial chip's TX goes through a series resistor to D0 (RX), D1 (TX) returns through a resistor, and DTR resets the ATmega328P through a 100 nF capacitorThe upload travels on D0 and D1, and a DTR pulse through a 100 nF capacitor resets the chip so the bootloader is listening.

Cause 1: wrong board, Processor or port

The bootloader only answers if avrdude uses the right protocol and baud rate, and those come from your Tools menu.

Your boardTools β†’ BoardTools β†’ ProcessorUpload speed used
Uno and Uno clones (CH340)Arduino Uno(none)115200
Nano with new bootloaderArduino NanoATmega328P115200
Nano with old bootloader (many clones)Arduino NanoATmega328P (Old Bootloader)57600
Mega 2560 and clonesArduino Mega or Mega 2560ATmega2560 (Mega 2560)115200
Pro Mini 5 V with USB-serial adapterArduino Pro or Pro MiniATmega328P (5V, 16 MHz)57600

If the bootloader expects 57600 baud and avrdude talks at 115200 (or the other way round), you get exactly not in sync: resp=0x00. On a Nano, simply try the other Processor option before anything else. Official Nanos made since 2018 use the new bootloader, but many clones still ship with the old one.

For the port, unplug the board and open Tools β†’ Port, then plug it in and open the menu again. The new entry is your Arduino. An official Uno appears as "Arduino Uno (COMx)" in Device Manager; clones with a CH340 chip appear as "USB-SERIAL CH340 (COMx)". COM1 is almost never the Arduino.

Cause 2: something connected to pins 0 and 1

Pins D0 (RX) and D1 (TX) are the same wires the upload travels on. The USB-to-serial chip drives D0 through a series resistor, so any module that also drives D0, such as an HC-05 Bluetooth module, a GPS or another Arduino, overpowers it and the bootloader receives garbage.

Unplug anything on D0 and D1 (and remove shields) before uploading, then reconnect. For projects that need a second serial device, use SoftwareSerial on other pins so you never have to unplug.

Cause 3: the port is busy

Only one program can open a COM port at a time. A Serial Monitor in a second IDE window, a Processing or Python sketch, PuTTY or a 3D-printer program holding the port gives Access is denied or sometimes just "not in sync". Close them and upload again; restart the PC if you cannot find the culprit.

Cause 4: CH340 driver or a bad cable

Most Uno and Nano clones use a CH340 USB-to-serial chip, which needs a driver on some Windows PCs. If Device Manager (press Windows + X, then choose Device Manager) shows a yellow ! under Other devices, or no port appears, install WCH's CH341SER driver, then unplug and replug. Official Unos use an ATmega16U2 as the USB chip, as listed on the Uno Rev3 hardware page, and their driver installs with the Arduino IDE.

If the board lights up but Device Manager never changes when you plug it in, the cable is probably charge-only. Use a cable you know transfers data (the old USB-A to USB-B "printer cable" for an Uno, mini-USB or micro-USB for most Nanos). A good Arduino USB cable costs far less than the time spent on a bad one. Plug directly into the PC, not a front-panel port or unpowered hub.

Hands-on: the loopback test (two minutes, no code)

This test separates a USB problem from a microcontroller problem. Holding the ATmega328P in reset makes it let go of D0 and D1, so whatever you type goes into the USB chip, out on D0, through your jumper, back in on D1 and back to the PC.

Loopback test: RESET jumpered to GND and D0 jumpered to D1, so text typed in the Serial Monitor echoes back through the USB-to-serial chipIf the text comes back, the cable, driver and USB chip all work.

  1. Unplug USB. Remove everything else from the board.
  2. Fit a jumper from RESET to GND, and another from D0 to D1.
  3. Plug in USB, choose the port and open the Serial Monitor.
  4. Type hello and press Enter.
ResultWhat it provesNext step
hello comes backCable, driver and USB chip are fineBoard settings, auto-reset or bootloader
Nothing comes backFault on the USB sideNew cable, driver, other port; possibly a damaged USB chip
Port missing entirelyPC cannot see the boardCable and driver (Cause 4)

Remove both jumpers when you finish.

Cause 5: auto-reset is not working

If the loopback test passes but uploads still fail, the board may not be resetting at the right moment. The USB chip's DTR line pulses RESET through a 100 nF capacitor so the bootloader starts just before avrdude talks. A cracked capacitor, a damaged track or a USB-serial adapter without DTR (common on Pro Minis) breaks this.

Try a manual reset: click Upload, watch the status bar, and press and release RESET the moment it changes from "Compiling sketch..." to "Uploading...". It can take a few tries to get the timing right. If this works every time, the auto-reset circuit is the problem; you can keep uploading this way or repair the board.

Turn on File β†’ Preferences β†’ Show verbose output during upload to see exactly when avrdude starts talking.

Cause 6 (last resort): burn the bootloader

If the loopback test passes and nothing else works, the bootloader may be missing or corrupted. This happens after uploading with a USBasp or Sketch β†’ Upload Using Programmer (both erase it), or after an electrical accident. You can rewrite it with a second working Arduino.

Wiring for Arduino as ISP: programmer Uno D13, D12, D11 and D10 to the target's D13, D12, D11 and RESET, plus 5V and GND, with a 10 Β΅F capacitor from the programmer's RESET to GNDD13 to D13, D12 to D12, D11 to D11, D10 to the target's RESET, plus 5V and GND.

Programmer UnoTarget Nano or UnoSignal
D13D13SCK
D12D12MISO
D11D11MOSI
D10RESET (RST)Reset
5V5VPower
GNDGNDGround

The steps follow Arduino's official ArduinoISP guide:

  1. Upload File β†’ Examples β†’ 11.ArduinoISP β†’ ArduinoISP to the working Uno.
  2. Wire it to the target as above and fit a 10 Β΅F capacitor between the programmer's RESET and GND (stripe to GND).
  3. Select the target board in Tools β†’ Board (for a Nano, Processor ATmega328P gives the new bootloader), set Tools β†’ Programmer β†’ Arduino as ISP, and keep the programmer's port selected.
  4. Click Tools β†’ Burn Bootloader and wait for "Done burning bootloader".

Then remove the wires and upload to the target over its own USB as usual. If Burn Bootloader fails with a signature or "Device signature = 0x000000" error, check the wiring; if the wiring is right, the ATmega328P is probably damaged and a replacement Arduino board is the sensible fix.

macOS and Linux notes

The same causes apply; only the port names and permissions differ.

macOSLinux
Official Uno (16U2)/dev/cu.usbmodem.../dev/ttyACM0
CH340 clones/dev/cu.usbserial-... or /dev/cu.wchusbserial.../dev/ttyUSB0
Permission fixUsually not neededsudo usermod -a -G dialout $USER, then log out and back in

On Ubuntu 22.04 and later, a CH340 port that appears and then disappears is often grabbed by the brltty service; removing that package fixes it if you do not use a braille display.

Where to go next

Frequently asked questions

What does "avrdude: stk500_getsync() not in sync: resp=0x00" mean?

The PC sent a sync command to the Arduino's bootloader and got no valid answer (a working bootloader replies 0x14). The usual causes are the wrong port, the wrong board or Processor setting, wires on pins 0 and 1, or a missing driver.

How do I know if my Nano needs "ATmega328P (Old Bootloader)"?

Try it. Select Tools β†’ Processor β†’ ATmega328P (Old Bootloader) and upload. If it works, your Nano has the old bootloader, which runs at 57600 baud. Many clones ship with it, while official Nanos made since 2018 use the newer one.

Can a Serial Monitor being open cause upload errors?

The Arduino IDE closes its own Serial Monitor during uploads, but another program or a second IDE window holding the port will block it. You will usually see "Access is denied". Close the other program and try again.

Is my Arduino dead if I get "programmer is not responding"?

Probably not. Run the loopback test. If your text echoes back, the USB side works and the problem is settings, wiring on D0/D1, auto-reset or the bootloader, all of which are fixable. A board is only likely dead if Burn Bootloader also fails with correct wiring.

Do I need a USBasp to fix a missing bootloader?

No. A second Arduino Uno running the ArduinoISP example works as a programmer. A USBasp also works with Tools β†’ Burn Bootloader, but uploading sketches with it (Upload Using Programmer) erases the bootloader again.

T

Thinking Robot Team

Thinking Robot is a team of engineers and educators in Pune who design electronics and robotics kits and run hands-on workshops for students and schools. Spotted a mistake or have a question? Get in touch.

Filed under#Arduino#Electronics#Tutorial

Keep learning

WhatsApp