AVR ISP mkII on Ubuntu Hardy
I created a BACnet Development Kit, compiled the open source BACnet Protocol Stack hosted on SourceForge.net firmware using gcc-avr, and attempted to load the firmware onto the kit using an Atmel AVR ISP mkII USB programmer. I connected the AVR ISP mkII to my Ubuntu Hardy Linux PC and attached the 2×3 ISP cable to the development kit board, and attempted to program using avrdude:
$ avrdude -c avrispmkII -p m644p -P usb -e -U flash:w:bacnet.hex
avrdude: usb_open(): cannot read serial number "error sending..."
avrdude: usb_open(): cannot read product name "error sending..."
avrdude: usbdev_open(): error setting configuration...
avrdude: usbdev_open(): did not find any USB device "usb"
Wow! That wasn’t nice. A search on the Internet turned up some answers about how to fix the problem, and I modified my /etc/udev/avarice.rules file to look like this:
SUBSYSTEM!="usb_device", ACTION!="add", GOTO="avarice_end"
# Atmel Corp. JTAG ICE mkII
SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2103", MODE="660", GROUP="dialout"
# Atmel Corp. AVRISP mkII
SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2104", MODE="660", GROUP="dialout"
# Atmel Corp. Dragon
SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2107", MODE="660", GROUP="dialout"
LABEL="avarice_end"
I disconnected and reconnected my AVR ISP mkII, and tried again. I still had the same results. I checked that I was a member of the dialout group:
$ groups
skarg adm dialout cdrom floppy audio dip video plugdev users fuse lpadmin admin
I looked at the symbolic link in the /etc/udev/rules.d/ directory and also consumed the README file. My file had the following name:
/etc/udev/rules.d/z60_avarice.rules
So I changed the filename:
$ sudo mv /etc/udev/rules.d/z60_avarice.rules /etc/udev/rules.d/60-avarice.rules
I unplugged the AVR ISP mkII, and plugged it in again. I tried to run avrdude again:
avrdude -c avrispmkII \
-p m644p -P usb -e \
-U flash:w:bacnet.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e960a
avrdude: erasing chip
avrdude: reading input file "bacnet.hex"
avrdude: input file bacnet.hex auto detected as Intel Hex
avrdude: writing flash (57406 bytes):
Writing | ################################################## | 100% 6.31s
avrdude: 57406 bytes of flash written
avrdude: verifying flash memory against bacnet.hex:
avrdude: load data flash data from input file bacnet.hex:
avrdude: input file bacnet.hex auto detected as Intel Hex
avrdude: input file bacnet.hex contains 57406 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 5.41s
avrdude: verifying ...
avrdude: 57406 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
The kit programmed successfully, and began operation.