Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AVRISP MKII doesn't work with AVRDUDE on Linux

The system sees something is plugged in when I plug and unplug it:

bluehat@Matapan:/dev$ tail -f /var/log/syslog
Mar 23 15:36:35 Matapan kernel: [156082.112874] usb 7-1: new full speed USB device using uhci_hcd and address 6
Mar 23 15:47:19 Matapan kernel: [156726.248081] usb 7-1: USB disconnect, address 6
Mar 23 15:47:29 Matapan kernel: [156736.200148] usb 6-1: new full speed USB device using uhci_hcd and address 3

AVRISP MKII should rely on cdc-acm:

bluehat@Matapan:/dev$ modinfo cdc-acm -V
module-init-tools version 3.12

So it should be able to see it just fine, and yet I am unable to write to it.

avrdude -p m1280 -c avrispmkII -P usb -U test.hex

Returns

avrdude: usb_open(): cannot read serial number "error sending control message: Operation not permitted"
avrdude: usb_open(): cannot read product name "error sending control message: Operation not permitted"
avrdude: usbdev_open(): error setting configuration 1: could not set config 1: Operation not permitted
avrdude: usbdev_open(): did not find any USB device "usb"
like image 594
Katy Levinson Avatar asked Mar 23 '11 22:03

Katy Levinson


4 Answers

It turns out that Ubuntu will acknowledge that the object is there but not play nicely with it until you fix up some of your udev rules. Thanks to http://steve.kargs.net/bacnet/avr-isp-mkii-on-ubuntu-hardy/ which provided files that only needed a little updating.

Create new file /etc/udev/avrisp.rules

SUBSYSTEM!="usb", ACTION!="add", GOTO="avrisp_end"

# Atmel Corp. JTAG ICE mkII
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2103", MODE="660", GROUP="dialout"
# Atmel Corp. AVRISP mkII
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="660", GROUP="dialout"
# Atmel Corp. Dragon
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2107", MODE="660", GROUP="dialout"

LABEL="avrisp_end"

Now create a virtual link to the file and give it a rule priority

cd /etc/udev/rules.d
sudo ln ../avrisp.rules 60-avrisp.rules

Check you're in the dialout group

groups

Restart udev

sudo service udev restart

Hooray!

like image 106
Katy Levinson Avatar answered Nov 05 '22 05:11

Katy Levinson


For Ubuntu 12.04, there's a minor change that must be carried out to the configuration that Katy posted:

All occurrences of SYSFS should be replaced with ATTR

Additionally, if you're still having problems, make sure you have installed all the required dependent libraries. I found that I had to install the uisp package as well.

If restarting udev doesn't make a difference, unplugging the programmer and plugging it in back in does.

like image 28
antler Avatar answered Nov 05 '22 06:11

antler


Updated rule that works for 13.10:

SUBSYSTEM!="usb", ACTION!="add", GOTO="avrisp_end"

# Atmel Corp. JTAG ICE mkII
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2103", MODE="660", GROUP="dialout"
# Atmel Corp. AVRISP mkII
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="660", GROUP="dialout"
# Atmel Corp. Dragon
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2107", MODE="660", GROUP="dialout"

LABEL="avrisp_end"

Based on previous posts about changes.

like image 7
Uberdaff Avatar answered Nov 05 '22 07:11

Uberdaff


Seems they changed it again in 12.10
The Subsystem is now "usb"

I found a command which shows what you need. For that you just need to know the Bus and Device number from the plugged device (use lsusb)

Bus 003 Device 010: ID 03eb: lsusb

So my Bus number from the isp is 003 and Device is 010 (edit the end /003/010 to your needs)

udevadm info --attribute-walk --name=bus/usb/003/010


shows among many other things

SUBSYSTEM=="usb"

ATTR{idVendor}=="03eb"

ATTR{idProduct}=="2104"

Replace/change the created rule above and everything should work

If there are other Problems the Command will show them to you, it checks the rules (found a typo that way :)) If there is no error it won't show anything (Didn't realise for some time)

like image 2
Horaz Avatar answered Nov 05 '22 07:11

Horaz