Miłośnicy AVR bardzo długo musieli czekać na tani programator/debugger dla mikrokontrolerów firmy Atmel z serii AVR oraz ARM. Doczekali się go dopiero po przejęciu Atmela przez Microchipa. Co prawda wielu wieszczyło, że spowoduje to śmierć mikrokontrolerów AVR, ale nie tylko nic takiego się nie wydarzyło lecz wręcz przeciwnie, wyszły nowe, całkiem ciekawe rodziny tych mikrokontrolerów. Ale to co najważniejsze – w końcu pojawił się tani programator/debugger dla hobbystów. Szkoda, że tak późno, niemniej ma on kilka zalet:
- programuje mikrokotrolery PIC, AVR oraz Atmelowskie ARMy (potencjalnie także inne, kwestia wsparcia w sofcie),
- działa w środowisku MPLAB oraz Atmel Studio.
- jest zarówno programatorem, jak i debugerem.
W tym artykule skupię się tylko na jego zastosowaniu do programowania AVR i ARM, pomijając mało popularne w Polsce PICe.
Jeśłi ktoś woli to treść artykułu jest dostępna także w postaci filmu:
Programator ten kosztuje (początek 2020r.) ok. 36-40 zł, czasami dostępne są kupony promocyjne i można go kupić nawet za mniej niż połowę tej ceny. W efekcie bywa tańszy niż stary i toporny USBAsp, oferując jednocześnie o wiele większe możliwości.
Programator jest dostarczany w miłym, kartonowym pudełku, w środku znajdziemy zmontowaną płytkę, bez jakiejkolwiek obudowy, za to od spodu są przyklejone cztery dystansujące gumki. Pewnie znajdzie się sporo narzekających na brak obudowy, ale za tą cenę nie możemy oczekiwać wodotrysków. Tak naprawdę obudowa nie jest zbytnio potrzebna – programator jest mały, o zwartej budowie. Gdyby jednak komuś obudowa się przydała, to można ją sobie wydrukować: Link.
Po lewej mamy gniazdo mikro-USB, po prawej 8-pinowe gniazdo w standardzie Microchipa, które nadaje się do bezpośredniego połączenia z listwą kołkową. Wszystko pięknie, ale oczywiście złącze to nie jest kompatybilne wprost ze złączami używanymi przez Atmela. Ale to nie jedyny problem. Po podłączeniu do komputera i odpaleniu Atmel Studio z pewnością ucieszy nas fakt, że programator ten jest od razu widoczny i bezpośrednio wspierany przez to IDE (oczywiście potrzebna jest wersja 7.0 z końca 2019 r. lub nowsza). Po podłączeniu i otwarciu Tools/Device Programming, ukazuje nam się miły widok:
Wybieramy SNAP, a następnie wybieramy używany procesor, interfejs programowania, klikamy Apply i:
Programator musi przejść w tryb AVR. I tu pojawia się problem…
Jak to coś uruchomić…
Niestety, z jakiegoś powodu Atmel Studio nie potrafi poprawnie współpracować ze SNAPem (przynajmniej do wersji, jaką testowałem – 7.0.2405), aby to było możliwe, musimy upgradować firmware. Tyle, że nie możemy tego póki co zrobić z poziomu Atmel Studio – musimy pobrać 1 GB paczkę z MPLabX, np. stąd: Link
Wiem ze jest to niezłe przegięcie – ściągać i instalować 1 GB program, tylko po to, aby uaktualnić firmware, ale co robić. Potencjalna zaleta jest taka, że można ewentualnie się przesiąść z Atmel Studio na MPLab (IMHO jedyna zaleta MPLab jest taka, że działa pod GNU/Linux).
Po pobraniu i zainstalowaniu MPLab możemy wgrać nowy firmware, który umożliwi poprawną współpracę z Atmel Studio. W tym celu uruchamiamy Hardware Tool Emergency Firmware Boot Recovery Utility (zakładka Debug/Hardware Tool Emergency Boot Firmware Recovery – też ciekawe dlaczego, nie ma tego jak by logika nakazywała w zakładce Tools?):
Klikamy Next i z listy wybieramy MPLAB SNAP:
Kolejne Next i postępujemy wg instrukcji:
Czyli odłączamy wszystkie inne programatory i debuggery od komputera. Teraz postępujemy wg załączonej instrukcji, czyli:
- podłączamy SNAPa do komputera (o ile jeszcze tego nie uczyniliśmy),
- zwieramy czymkolwiek zworkę JP3 (dwa punkty na PCB) na 1 sekundę, (ale jeśli na dłużej to też ok),
- odłączamy zworkę i czekamy co najmniej 10 sekund,
- następnie odłączamy SNAPa od komputera i ponownie podłączamy kabel USB. SNAP się uruchomi, ale oba LEDy pozostaną wyłączone – układ jest w trybie programowania (jeśli ledwo się świeci dioda Status to też jest ok).
-kolejne Next:
- klikamy Next i czekamy chwilkę:
- teraz podłączamy tylko SNAPa i klikamy Next:
- znowu czekamy chwilkę, aż pojawi się komunikat:
Jak widać prosty proces, który w Atmel Studio sprowadzał się do jednego kliknięcia, tu jest rozciągnięty na wiele etapów. Ale to nie koniec. Microchip znany jest z interfejsów „user friendly”, więc nasze urządzenie jeszcze nie jest gotowe. Udało nam się coś do niego wczytać, ale to jeszcze nie jest firmware, który umożliwia normalną pracę, a zaledwie bootloader. Przed nami kolejny, być może ostatni etap – upgrade firmware. W tym celu wybieramy w MPLabX dowolną opcję wymagającą kontaktu z programatorem – np. upload nowego hexa (znowu jakże intuicyjne podejście inżynierów Microchipa). Spowoduje to wymuszenie upgradu firmware w programatorze:
Jak widzimy wybrałem sobie dowolny MCU, w tym przypadku AVR128DA64 i wybrałem opcję odczytu jego fusebitów. MPLab wykrył SNAPa oraz wykrył, że nie ma on firmware, więc przez bootloader postanowił je wczytać – zrobił dokładnie to o co nam chodziło. Dalsza część to próba odczytu danych z MCU, który nie jest podłączony, więc zakończyła się ona błędem (brak wykrycia VTG). To nas jednak nie interesuje – ważne, że mamy już SNAPa z uaktualnionym firmware.
Od tego momentu programator ma już nowy firmware i będzie dział z Atmel Studio. Ale czy na pewno? O tym za chwilę.
Wspierane interfejsy programowania
Zasadniczo, wydaje się, że powinniśmy już móc programować nasze AVRy przy użyciu SNAPa. Pozostaje jeszcze kwestia połączenia 8-pinowej wtyczki na programatorze, ze złączem ISP w formacie AVR. W tym celu zaglądamy do poniższej tabeli (kolumna AVR ISP (&Dw) (źródło: https://microchipdeveloper.com/pickit4:interface-pinouts):
Wybieramy interesujący nas interfejs i znajdujemy informacje jak piny 1-6 SNAPa połączyć z pinami odpowiadającymi za programowanie wybranego procesora. Jak widać wybór jest imponujący – ten mały programator/debugger obsługuje praktycznie wszystkie procesory Microchipa/Atmela. Co ważne – obsługuje najnowsze procesory posiadające interfejsy uPDI oraz TPI. Dzięki czemu zaprogramujemy nim nie tylko XMEGA, ale także najnowsze ATTiny oraz ATMega, oczywiście możemy też użyć starego interfejsu ISP.
Tu mamy jeszcze (a raczej mieliśmy) jeden mały problem – Atmel Studio, co prawda rozpoznaje programator, lecz musimy uaktualnić pliki opisów mikrokontrolerów – w Atmel Studio opcja Tools/Device Pack Manager. Bez tego lista wspieranych procesorów może być niepełna.
W efekcie, będziemy mieli do dyspozycji po wybraniu programatora SNAP odpowiednie procesory:
Programujemy XMEGA w trybie PDI
Wiemy już chyba wszystko, czas więc na pierwsze programowanie. Na warsztat wziąłem ATXMEGA256A3BU:
Klikamy Apply i o ile mamy podłączony jakiś MCU, to powinniśmy zobaczyć mały sukces:
Widzimy, że pojawia się informacja o Target Voltage (jeśli nie to kliknij Read przy Target Voltage), a kiedy klikniemy zakładkę Tool information też powinny się wyświetlić sensowne informacje:
Niestety, jeśli myślimy, że to koniec, to jak zwykle Microchip nas zaskoczy. Klikamy Read Device Signature i…
Jest kiepsko. Nie możemy się połączyć z układem.
Tu wychodzi kolejny geniusz firmy – interfejsy UPDI/PDI/TPI wymagają, aby lina Data w stanie spoczynkowym była w stanie wysokim. Niestety ze schematu SNAPa wynika, że linia ta jest spoczynkowo w stanie niskim, wymuszanym przez rezystor R48. Musimy więc ten rezystor usunąć, a zamiast niego wstawić rezystor podciągający ten sygnał do stanu wysokiego. Opis problemu znajdziemy w nocie ETN #36 MPLAB®SNAP AVR UPDI/PDI/TPI Interface Modification (Link). Poniżej zdjęcie umiejscowienia tego rezystora z noty Microchipa:
Ale po kolei. Na szczęście jakkolwiek rezystor ma z milimetr wielkości, to odlutowanie go nie jest trudne. Ja, jak zwykle robiłem to transformatorówką, bo tylko taką lutownicę mam
Ponieważ SNAP jest polutowany spoiwem bezołowiowym, które ma wyższą temperaturę topnienia w stosunku do spoiwa ołowiowego, więc najpierw na grot lutownicy nałożyłem większą kropelkę cyny ołowiowej. Następnie zalewam nią rezystor, co powoduje wymieszanie się cyny ołowiowej z bezołowiową i obniża temperaturę topnienia. Potem już z górki, rezystor łatwo się odlutowuje. Drugi etap operacji, tj. wlutowanie rezystora podciągającego do Vcc jest już prosty. Musimy przylutować rezystor o wartości 1-10 kΩ pomiędzy piny 2 i 4 złącza J4. Ponieważ złącze jest duże i ma rozstaw pinów 2,54 mm, bez specjalnych umiejętności można to zrobić. Ze swojej strony sugeruję użycie rezystora ok. 4,7 kΩ.
Po te operacji ponownie w Atmel Studio odpalamy dialog programowania i o ile podłączyliśmy MCU, to wszystko powinno być ok – poniżej prntscreen pokazujący udany odczyt fusebitów z XMEGA:
Inne interfejsy
Na koniec jeszcze jedna dobra wiadomość – jeśli nie planujesz użycia procesorów z interfejsami uPDI/PDI/TPI, a wykorzystujesz jedynie „stare” AVRy to powyższe modyfikacje hardwarowe są zbędne.
Powodzenie i mam nadzieję, ze ten krótki tutorial okaże się przydatny.
- programuje mikrokotrolery PIC, AVR oraz Atmelowskie ARMy (potencjalnie także inne, kwestia wsparcia w sofcie),
- działa w środowisku MPLAB oraz Atmel Studio.
- jest zarówno programatorem, jak i debugerem.
W tym artykule skupię się tylko na jego zastosowaniu do programowania AVR i ARM, pomijając mało popularne w Polsce PICe.
Jeśłi ktoś woli to treść artykułu jest dostępna także w postaci filmu:
Programator ten kosztuje (początek 2020r.) ok. 36-40 zł, czasami dostępne są kupony promocyjne i można go kupić nawet za mniej niż połowę tej ceny. W efekcie bywa tańszy niż stary i toporny USBAsp, oferując jednocześnie o wiele większe możliwości.
Programator jest dostarczany w miłym, kartonowym pudełku, w środku znajdziemy zmontowaną płytkę, bez jakiejkolwiek obudowy, za to od spodu są przyklejone cztery dystansujące gumki. Pewnie znajdzie się sporo narzekających na brak obudowy, ale za tą cenę nie możemy oczekiwać wodotrysków. Tak naprawdę obudowa nie jest zbytnio potrzebna – programator jest mały, o zwartej budowie. Gdyby jednak komuś obudowa się przydała, to można ją sobie wydrukować: Link.

Po lewej mamy gniazdo mikro-USB, po prawej 8-pinowe gniazdo w standardzie Microchipa, które nadaje się do bezpośredniego połączenia z listwą kołkową. Wszystko pięknie, ale oczywiście złącze to nie jest kompatybilne wprost ze złączami używanymi przez Atmela. Ale to nie jedyny problem. Po podłączeniu do komputera i odpaleniu Atmel Studio z pewnością ucieszy nas fakt, że programator ten jest od razu widoczny i bezpośrednio wspierany przez to IDE (oczywiście potrzebna jest wersja 7.0 z końca 2019 r. lub nowsza). Po podłączeniu i otwarciu Tools/Device Programming, ukazuje nam się miły widok:

Wybieramy SNAP, a następnie wybieramy używany procesor, interfejs programowania, klikamy Apply i:

Programator musi przejść w tryb AVR. I tu pojawia się problem…
Jak to coś uruchomić…
Niestety, z jakiegoś powodu Atmel Studio nie potrafi poprawnie współpracować ze SNAPem (przynajmniej do wersji, jaką testowałem – 7.0.2405), aby to było możliwe, musimy upgradować firmware. Tyle, że nie możemy tego póki co zrobić z poziomu Atmel Studio – musimy pobrać 1 GB paczkę z MPLabX, np. stąd: Link
Wiem ze jest to niezłe przegięcie – ściągać i instalować 1 GB program, tylko po to, aby uaktualnić firmware, ale co robić. Potencjalna zaleta jest taka, że można ewentualnie się przesiąść z Atmel Studio na MPLab (IMHO jedyna zaleta MPLab jest taka, że działa pod GNU/Linux).
Po pobraniu i zainstalowaniu MPLab możemy wgrać nowy firmware, który umożliwi poprawną współpracę z Atmel Studio. W tym celu uruchamiamy Hardware Tool Emergency Firmware Boot Recovery Utility (zakładka Debug/Hardware Tool Emergency Boot Firmware Recovery – też ciekawe dlaczego, nie ma tego jak by logika nakazywała w zakładce Tools?):

Klikamy Next i z listy wybieramy MPLAB SNAP:

Kolejne Next i postępujemy wg instrukcji:

Czyli odłączamy wszystkie inne programatory i debuggery od komputera. Teraz postępujemy wg załączonej instrukcji, czyli:
- podłączamy SNAPa do komputera (o ile jeszcze tego nie uczyniliśmy),
- zwieramy czymkolwiek zworkę JP3 (dwa punkty na PCB) na 1 sekundę, (ale jeśli na dłużej to też ok),
- odłączamy zworkę i czekamy co najmniej 10 sekund,
- następnie odłączamy SNAPa od komputera i ponownie podłączamy kabel USB. SNAP się uruchomi, ale oba LEDy pozostaną wyłączone – układ jest w trybie programowania (jeśli ledwo się świeci dioda Status to też jest ok).

-kolejne Next:

- klikamy Next i czekamy chwilkę:

- teraz podłączamy tylko SNAPa i klikamy Next:

- znowu czekamy chwilkę, aż pojawi się komunikat:

Jak widać prosty proces, który w Atmel Studio sprowadzał się do jednego kliknięcia, tu jest rozciągnięty na wiele etapów. Ale to nie koniec. Microchip znany jest z interfejsów „user friendly”, więc nasze urządzenie jeszcze nie jest gotowe. Udało nam się coś do niego wczytać, ale to jeszcze nie jest firmware, który umożliwia normalną pracę, a zaledwie bootloader. Przed nami kolejny, być może ostatni etap – upgrade firmware. W tym celu wybieramy w MPLabX dowolną opcję wymagającą kontaktu z programatorem – np. upload nowego hexa (znowu jakże intuicyjne podejście inżynierów Microchipa). Spowoduje to wymuszenie upgradu firmware w programatorze:
Code: text
Jak widzimy wybrałem sobie dowolny MCU, w tym przypadku AVR128DA64 i wybrałem opcję odczytu jego fusebitów. MPLab wykrył SNAPa oraz wykrył, że nie ma on firmware, więc przez bootloader postanowił je wczytać – zrobił dokładnie to o co nam chodziło. Dalsza część to próba odczytu danych z MCU, który nie jest podłączony, więc zakończyła się ona błędem (brak wykrycia VTG). To nas jednak nie interesuje – ważne, że mamy już SNAPa z uaktualnionym firmware.
Od tego momentu programator ma już nowy firmware i będzie dział z Atmel Studio. Ale czy na pewno? O tym za chwilę.
Wspierane interfejsy programowania
Zasadniczo, wydaje się, że powinniśmy już móc programować nasze AVRy przy użyciu SNAPa. Pozostaje jeszcze kwestia połączenia 8-pinowej wtyczki na programatorze, ze złączem ISP w formacie AVR. W tym celu zaglądamy do poniższej tabeli (kolumna AVR ISP (&Dw) (źródło: https://microchipdeveloper.com/pickit4:interface-pinouts):

Wybieramy interesujący nas interfejs i znajdujemy informacje jak piny 1-6 SNAPa połączyć z pinami odpowiadającymi za programowanie wybranego procesora. Jak widać wybór jest imponujący – ten mały programator/debugger obsługuje praktycznie wszystkie procesory Microchipa/Atmela. Co ważne – obsługuje najnowsze procesory posiadające interfejsy uPDI oraz TPI. Dzięki czemu zaprogramujemy nim nie tylko XMEGA, ale także najnowsze ATTiny oraz ATMega, oczywiście możemy też użyć starego interfejsu ISP.
Tu mamy jeszcze (a raczej mieliśmy) jeden mały problem – Atmel Studio, co prawda rozpoznaje programator, lecz musimy uaktualnić pliki opisów mikrokontrolerów – w Atmel Studio opcja Tools/Device Pack Manager. Bez tego lista wspieranych procesorów może być niepełna.
W efekcie, będziemy mieli do dyspozycji po wybraniu programatora SNAP odpowiednie procesory:

Programujemy XMEGA w trybie PDI
Wiemy już chyba wszystko, czas więc na pierwsze programowanie. Na warsztat wziąłem ATXMEGA256A3BU:

Klikamy Apply i o ile mamy podłączony jakiś MCU, to powinniśmy zobaczyć mały sukces:

Widzimy, że pojawia się informacja o Target Voltage (jeśli nie to kliknij Read przy Target Voltage), a kiedy klikniemy zakładkę Tool information też powinny się wyświetlić sensowne informacje:

Niestety, jeśli myślimy, że to koniec, to jak zwykle Microchip nas zaskoczy. Klikamy Read Device Signature i…

Jest kiepsko. Nie możemy się połączyć z układem.
Tu wychodzi kolejny geniusz firmy – interfejsy UPDI/PDI/TPI wymagają, aby lina Data w stanie spoczynkowym była w stanie wysokim. Niestety ze schematu SNAPa wynika, że linia ta jest spoczynkowo w stanie niskim, wymuszanym przez rezystor R48. Musimy więc ten rezystor usunąć, a zamiast niego wstawić rezystor podciągający ten sygnał do stanu wysokiego. Opis problemu znajdziemy w nocie ETN #36 MPLAB®SNAP AVR UPDI/PDI/TPI Interface Modification (Link). Poniżej zdjęcie umiejscowienia tego rezystora z noty Microchipa:

UWAGA! Modyfikacja wymaga zmian w hardware programatora, wiąże się więc zapewne z utratą gwarancji. Dodatkową trudnością jest konieczność odlutowania rezystora o rozmiarze 0402 – wymaga to pewnych umiejętności.
Ale po kolei. Na szczęście jakkolwiek rezystor ma z milimetr wielkości, to odlutowanie go nie jest trudne. Ja, jak zwykle robiłem to transformatorówką, bo tylko taką lutownicę mam

Po te operacji ponownie w Atmel Studio odpalamy dialog programowania i o ile podłączyliśmy MCU, to wszystko powinno być ok – poniżej prntscreen pokazujący udany odczyt fusebitów z XMEGA:

Inne interfejsy
Na koniec jeszcze jedna dobra wiadomość – jeśli nie planujesz użycia procesorów z interfejsami uPDI/PDI/TPI, a wykorzystujesz jedynie „stare” AVRy to powyższe modyfikacje hardwarowe są zbędne.
Powodzenie i mam nadzieję, ze ten krótki tutorial okaże się przydatny.
Cool? Ranking DIY