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:
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
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…
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:
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:
Po zapisaniu pliku, wydajemy komendę:
sudo udevadm trigger
I jeszcze raz sprawdzamy uprawnienia:
Już jest OK :). Ponawiamy próbę odczytu naszej atmegi8:
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:
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:
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
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
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
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.
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)
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
Do zabawy w programowanie AVR pod Linux, polecam ucs-prog. Darmowy, bez reklam itp.
(Nie)Subtelna reklama 😉
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?
No ja programuję klasycznie, czyli avrdude z linii poleceń. Rozumiem, że Twój soft to GUI do avrdude?
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?
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.
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 🙁
U mnie nic z tych rzeczy nie działa. Linux Mint 20 ulyana. Nie mogę nawet odczytać procesora.
co widzisz po wpisaniu lsusb w terminalu?
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
Tylko że moje uprawnienia wyglądają tak
crw-rw-rw-+ 1 root usb 189
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.
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.
Ok, już mi się wszystko udało. Jedno arduino uno mam w jakiś dziwny sposób uszkodzone.
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ą ?