Easy Atmel AVRDUDE upload script

For my ASM and systems programming class, we occasionally write programs and need to upload them to the programmer board. Since my laptop only has USB ports, I was given a USB-to-Serial converter. In windows, there is device probing using AVR Studio that lets it find the device by itself. In linux, you only know which tty is the USB-to-Serial converter by looking at dmesg. Usually.

But this is the year 2008! Linux is a modern operating system! You should be able to do that probing through the command line, right?

Using HAL, you can easily find which device is the converter. It isn’t what AVR Studio does (sending magic packets) but it still works, and it doesn’t send any unwanted magic to my bluetooth radio or CDMA modem. I’ve written a small function for my zsh shell that automatically detects which USB tty is the serial converter and sets up the avrdude command as needed:

  1. alias avrdude=‘_avrdude’
  2. _avrdude() {
  3.     #Find the USB-to-serial adaptor entries, then find the actual USB device entry
  4.     UDI=$(hal-find-by-property –key info.product –string ‘FT232 USB-Serial (UART) IC’);
  5.     if [ -z "$UDI" ];then
  6.         echo "No USB device found."
  7.         return -1
  8.     fi;
  9.     UDI=$(hal-find-by-capability –capability ’serial’ | grep "$UDI")
  10.     #Get the USB character device
  11.     DEVICE=$(hal-get-property –udi "$UDI" –key linux.device_file)
  12.     NAME=$(hal-get-property –udi "$UDI" –key info.product)
  13.     echo "Using discovered device ${DEVICE} – ${NAME}"
  14.     =avrdude -c stk500v2 -p m16 -y -P "$DEVICE" $@
  15. }

Of course, this script is written for that specific USB device, and tells avrdude to prepare for my ATMega16 (-p m16) on the STK500v2 programming board. YMMV.

Leave a Reply