Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Simple script to streamline the process of updating a Retrode's firmware on Linux
# By: Stephan Sokolow
# A simple script to streamline the process of updating a Retrode's firmware
# Linux and reduce the chance of errors.
# License: MIT
# Usage: ./ <firmware_file.hex>
show_usage() {
echo "Usage: $0 <firmware_file.hex>"
exit 1
error() {
echo "$(tput setaf 1)ERROR:$(tput sgr0) $@"
if [ "$#" != 1 ]; then
case "$1" in
;; # pass through to the body of the script
error "Please provide a file with a .hex extension."
exit 2
if [ ! -f "$1" ]; then
error "Missing or not a file: $1"
exit 4
if ! type dfu-programmer 1>/dev/null 2>&1; then
error "Could not find 'dfu-programmer'. Please install it and try again."
exit 5
echo "$(tput setaf 3)REMINDER:$(tput sgr0) Make sure you don't try to flash a Retrode 2 with Retrode 1 firmware or vice-versa."
echo "To put the Retrode into programming mode:"
echo "0. Unplug any other flashable AVR devices (eg. Arduino, BlissBox 4-Play)"
echo "1. Hold down RESET (the front button)"
echo "2. Hold down HWB (the back button)"
echo "3. Release RESET"
echo "4. Release HWB"
echo "After doing this, press Enter and your device will be reprogrammed..."
read _
if ! dfu-programmer at90usb646 get product-revision > /dev/null 2>&1; then
error "Could not find your Retrode"
echo "This is typically caused by one of two things:"
echo "1. You didn't successfully put it into programming mode"
echo "2. Your system may require you to run this via 'sudo' to grant "
echo " dfu-programmer permission to reprogram devices."
exit 3
echo "Erasing existing firmware..."
dfu-programmer at90usb646 erase &&
echo "Writing new firmware..." &&
dfu-programmer at90usb646 flash "$1" &&
echo "$(tput setaf 2)PROGRAMMING COMPLETE.$(tput sgr0) Please press RESET (the front button) on your Retrode"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment