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

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:

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:

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łę:

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

W terminalu wygląda to tak:

USBasp - reguła

Po zapisaniu pliku, wydajemy komendę:

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:

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:

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:

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:

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

Wpis “Programator AVR USBasp v2.0 Lcsoft i Linux” komentowano 19 razy

  1. 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)

      • 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

      • 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?

  2. 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?

  3. 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.

  4. 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 🙁

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

  6. 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.

  7. 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.

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

  9. 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ą ?

Leave a Reply

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