Continue to Site

Welcome to

Welcome to our site! is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Programming the new DX series of AVR microcontrollers using the UPDI ISP interface

Not open for further replies.


Full Member level 5
Jul 6, 2014
Reaction score
Trophy points
West Coast
Activity points
This is a project for programming AVR DX series of microcontrollers.

It is using an AVR128DA28 Microcontroller with a UPDI ISP interface mounted on a
breadboard, and an Arduino as a UPDI programmer.

Programming an Arduino Nano or Uno to be a jtag2updi programmer.
The examples below are using a nano on Ubuntu Linux. To install avrdude on Linux
If not already installed, in a terminal run: "sudo apt-get install avrdude"

Download the firmware "" from github
to program an Arduino as a UPDI programmer,

Extract the .zip file to create the folder "jtag2updi-master".

Go to "jtag2updi-master/build" folder and get firmware file "JTAG2UPDI.hex".

Upload this file to the Arduino to make it into a jtag2updi programmer.

Use the avrdude command in a terminal:

avrdude -p m328p -P /dev/ttyUSB0 -c arduino -b 57600 -U flash:w:JTAG2UPDI.hex:

Uploading a blink sketch to the AVR128DA28 using the Arduino IDE
Programming the AVR128DA28 using the Arduino IDE 1.8.9 with the Arduino as
a jtag2updi programmer:

connect the AVR128DA28 to the Arduino with three wires and a 4.7k resistor

Arduino to AVR128DA28

5 volts to 5 volts pin 20
ground to ground pin 21
Arduino D6 to UPDI pin 18 with a 4.7k resistor in series.

connect 1uF and 10uF decoupling capacitors across the power and ground pins of the
AVR128DA28 pins 20 & 21.

In the ARDUINO IDE 1.8.9 go to "Tools-Board-Boards Manager" and search boards manager
for "DxCore".

Install "DXcore by Spence Konde"

In IDE "Tools" select the "Board-DxCore-AVR DA-series (no bootloader)"

under "Tools-Port" select the port for the Arduino, (in linux /dev/ttyUSB0 for a nano)
under "Tools-programmer" select jtag2updi

load the blink test program into the IDE
set "LED pin" to 5 in the blink sketch - this selects PA5 pin27 of the AVR126DA28.

Connect an LED with a series 330 ohm current limiting resistor to PA5 (pin27) of the AVR128DA28.

In the Arduino IDE select "Upload"

The blink sketch should upload and the LED should begin to blink.

If the upload fails, check the messages, check the connections, try again.
Decoupling capacitors on power pins seem to reduce the failure rate, but
it may fail about 1/2 the time with the chip on a breadboard.

Uploading a sketch to the AVR128DA28 using avrdude from the command line
To program the AVR128DA28 from the command line using avrdude, use the avrdude in the .arduino15
folder. It is part of the DxDore downloaded by Boards Manager above.
It has been modified to use the AVR128DA28 with jtag2updi programmer. (this is what
the Arduino IDE is using).

Here is an example using the "Blink.ino.hex" file compiled for the AVR128DA28 by the IDE
in the example above. Get the .hex file from the /temp/build folder created by the Arduino IDE.

Use the command:

.arduino15/packages/DxCore/tools/avrdude/6.3.0-arduino17or18/bin/avrdude -C .arduino15/packages/DxCore/hardware/megaavr/1.4.10/avrdude.conf -v -p avr128da28 -c jtag2updi -P /dev/ttyUSB0 -U flash:w:Blink.ino.hex:i


Not open for further replies.

Part and Inventory Search

Welcome to