Programator AVR USBasp na Linuksie

Programator AVR na bazie USBaspZ braku portu LPT w nowym komputerze zaopatrzyłem się w programator USB, żeby móc czymś męczyć AVR-y. Padło na urządzenie na bazie USBasp, konkretnie model firmy Protech Micro (można ich znaleźć także na Allegro). Zakup był trochę ryzykowny, gdyż producent nie gwarantował, że programator będzie obsługiwany pod Linuksem, choć fakt, iż układ jest wspierany przez AVRDUDE dobrze rokował. I rzeczywiście, pod rootem programator śmigał od ręki. Gorzej było z uruchomieniem go z konta zwykłego użytkownika. Drogą eksperymentów z udev udało mi się w końcu nadać odpowiednie uprawnienia i mogę spokojnie zająć się programowaniem. Oto droga do celu pod Arch Linuksem.

Instalujemy AVRDUDE:

# pacman -S avrdude

Sprawdzamy, czy programator jest poprawnie podłączony. Komenda

# avrdude -p t13 -c usbasp -v

(obecnie używam ATtiny13) powinna m.in. odczytać fuse bity z naszego uC. Nie dajmy się tu zwieść informacji o używanym porcie

Using Port            : /dev/parport0

gdyż, rzecz jasna, nie korzystamy wcale z LPT, lecz z USB.

Spróbujmy jednak szczęścia z poziomu użytkownika:

$ avrdude -p t13 -c usbasp -v

Jeżeli znów się nam udało, możemy spokojnie zająć się pracą, jednak komunikat

avrdude: Warning: cannot query manufacturer for device: error sending control message: Operation not permitted
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

wróży nam odrobinę walki o uprawnienia.

Zacznijmy od tego, że AVRDUDE podaje nam identyfikator urządzenia, co pomaga szybko sprawdzić, jak wygląda dostęp do niego. Poleceniem

# lsusb -v|grep -i 16c0:05dc

odnajdujemy ścieżkę do naszego programatora. Przykładowo może to wyglądać tak:

Bus 006 Device 006: ID 16c0:05dc

Nie jest trudno rozszyfrować tę informację i wyświetlić uprawnienia urządzenia:

# ls -l /dev/bus/usb/006/006

Zapewne zobaczymy, że do naszego programatora może pisać tylko root. Tu z pomocą przychodzi nam udev, który ochoczo przystanie na zmianę uprawnień, jeżeli ładnie go o to poprosimy. Tworzymy plik /etc/udev/rules.d/95-myrules.rules, który zawiera tę prośbę:

# Programator AVR USBasp
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", ATTRS{product}=="USBasp", GROUP="usb", MODE="0664"

Tu należy zauważyć, że nazwa pliku zaczyna się od 95, aby nasze reguły zostały przetworzone pod koniec przeglądania urządzeń. Dzięki temu domyślne ustawienia nie nadpiszą naszych. W razie problemów możemy użyć opcji MODE:="0664", która zablokuje przetwarzanie uprawnień przez inne reguły.

Oczywiście, dla bezpieczeństwa, a raczej dla elegancji, nie zastosowaliśmy uprawnień 0666, lecz utworzyliśmy grupę usb z możliwością zapisu. Grupę tę dodajemy chyżo do systemu, po czym się do niej dopisujemy:

# groupadd usb
# gpasswd -a użytkownik usb

Odłączamy i podłączamy programator, po czym sprawdzamy, czy możemy już zaprogramować uC z poziomu użytkownika. Jeżeli nie, problemu należy szukać przede wszystkim w uprawnieniach. Przypominam, że po ponownym podłączeniu programator będzie dostępny pod innym adresem — zapewne o numer większym, a więc w tym przypadku: /dev/bus/usb/006/007, zresztą w każdej chwili możemy to sprawdzić za pomocą lsusb.

W przypadku kłopotów można też spróbować polecenia

# udevadm control --reload-rules

lub po prostu restartu komputera.

Komentarzy: 4 do „Programator AVR USBasp na Linuksie“

  1. Michal komentuje:

    Ja korzystam z AvrUsb500 (programator Open Source) http://www.tuxgraphics.org/electronics/200705/article07052.shtml Szczerze polecam, działa wyśmienicie :)

  2. nalu komentuje:

    Czy u Ciebie, podczas programowania, występuje taki komunikat:
    avrdude: warning: cannot set sck period. please check for usbasp firmware update?

  3. vmario komentuje:

    Nie, nie widzę nic takiego u siebie. Jeżeli Twój programator w ogóle nie działa, to może zajrzyj do wątku na AVR freaks. Tam ktoś miał taki sam komunikat, a jego programator nie działał, bo miał zwarcie między zegarem a resetem.

  4. nalu komentuje:

    Dzięki za odpowiedź. W moim przypadku programator działa i nie ma z nim żadnych problemów (póki co), tylko zastanowił mnie ten komunikat.

Dodawanie komentarzy

XHTML: Możesz używać tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">