Przejdź do głównej zawartości

Instalacja oraz konfiguracja programatora USBasp w systemie Linux

· 3 min aby przeczytać
Instalacja oraz konfiguracja programatora USBasp w systemie Linux

Krótki poradnik przedstawiający proces instalacji, konfiguracji oraz odczytu fusebit'ów z mikrokontrolera AVR za pomocą programatora USBasp w systemie Linux.

Wstępne wymagania

Przed przystąpieniem do procesu konfiguracji programatora należy go podłączyć do komputera wraz z jakimś mikrokontrolerem AVR, który posłuży nam do testów. Osobiście podczas tworzenia tego poradnika wykorzystałem programator ATB-USBASP firmy Atnel w wersji 4.2 oraz mikrokontroler Atmega32.

Instalacja avrdude

Avrdude jest darmowym narzędziem, które pozwala na zarządzanie pamięcią naszego mikrokontrolera za pomocą ISP (ang. In-System Programming) z poziomu naszego komputera wykorzystując przy tym zewnętrzny programator np. USBasp. Proces instalowania avrdude w systemie Linux sprowadza się do wykonania jednej komendy, ponieważ pakiet ten jest dostępny w głównym repozytorium Ubuntu:

sudo apt-get install avrdude

Teraz możemy spróbować odczytać fusebity z naszego mikrokontrolera wykonując poniższą komendę:

avrdude -c usbasp -p m32

Prawdopodobnie w konsoli został wyświetlony komunikat dotyczący błędu, który wystąpił podczas próby odczytu pamięci z naszego mikrokontrolera wynikający z braku uprawnień naszego użytkownika do programatora USBasp.

Próba odczytu fusebit’ów zakończona niepowodzeniem
Próba odczytu fusebit’ów zakończona niepowodzeniem

W celu naprawienia tego błędu należy stworzyć specjalnie spreparowany plik 99-usbasp.rules, który będzie zawierał informacje dotyczące uprawnień.

Nadanie wymaganych uprawnień

Na początku musimy zobaczyć, czy nasz programator USBasp jest widoczny w naszym systemie Linux. W tym celu należy go podłączyć do naszego komputera i wykonać komendę "lsusb" z poziomu terminala.

Identyfikacja programatora USBasp
Identyfikacja programatora USBasp

Jak widzimy na powyższym screenie podłączony programator został poprawnie wykryty przez nasz system. Teraz możemy przystąpić do rozwiązania problemu dotyczącego braku odpowiednich uprawnień.

Rozwiązanie problemu dotyczącego braku wymaganych uprawnień sprowadza się do stworzenia specjalnego pliku 99-usbasp.rules w katalogu /etc/udev/rules.d.

  • Tworzymy pusty plik 99-usbasp.rules:
sudo touch /etc/udev/rules.d/99-usbasp.rules
  • Przechodzimy do edycji pliku :
sudo nano /etc/udev/rules.d/99-usbasp.rules
  • Kopiujemy i wklejamy poniższą zawartość:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", ATTRS{idProduct}=="USBasp", GROUP="users", MODE="0666"
Edycja pliku 99-usbasp.rules z poziomu terminala
Edycja pliku 99-usbasp.rules z poziomu terminala
Odczyt idVendor oraz idProduct

Większość programatorów USBasp bazujących na wsadzie autorstwa Thomas Fischl’a posiada ten sam identyfikator "vendor" oraz "product" jednak warto sprawdzić, czy Twój programator nie posiada innych wartości. W tym celu wystarczy wykonać polecenie "lsusb" i odczytać wymagane wartości.

  • Na koniec zapisujemy plik:
    • ctrl + x
    • y
    • enter

Ostatni krok sprowadza się do wykonania poniższej komendy:

sudo udevadm trigger

Teraz możemy przejść do testowania naszej konfiguracji.

Odczyt fusebit’ów z mikrokontrolera

W celu przetestowania naszej konfiguracji możemy odczytać fusebity z naszego mikrokontrolera wykonując ponownie poniższą komendę:

avrdude -c usbasp -p m32

Jeśli programator został poprawnie skonfigurowany to naszym oczom powinien ukazać się poniższy rezultat:

Odczyt fusebit’ów z mikrokontrolera
Odczyt fusebit’ów z mikrokontrolera

W tym poście opisałem jedynie proces konfiguracji programatora USBasp w środowisku Linux, co oznacza, że aby móc pisać i kompilować własne programy na mikrokontrolery z rodziny AVR wymagana jest dodatkowa konfiguracja m.in. instalacja specjalnego kompilatora avr-gcc.

Piotr Batko 22-05-2022

[Ubuntu 20.04.4 LTS, Atnel USBASP 4.1, ATmega16A] Wykonałem wszystko jak powyżej i dostałem: avrdude: error: program enable: target doesn't answer. 1 avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check. Pomogło obniżenie baudrate'u komunikacji do 1kHz opcją -B (ustawia ona okres sygnału zegarowego w mikrosekundach). Czyli zapytanie które u mnie zadziałało wyglądało: avrdude -c usbasp -p m16 -B1000

Karol 29-10-2020

Cześć, u mnie na linux mint 19 śmiga bez tworzenia pliku konfiguracyjnego :)