Elektronika     Opis programatora USBasp      


1. Wstęp
2. Instalacja sterownika
3. Aktualizacja firmware
4. Zmiana napięcia zasilania 3.3/5V

1. Wstęp

Programator USBasp umożliwia programowanie prawie wszystkich modeli 8-bitowych mikrokontrolerów
AVR z interfejsem ISP (In-System Programming). Ponieważ jest to konstrukcja, którą można wykonać
samodzielnie (DIY - Do It Yourself), to powstało bardzo wiele różnych wersji tego programatora.
Współpracuje on z następującymi programami sterującymi: "AVRdude 5.2" lub nowszy, "Bascom-AVR
1.11.9.6" lub nowszy, "Khazama AVR Programmer 1.7.0" oraz "eXtreme Burner - AVR 1.4.3".
Osobiście używam tego ostatniego z napisanymi przeze mnie całkowicie od nowa definicjami mikro-
kontrolerów, czyli poprawionymi plikami "chips.xml", "fuselayout.xml" i "clocksystems.xml". Znajdują się
one w tym archiwum w katalogu "Data", który trzeba skopiować do katalogu instalacyjnego programu
(nadpisać stare pliki). Aktualnie są obsługiwane wszystkie znane mi 8-bitowe mikrokontrolery z inter-
fejsem ISP:

ATtiny12(L/V), 13(A/V), 15L, 22(L), 24(A/V), 25(V), 26(L), 43U, 44(A/V), 45(V), 48, 84(A/V), 85(V), 87, 88, 167,
261(A/V), 441, 461(A/V), 828, 841, 861(A/V), 1634(R), 2313(A/V), 4313.

ATmega4HVD, 8(A/L), 8U2, 8HVA, 8HVD, 16(A/L), 16M1, 16U2, 16U4(RC), 16HVA(2), 16HVB, 32(A/L), 32C1,
32M1, 32U2, 32U4(RC), 32U6, 32HVB, 32HVE(2), 48(A/V), 48P(A/B/V), 64(A/L), 64C1, 64M1, 64HVE(2), 64RFR2,
88(A/V), 88P(A/B/V), 103(L), 128(A/L), 128RFA1, 128RFR2, 161(L), 162(V), 163(L), 164(A/V), 164P(A/V), 165(A/V),
165P(A/V), 168(A/V), 168P(A/B/V), 169(A/V), 169P(A/V), 256RFR2, 323(L), 324(A/V), 324P(A/B/V), 325(A/V),
325P(A/V), 328, 328P(B/V), 329(A/V), 329P(A/V), 603(L), 640(V), 644(A/V), 644P(A/V), 644RFR2, 645(A/P/V),
649(A/P/V), 1280(V), 1281(V), 1284(P), 1284RFR2, 2560(V), 2561(V), 2564RFR2, 3250(A/V), 3250P(A/V),
3290(A/V), 3290P(A/V), 6450(A/P/V), 6490(A/P/V), 8515(L), 8535(L).

AT90CAN32, 64, 128.

AT90PWM1, 2(B), 3(B), 81, 161, 216, 316.

AT90USB82, 162, 646, 647, 1286, 1287.

AT90S1200, S2313, (L)S2323, (L)S2333, (L)S2343, 90S4414, (L)S4433, (L)S4434, S8515, (L)S8535.


Algorytm programowania mikrokontrolera AT90S1200, jako jedyny różni się od pozostałych modeli,
ponieważ nie obsługuje on instrukcji ReadBack 0x53 synchronizującej programowanie. System progra-
mujący musi o tym wiedzieć, w przeciwnym razie programowanie nie powiedzie się. Ponadto niektóre
mikrokontrolery nie umożliwiają programowania wszystkich fuse bitów (AT90S1200/2313/4414/8515),
a większość tylko fuse bitu SPIEN (AT90S2323/2333/2343/4433/4434/8535, AT90CAN32/64/128,
AT90PWM1/2/3/81/161/216/316, AT90USB82/162/646/647/1286/1287, ATtiny13/22/24/25/26/43/44/
45/48/84/85/87/88/167/261/441/461/828/841/861/1634/2313/4313, ATmega4HVD/8/8U2/8HVA/8HVD/
16/16M1/16U2/16U4/16HVA/32/32C1/32M1/32U2/32U4/32U6/48/64/64C1/64M1/64RFR2/88/103/
128/128RFA1/128RFR2/161/162/163/164/165/168/169/256RFR2/323/324/325/328/329/603/640/644/
644RFR2/645/649/1280/1281/1284/1284RFR2/2560/2561/2564RFR2/3250/3290/6450/6490/8515/
8535) poprzez interfejs ISP.
Oczywiście obsługa każdego z wymienionych modeli nie została sprawdzona w praktyce, ale protokół
ich programowania jest podobny więc wszystkie powinny działać. Podczas instalacji programu "eXtreme
Burner - AVR 1.4.3", od razu jest instalowany sterownik "libusb-win32 1.2.2" dla programatora USBasp,
który można później zaktualizować do najnowszej dostępnej wersji.
Program "eXtreme Burner - AVR 1.4.3" ma pewien błąd: gdy w pliku "chips.xml" znajduje się więcej niż
101 definicji mikrokontrolerów, to tych nadmiarowych nie da się używać. Modeli z definicjami numer
102-111 nie można w ogóle wybrać z listy menu "Chip". Natomiast po wybraniu modelu z definicją
numer 112+ jest wyświetlany komunikat o błędzie "Hex File NOT Found !" lub program zawiesza się.
Najprostszym sposobem na obejście tego problemu jest usunięcie niepotrzebnych definicji mikrokon-
trolerów z pliku "chips.xml" i ograniczenie ich liczby do maksymalnie 101.

Opis bazuje na moim chińskim fabrycznym programatorze "USBASP V2.0 LC Technology" (obecnie
chyba najczęściej spotykany), ale większość informacji dotyczy także innych wersji. Jego wygląd oraz
schemat ideowy przedstawiają poniższe obrazki.







Na schemacie oryginalnego programatora USBasp oraz w wielu jego wersjach, są stosowane diody
Zenera D1/D2 o nominalnym napięciu 3.6V. Niestety mogą one powodować problemy z wykrywaniem
programatora (zwłaszcza w laptopach).

2. Instalacja sterownika

Sterownik do programatora USBasp występuje w dwóch wersjach i można go zainstalować na dwa
sposoby. Oczywiście trzeba posiadać uprawnienia administratora systemu Windows (w systemie
Windows 8 lub nowszym, należy wyłączyć weryfikację podpisu cyfrowego sterowników).

2-1. Archiwum ze sterownikiem

Pobieramy jeden z dwóch aktualnie najnowszych sterowników (oba bez podpisu cyfrowego):
"USBasp-win-driver-x86-x64-ia64-v1.2.6.zip" ("libusb-win32 1.2.6") lub "USBasp-win-driver-x86-x64-
v3.0.7.zip" ("libusbK 3.0.7"). Pierwszym sterownikiem był "libusb-win32 1.2.6" i osobiście korzystam
właśnie z niego. Zawartość pobranego archiwum wypakowujemy do dowolnego katalogu i zapamię-
tujemy jego położenie. Podłączamy programator USBasp do wybranego portu USB.


W systemie Windows XP pojawi się okno "Kreator znajdowania nowego sprzętu", w którym zaznaczamy pole wyboru
"Zainstaluj z listy lub określonej lokalizacji (zaawansowane)" i naciskamy przycisk "Dalej >". Na kolejnym ekranie tego
okna zaznaczamy pola wyboru "Wyszukaj najlepszy sterownik w tych lokalizacjach" i "Uwzględnij tę lokalizację w wy-
szukiwaniu:", a odznaczamy pole wyboru "Przeszukaj nośniki wymienne (dyskietka, dysk CD-ROM...)". Naciskamy
przycisk "Przeglądaj" i w oknie wyboru katalogów, wskazujemy katalog do którego wypakowaliśmy zawartość pobra-
nego archiwum. Następnie naciskamy przycisk "Dalej >", co spowoduje rozpoczęcie procesu instalacji sterownika.
Po jej zakończeniu w oknie "Kreator znajdowania nowego sprzętu" powinien pojawić się komunikat "Kreator zakończył
instalowanie oprogramowania dla: USBasp", które zamykamy naciskając przycisk "Zakończ".

W systemie Windows 7 pojawi się komunikat o niepowodzeniu instalacji sterownika urządzenia. Klikamy PPM na iko-
nie "Mój komputer" i z menu podręcznego wybieramy pozycję "Zarządzaj". Pojawi się okno "Zarządzanie komputerem",
w którym klikamy na "Menedżer urządzeń" w kolumnie po lewej stronie. W środkowej kolumnie okna pojawią się wszy-
stkie wykryte urządzenia. Rozwijamy drzewo "Inne urządzenia", a następnie klikamy PPM na nieznanym urządzeniu
"USBasp" i z menu podręcznego wybieramy pozycję "Aktualizuj oprogramowanie sterownika...". Pojawi się nowe okno
"Kreator aktualizacji sterowników - USBasp", w którym naciskamy przycisk "Przeglądaj mój komputer w poszukiwaniu
oprogramowania sterownika". Na kolejnym ekranie tego okna zaznaczamy pole wyboru "Uwzględnij podfoldery". Naci-
skamy przycisk "Przeglądaj..." i w oknie wyboru katalogów, wskazujemy katalog do którego wypakowaliśmy zawartość
pobranego archiwum. Następnie naciskamy przycisk "Dalej", co spowoduje rozpoczęcie procesu instalacji sterownika.
Pojawi się kolejne okno "Zabezpieczenia systemu Windows" informujące o tym, że instalowany sterownik nie ma pod-
pisu cyfrowego. Aby kontynuować instalację, naciskamy przycisk "Zainstaluj oprogramowanie sterownika mimo to".
Po jej zakończeniu w oknie "Kreator aktualizacji sterowników - USBasp" powinien pojawić się komunikat "System
Windows pomyślnie zaktualizował oprogramowanie sterownika", które zamykamy naciskając przycisk "Zamknij".


2-2. Program Zadig

Podłączamy programator USBasp do wybranego portu USB. W systemie Windows XP pojawi się okno
"Kreator znajdowania nowego sprzętu", które zamykamy naciskając przycisk "Anuluj" i uruchamiamy
program "Zadig 2.2" ("zadig_xp_2.2.exe", system Windows XP lub nowszy). W systemie Windows 7
pojawi się komunikat o niepowodzeniu instalacji sterownika urządzenia - uruchamiamy program
"Zadig 2.5" ("zadig_2.5.exe", system Windows 7 lub nowszy).


Po pierwszym uruchomieniu programu pojawi się okienko "Zadig update policy", które pyta czy chcemy aby program
sprawdzał przez internet dostępność swoich aktualizacji. Możemy się na to zgodzić naciskając przycisk "Yes" lub od-
mówić naciskając przycisk "No" (osobiście wybrałem drugą opcję). Po tym pojawi się główne okno programu "Zadig",
w którym z rozwijalnej listy wykrytych urządzeń USB wybieramy programator "USBasp". Jeśli nie ma go na liście, to na-
leży w menu "Options" zaznaczyć pozycję "List All Devices" i wtedy powinien się pojawić. Następnie za pomocą małych
strzałek wybieramy sterownik "libusb-win32 (v1.2.6.0)" lub "libusbK (v3.0.7.0)" i naciskamy przycisk "Install Driver", co
spowoduje rozpoczęcie procesu instalacji sterownika. W systemie Windows 7 lub nowszym, pojawi się kolejne okno
"Zabezpieczenia systemu Windows" informujące o tym, że instalowany sterownik nie ma podpisu cyfrowego. Aby kon-
tynuować instalację, naciskamy przycisk "Zainstaluj oprogramowanie sterownika mimo to". Po jej zakończeniu pojawi
się okienko "Driver Installation" z komunikatem "The driver was installed successfully", informującym o powodzeniu
instalacji sterownika.


Programator USBasp będzie widoczny w Menedżerze urządzeń systemu Windows w grupie "libusb-
win32 devices" lub "libusbK Usb Devices" - w zależności od zainstalowanego sterownika. W systemie
Windows XP podłączenie programatora USBasp do innego portu USB, niż podczas instalacji stero-
wnika, spowoduje ponowne wykrycie nowego urządzenia i konieczność powtórzenia jego instalacji.
W systemie Windows 7 dla programatora USBasp podłączonego do innego portu USB, zostanie
automatycznie przypisany ostatnio zainstalowany sterownik.

3. Aktualizacja firmware

W moim programatorze "USBASP V2.0 LC Technology" znajduje się ATmega8A, której wsad nie zawie-
ra żadnej oficjalnej wersji dostępnego oprogramowania sterującego (firmware). Znajduje się on w archi-
wum w katalogu "wsad". Porównywałem go ze wsadami dla ATmega8/48/88 z oficjalnej strony progra-
matora USBasp (wersje: 2005-04-21, 2005-07-03, 2005-11-14, 2006-09-16, 2006-12-29, 2007-07-23,
2007-10-23, 2009-02-28, 2011-05-28).
Od razu zalecam zmianę fabrycznych wartości fuse bitów (FuseLow: $9F, FuseHigh: $D9, LockBits:
$FF) na FuseLow: $EF, FuseHigh: $C9, LockBits: $FF (wartości podane w dokumentacji oryginalnego
firmware z 2011-05-28). Mają one kluczowy wpływ na stabilne działanie programatora.

Wsad z mojego chińskiego programatora USBasp, zawiera zmodyfikowaną wersję oprogramowania
sterującego, które automatycznie wykrywa i dopasowuje szybkość sygnału SCK do częstotliwości
pracy programowanego mikrokontrolera. Dzięki temu nie trzeba zakładać zworki JP3 (Slow SCK)
podczas programowania mikrokontrolera, który pracuje z częstotliwością poniżej 1.5 MHz, ale nie
niższą niż 400 kHz. Na płytce mojego chińskiego programatora USBasp kołki goldpin dla tej zworki
nie są fabrycznie zamontowane, bo nie jest ona w ogóle obsługiwana (jej stan nie ma znaczenia).

Sprawdziłem tą funkcjonalność w praktyce używając programu "eXtreme Burner - AVR 1.4.3" i rzeczywiście działa.
Na oryginalnym firmware z 2011-05-28, komunikacja z programowanym mikrokontrolerem taktowanym częstotliwością
1 MHz, nie była możliwa bez założenia zworki JP3. Przy użyciu firmware z mojego chińskiego programatora USBasp,
komunikacja została nawiązana bez problemu. Udało mi się nawiązać komunikację z mikrokontrolerem taktowanym
zewnętrznym zegarem o częstotliwości 393 kHz (przy niższej nie było już to możliwe).
Niestety to zmodyfikowane oprogramowanie nie umożliwia programowania mikrokontrolera pracującego z częstotli-
wością poniżej 400 kHz. Nie obsługuje również polecenia zmiany szybkości sygnału SCK "-B" programu "AVRdude",
co objawia się wyświetleniem komunikatu "warning: cannot set sck period. please check for usbasp firmware update".
Nie oznacza to jednak, że programator USBasp ma wgrane najstarsze firmware (choć teoretycznie również jest taka
możliwość), ale że nie obsługuje ono programowej zmiany częstotliwości sygnału SCK.


Jeśli nie potrzebujemy funkcji automatycznego ustawiania szybkości sygnału SCK (taktowanie minimum
400 kHz), chcemy zaprogramować mikrokontroler taktowany częstotliwością poniżej 400 kHz lub potrze-
bujemy obsługi polecenia "-B" programu "AVRdude", to do programatora USBasp musimy wgrać najno-
wsze oryginalne firmware z 2011-05-28. Do tego celu potrzebny jest drugi dowolny programator ISP (np.
stary STK200 lub drugi USBasp). Na płytce mojego chińskiego programatora USBasp kołki goldpin dla
zworki JP2 (Self Program) nie są fabrycznie zamontowane, bo producent nie widział potrzeby wgrywania
innego firmware (nie jest ono rozwijane). Najlepiej od razu wlutować kołki goldpin dla zworek JP2 i JP3.
Następnie odpowiednio ustawiamy zworki w programatorze USBasp (nazwijmy go TARGET): JP1=1-2,
JP2=ON, JP3=OFF (ON - zworka założona, OFF - zworka zdjęta). Operację samo-programowania
(self-programming) można przeprowadzić na 2 sposoby:

3-1. Pogramator USBasp (TARGET) będzie zasilał stary programator STK200

Złącza ISP 10-pin obydwu programatorów, łączymy zwykłą taśmą IDC10 o długości do 30cm. Jeśli stary
programator STK200 ma złącze ISP 6-pin, to należy użyć specjalnej przejściówki ISP10-ISP6. Podłączamy
stary programator STK200 do portu równoległego (LPT), a następnie programator USBasp (TARGET)
do portu USB (najlepiej tego samego komputera). Zmieniamy fabryczne wartości fuse bitów na podane
wcześniej i wgrywamy oryginalne firmware z 2011-05-28. Po weryfikacji programowania, odłączamy
programator USBasp (TARGET) od portu USB, a następnie stary programator STK200 od portu LPT.


3-2. Pogramator USBasp (TARGET) będzie zasilany przez drugi programator USBasp (PROG)

Odpowiednio ustawiamy zworki w drugim programatorze USBasp (PROG): JP1=1-2, JP2=OFF, JP3=OFF.
Złącza ISP 10-pin obydwu programatorów, łączymy zwykłą taśmą IDC10 o długości do 30cm. Jeśli drugi
programator USBasp (PROG) ma złącze ISP 6-pin, to należy użyć specjalnej przejściówki ISP10-ISP6.
Do portu USB podłączamy tylko drugi programator USBasp (PROG). Zmieniamy fabryczne wartości fuse
bitów na podane wcześniej i wgrywamy oryginalne firmware z 2011-05-28. Po weryfikacji programowania,
odłączamy drugi programator USBasp (PROG) od portu USB.


Rozłączamy obydwa programatory i zdejmujemy zworkę JP2 w programatorze USBasp (TARGET).
Chiński fabryczny programator USBasp (TARGET) ma już wgrane oryginalne firmware i jest gotowy
do pracy. Teraz podczas programowania mikrokontrolera pracującego z częstotliwością poniżej 1.5
MHz, zworka JP3 musi być założona (w przeciwnym razie komunikacja nie zostanie nawiązana).
Używając programu "eXtreme Burner - AVR 1.4.3" udało mi się nawiązać komunikację z mikrokon-
trolerem taktowanym zewnętrznym zegarem o częstotliwości 20 kHz (przy niższej nie było już to
możliwe).

4. Zmiana napięcia zasilania 3.3/5V

Zworka JP1 (Supply Target) służy do zmiany napięcia zasilania VCC dostępnego na złączu ISP (pin 2).
Mikrokontroler programatora USBasp jest cały czas zasilany napięciem 5V, a więc generowane przez
niego sygnały programujące RST/SCK/MISO/MOSI na złączu ISP, również mają taki poziom. Dlatego
nigdy nie należy programować systemu zasilanego napięciem 3.3V (sygnały z programatora USBasp
mają za wysoki poziom i mogą uszkodzić programowany układ 3.3V). Zworka JP1 może być ustawiona
w 3 pozycjach: 1-2 = 5V, 2-3 = 3.3V, 0-0 (rozwarta) = brak napięcia VCC na złączu ISP (przydatne gdy
programowany system ma własne zasilanie 5V). Podczas zmieniania firmware programatora USBasp,
czyli wykonywania samo-programowania (self-programming), zworka JP1 musi być ustawiona w pozycji
1-2 (5V).

Programator "USBASP V2.0 LC Technology" można łatwo zmodyfikować tak, aby zworka JP1 zmieniała
nie tylko napięcie VCC na złączu ISP, ale również napięcie zasilania mikrokontrolera programatora USBasp,
a tym samym poziom wszystkich sygnałów programujących. Umożliwi to programowanie systemu zasila-
nego napięciem 3.3V. W tym celu, należy wylutować bezpiecznik polimerowy F1 (i tak kiepsko zabezpiecza
port USB), przeciąć jedną ścieżkę i wykonać dwa połączenia kabelkami. Poniższe obrazki przedstawiają
zmodyfikowany w ten sposób chiński fabryczny programator USBasp oraz jego schemat ideowy.








Po wykonaniu tej modyfikacji zworkę JP1, należy przestawiać tylko po odłączeniu programatora USBasp
od portu USB. Ponadto zawsze musi być ona ustawiona w 1 z 2 pozycji: 1-2 = 5V lub 2-3 = 3.3V (w przeci-
wnym razie programator USBasp nie będzie miał zasilania). Podczas wykonywania samo-programowania
(self-programming), zworka JP1 powinna być ustawiona w pozycji 1-2 (5V).