Programator AVR USBasp v2.0 Lcsoft i Linux

Programator USBasp stał się godnym i naturalnym następcą STK200 podłączanym do portu LPT. Ten nowszy, choć nieco bardziej skomplikowany w budowie, jest znacznie szybszy i funkcjonalniejszy, głównie za sprawą możliwości podłączenia do portu USB i funkcją zasilania programowanego układu. Samodzielne złożenie tego programatora nie jest trudne i taki układ na pewno pojawi się na stronie. Dziś zajmiemy się bardzo tanim gotowcem, idealnym dla początkujących – USBasp V2.0 Lcsoft Studio w cenie około 15zł na allegro i jeszcze taniej na chińskich portalach.

Co to jest USBasp Lcsoft?

Odpowiadając krótko na powyższe pytanie – chiński klon programatora USBasp opracowanego przez Thomasa Fischla. Urządzenie jest praktycznie zgodne elektrycznie z pierwowzorem. Porównując PCB ze schematem oryginału można zauważyć brak kondensatora elektrolitycznego C1 o pojemności 4,7μF, ale został dodany półprzewodnikowy bezpiecznik o oznaczeniu F1. W nieco inny, korzystniejszy sposób, rozwiązano zasilanie, dostępne na 2 pinie złącza KANDA. W oryginale było to +5V z USB lub jego brak, chiński odpowiednik posiada 3 opcje – 5V, brak (po zdjęciu zwory) lub 3,3V. Zrezygnowano z wlutowania goldpinów JP2 – zwora Self programming i JP3 – Slow SCK. USBasp Lcsoft posiada nieco zmodyfikowane oprogramowanie i Chińczycy założyli, że JP3 jest zbędne, a JP2 nie będzie wykorzystywane. Programator posiada kompaktowe wymiary, laminat jest węższy niż złącze KANDA:

JP w chińskim USBasp

Jeśli u kogoś pojawiło się pytanie – czy warto kupić? W chińskich sklepach cena wynosi około 2$ z darmową wysyłką do Polski, więc odpowiedź jest chyba jasna ;).

Pierwsze podłączenie programatora

W linuksie wystarczy podłączyć programator do portu USB i gotowe, nie trzeba instalować żadnych sterowników, wszystko jest w kernelu. Wpisując w terminalu

lsusb

powinniśmy otrzymać wynik podobny do poniższego

Wykrywanie lsusb w linuksie

 

Czyli Vendor ID to 16C0 i Product ID to 05DC. Podłączmy teraz za pomocą kabelka IDC10 (2×5 PIN) mikrokontroler AVR i za pomocą avrdude spróbujmy odczytać podstawowe informacje:

avrdude -c usbasp -p m8

Parametr -c to typ programatora, -p model mikrokontrolera AVR, tutaj jest to atmega8. Więcej o avrdude i innych narzędziach znajdziesz tutaj: Instalacja narzędzi dla AVR i IDE Eclipse w Linux Mint. Wynikiem działania jest…

Brak uprawnień usbasp w linuksie

No właśnie, operacja niedozwolona dla zwykłego użytkownika. Możemy to sprawdzić wydając polecenie:

ls -l /dev/bus/usb/001/018

Wydając wcześniej komendę lsusb widziałem, że jest to urządzenie nr 018 na magistrali 001, wynik był zgodny z oczekiwaniem:

Standardowe uprawnienia w Linux

Pewnym rozwiązaniem (nieeleganckim) jest uruchamianie avrdude z uprawnieniami roota. Ładniej jednak nadać uprawnienia do komunikacji z programatorem użytkownikowi, na początek dodajemy regułę:

nano /etc/udev/rules.d/59-usbasp.rules

Czyli w odpowiednim miejscu tworzymy plik xx-usbasp.rules (xx – jakaś niewykorzystana liczba) i wpisujemy w nim:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0666"

W terminalu wygląda to tak:

USBasp - reguła

Po zapisaniu pliku, wydajemy komendę:

sudo udevadm trigger

I jeszcze raz sprawdzamy uprawnienia:

Właściwe uprawnienia do usbasp

Już jest OK :). Ponawiamy próbę odczytu naszej atmegi8:

Warning sck period w usbasp

Na dzień dobry ostrzeżenie – avrdude nie może ustawić taktowania na linii SCK magistrali ISP i sugeruje zrobić update firmware. Dalej wszystko jest OK, odczytana została poprawna sygnatura i fusebity. Z tym warningiem da się żyć, tzn. programować, ale da się też podnieść firmware w naszym tanim, chińskim programatorze, do wyższej wersji i zapomnieć o ostrzeżeniu.

Aktualizacja firmware w USBasp V2.0 Lcsoft Studio

Do aktualizacji oprogramowania programatora USBasp będzie potrzebny… programator mikrokontrolerów AVR. Może to być choćby taki najprostszy, składający się z wtyczki DB25 i kabelka + zasilacz stabilizowany 5V, można też wykorzystać drugi programator USBasp.

Warto zacząć od pobrania nowej wersji firmware’u, najlepiej ze strony domowej autora projektu: www.fischl.de/usbasp/ w części download wybieramy najnowszą wersję paczki:

Firmware usbasp ze strony domowej

Po rozpakowaniu archiwum, przechodzimy do folderu bin/firmware i kopiujemy plik dla odpowiedniego mikrokontrolera (np. usbasp.atmega8.2011-05-28.hex) w dogodne miejsce. W programatorze, który będziemy aktualizować, zwieramy punkty lutownicze JP2 – idealna do tego celu będzie odizolowana miedziana żyła skrętki komputerowej. Powstaje nam taki potworek:

Aktualizacja oprogramowania w USBasp

Programatory wyposażone w złącze KANDA łączymy kablem IDC10 jeden-do-jednego. Programowany programator nie może być wpięty w port USB, a zworka wyboru zasilania musi być ustawiona na 5V. Na początek odczytajmy fusebity z chińskiego usbasp:

avrdude -c usbasp -p m8 -U lfuse:r:-:h -U hfuse:r:-:h

Lcsoft Studio USBasp fusebity

No i mamy wyniki szesnastkowo: HighFuse: D9 i LowFuse: 9F. W pliku Readme.txt znajdującym się w ściągniętej paczce, dla atmegi8 są podane nieco inne wartości: hfuse: C9 i lfuse: EF. Różnice w zaprogramowanych poszczególnych bitach zostawiam dla dociekliwych. Na pewno warto ustawić wartości wskazane przez autora projektu, ale najpierw wgrajmy nowy soft:

avrdude -c usbasp -p m8 -U flash:w:sciezka_do_pliku/usbasp.atmega8.2011-05-28.hex

Nowy firmware dla USBasp

Wgrało się, weryfikacja przebiegła pomyślnie. To teraz fusebity, po wpisaniu warto sprawdzić dwa razy przed wciśnięciem [Enter], bo pomyłka może zamienić programator w przycisk do papieru:

avrdude -c usbasp -p m8 -U hfuse:w:0xC9:m -U lfuse:w:0xEF:m

Wgrywanie fusebitów do usbasp

No i udało się :).

Od teraz, wykonując operacje odczytu/zapisu na mikrokontrolerach AVR, musimy programowo ustawić taktowanie linii SCK. W avrdude realizowane jest to za pomocą parametru -B X, gdzie X to liczba. Im wolniejsze taktowanie mikrokontrolera, tym większa liczba. Dla zegara 8MHz i więcej możemy pominąć -B, ale dla 1MHz trzeba wpisać -B 3, czyli:

avrdude -c usbasp -p m8 -B 3

Spowoduje poprawne odczytanie sygnatury atmegi8 taktowanej zegarem 1MHz, czyli takiej świeżej, z półki sklepowej.

Możesz również polubić…

19 komentarzy

  1. wowa tatarin pisze:

    jak uzyskać uprawnienie do edycji pliku w gnu nano? bo właśnie z ich powodu nie chce mi ich edytować (mam programator o tych samych id)(wiem prawdopodobnie jest to głupie pytanie, ale moja wiedza oscyluje bardzo blisko zera)

    • Wojtek pisze:

      sudo nano /sciezka/do/pliku

      • wielkie dzięki, działa, mam ten programator od niemal roku i tyle kombinowałem w windowsie, a dziś, akurat chciałem sobie odświeżyć i zobaczyć co tu się dzieje, i widzę ten temat “…i linux” bo od miesiąca jestem na ubuntu, teraz może nauczę się c na mikrokontrolery, dostałem wtedy nawet książkę, wielkie dzięki

  2. Shiro pisze:

    Do zabawy w programowanie AVR pod Linux, polecam ucs-prog. Darmowy, bez reklam itp.

    • Wojtek pisze:

      (Nie)Subtelna reklama 😉

      • Shiro pisze:

        W sumie racja, wyszło na reklamę. Nie specjalnie, no ale… Skoro jest dobre narzędzie, które potrafi zrobić za użytkownika wiele rzeczy, to dlaczego by o nim nie poinformować? Ok, wiem, dostanie mi się… 😉
        Potrzebowałbym beta-testerów do tego programu, bo sam nie wyłapię wszystkich bugów.
        A Pan, Panie Wojtku, to w jaki sposób programuje swoje AVRki? CLI AVRDude czy jakąś fajną nakładką graficzką na niego?

  3. Shiro pisze:

    Tak, korzysta z AVRDude.
    Aktualnie dodaje kilka “drobiazgów” do niego, np. baza danych o prockach (ilość RAM, FLASH, EEPROM, Fuse i LockBity).
    Muszę ogarnąć mądrze Fuse, bo to dla mnie temat nieco zakręcony, żeby nie narobić nikomu problemów przy programowaniu. Czy zechciałby Pan rzucić okiem na program jak wydam pierwszą publiczną wersję i napisać opinie?

  4. Który z 3 firmware (8, 48 i 88) będzie odpowiedni do atmega168? Mam do testów/zabawy 3 szt ProMini atmega168. Próbuję (bezskutecznie) wpisać choćby blink. Chiński programator USBASP i arduinoIDE nie chcą współpracować mimo moich starań.
    avrdude -p m168 -c usbasp

    avrdude: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e940b (probably m168p)

    avrdude: safemode: Fuses OK (E:F8, H:DD, L:FF)

    avrdude done. Thank you.

  5. H3nry pisze:

    Coś mi sie rąbało : :~$ ls -l /dev/bus/usb/009/002
    crw-rw—-+ 1 root plugdev 189, 1025 maj 5 17:34 /dev/bus/usb/009/002
    Powinno byc user a jest plugdev 🙁

  6. matrix0606 pisze:

    U mnie nic z tych rzeczy nie działa. Linux Mint 20 ulyana. Nie mogę nawet odczytać procesora.

  7. matrix0606 pisze:

    To co powinienem zobaczyć czyli między innymi to co zaznaczone na tym kolegi obrazku

    https://grylewicz.pl/wp-content/uploads/2015/06/usbasp_lsusb-590×161.jpg

  8. matrix0606 pisze:

    Tylko że moje uprawnienia wyglądają tak

    crw-rw-rw-+ 1 root usb 189

  9. matrix0606 pisze:

    Teraz moje prawa wyglądają już tak

    crw-rw-rw-+ 1 root users 189, 9 sie 30 10:01 /dev/bus/usb/001/010

    Ale próba odczytania megi 328 w arduino nano (w trzech różnych sztukach) daje tylko rezultat w poniższej postaci

    avrdude -p m328 -c usbasp

    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.

    avrdude done. Thank you.

  10. matrix0606 pisze:

    Dobra, atmegę 8 na płytce ewaluacyjnej EVBAVR04 mi odczytało więc teraz jestem w czarnej d…
    Nie wiem jaki procek siedzi na tych płytkach arduino nano lub jakaś niewłaściwa pinologia złącza ISP się na nich znajduje.

  11. matrix0606 pisze:

    Ok, już mi się wszystko udało. Jedno arduino uno mam w jakiś dziwny sposób uszkodzone.

  12. matrix0606 pisze:

    Dałem już radę z wszystkim. Udaje się programować ale muszę to robić z wiersza poleceń a wolał bym jakąś nakładkę, tylko nie wiem jaką ?

  1. 16.08.2015

    […] bardzo popularny programator do mikrokontrolerów AVR opisywałem całkiem niedawno na stronie Programator USBasp v2.0 Lcsoft. Był to gotowy moduł, który można kupić na ebay’u czy aliexpress za naprawdę małe […]

Leave a Reply

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.