# microUPDI
**Repository Path**: hygbeyond/microUPDI
## Basic Information
- **Project Name**: microUPDI
- **Description**: DIY UPDI programmer with open source hardware!
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-12-23
- **Last Updated**: 2023-10-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: updi, programmer, Arduino
## README
# microUPDI
DIY UPDI programmer with open source hardware.
**Available for purchase at my [Tindie store](https://www.tindie.com/products/MCUdude/microupdi-programmer/)!**
## Hardware
The microUPDI programmer is based on the [Sparkfun Pro Micro 5V/16MHz board](https://www.sparkfun.com/products/12640) (cheapers knock-offs also compatible) together with a daughterboard. This makes the programmer both cheap and easy to assemble.
## Features
* A 6-pin UPDI programming connector
- UPDI interface for programming and debugging
- Serial interface for communicating with the target over UART
* Voltage selection jumper where you can choose between 5V, 3.3V or no target power
* RXD and TXD LEDs
* Buffered RXD and TXD lines for high impedance inputs and low impedance outputs
* Status LED
- Power up -> LED is briefly lid
- Normal operation -> LED is not lid
- Programming -> Activity indicator
* Small in size (18.3mm x 49.6mm)
* **Open source hardware!**
## Firmware
In order to flash the Pro Micro with mEDBG firmware you'll have to install a hardware package to Arduino IDE.
#### Boards Manager Installation
* Open the Arduino IDE.
* Open the **File > Preferences** menu item.
* Enter the following URL in **Additional Boards Manager URLs**:
```
https://mcudude.github.io/microUPDIcore/package_MCUdude_microUPDIcore_index.json
```
* Separate the URLs using a comma ( **,** ) if you have more than one URL
* Open the **Tools > Board > Boards Manager...** menu item.
* Wait for the platform indexes to finish downloading.
* Scroll down until you see the **microUPDI flash tool** entry and click on it.
* Click **Install**.
* After installation is complete close the **Boards Manager** window.
#### Manual Installation
Visit [microUPDIcore](https://github.com/MCUdude/microUPDIcore), and click on the "Download ZIP" button. Extract the ZIP file, and move the extracted folder to the location "**~/Documents/Arduino/hardware**". Create the "hardware" folder if it doesn't exist.
Open Arduino IDE, and a new category in the boards menu called "microUPDI Firmware Uploader" will show up.
### Flashing the Arduino Pro Micro
* Select **microUPDI Firmware Uploader** from the boards menu.
* Connect your Arduino Pro Micro hardware to your computer through a micro USB cable.
* Click on the upload button. This will upload some pre-built binaries, and he code in the current sketch isn't touched at all.
* The IDE will now automatically try to reset the Pro Micro and load it with new firmware.
- If you've already flashed your Pro Micro with mEDBG firmware and want to upgrade or re-flash it you will most likely encounter issues with the auto reset functionality and uploading will fail. All you have to do is to click *Upload* in Arduino IDE and then manually reset the Pro Micro within about three seconds. Resetting be done by shorting out pin 5 and 6 on the 32U4 ISP header for a brief second with a tweezer, screwdriver or jumper wire.
* After uploading is finished you will see an error telling you there's **content mismatch from flash address 0x7000**. This is normal and is to be expected due to the protected bootloader area, and the standard Pro Micro bootloader is retained.
* Congratulations, you now have a working UPDI programmer!
### Usage
After the Pro Micro is flashed with mEDBG firmware it will present itself to the computer as an **mEDBG CMSIS-DAP** device. In Atmel Studio it will show up as a generic mEDBG device, while in Arduino IDE it will show up as an **Arduino UNO WiFi Rev2*.
If you're using the microUPDI programmer with [megaTinyCore](https://github.com/SpenceKonde/megaTinyCore) you just select the *Onboard Atmel mEDBG* option in the Programmers menu. For [MegaCoreX](https://github.com/MCUdude/MegaCoreX) it's *Atmel mEDBG (microUPDI)*.
Here's an example command on how you can communicate with an ATmega4809 through Avrdude:
```
$ avrdude -Cavrdude.conf -v -patmega4809 -cxplainedmini_updi -Pusb -b115200
```
### Pinout
The UPDI pinout is based on the standard 6-pin ISP pinout. It's revese insertion tolerant, just like the "old" ISP interface. It's also compatible with the Atmel ICE UPDI pinout. This means if you've designed a board to work with this (microUPDI) programmer, you can safely connect and use an Atmel ICE programmer without damaging your board or the ICE programmer.
**Note that the RXD and TXD lines are swapped on the target.**
*Click to enlarge:*
