poniedziałek, 3 lutego 2020

ATSAML10 - Mini Board - Pierwsze uruchomienie płytki.

Moja autorska płytka w wersji mini dla ATSAML10/11 (32-pin) firmy Microchip stała się faktem.  Zdecydowanie szybciej zaprojektujemy i wykonamy płytkę w takim minimalistycznym formacie. Czyli czas od pomysłu do pełnej satysfakcji wyraźnie nam się skraca, niż w przypadku płytek pełnowymiarowych z rozbudowanymi zasobami. Małe cieszy jeszcze bardziej :). Pierwszy test płytki mam za sobą czyli podłączenie do zasilania. Płytka nie wybuchła jest dobrze :). LED zasilający przyjemnie rozświetla mrok. Płytki można użyć jako mini-latarki :). A tak na serio przed pierwszym podaniem zasilania zawsze sprawdzam czy nie mamy zwarcia w punktach zasilania. W artykule pokażę jak przygotować warsztat pracy do programowania płytki i jak zamigać diodą LED znajdującą się na płytce. Zapraszam do przygody z moją filigranową płyteczką.

Dlaczego ATSAML10/11 ?. To stosunkowo nowy produkt Microchipa z bardzo ciekawym rdzeniem Cortex M23. Jest to tzw bezpieczna wersja rdzenia za pomocą którego m.in skutecznie zabezpieczymy zawartość zaprogramowaną w tym MCU przed podglądaczami. Krótko mówiąc Chińczyk nam nie zrobi na tym MCU reversing engeneering i nie wykradnie wartości intelektualnej zaszytej w kodzie. Z punktu widzenia hobbysty nie ma to oczywiście większego znaczenia ale są przypadki i to w naszym kraju gdzie wiodący producent ECU dla samochodowych instalacji LPG, dzięki zastosowaniu tego MCU skutecznie ukrucił nagminne kradzieże algorytmów sterujących instalacją. Efektem takich kradzieży było pojawienie się chińskiego producenta na rynku z polskimi algorytmami za konkurencyjną cenę. To co hobbysta może wykorzystać ze spotkania z ATSAML10/11 to "zarąbista" energooszczędność w trybie RUN MODE ,nie osiągalna dla rdzenia Cortex M0/M0+. Dla zobrazowania zagadnienia posłużę się porównaniem np z popularnym u nas ekosystemem STM32.  Weźmy przedstawiciela serii Ultra Low STM32 L0. Tryb run mode dla tego MCU jak podaje dokumentacja producenta to aż 88 uA/MHz


W przypadku naszego ATSAM-a poniżej 25 uA/MHz. Różnica zatem kolosalna.



Możemy na nim budować z powodzeniem bateryjne urządzenia. Cała seria ATSAML jest bardzo udana a w stosunku do serii ATSAMD ,zawiera znacznie mniej błędów w siliconie.

Odnośnie samej płytki to z rzeczy ciekawych wspomnę, że w sekcji zasilania zastosowałem LDO amerykańskiej firmy MAXLINEAR SPX3819M5-L-3-3/TR. Komponent ten bez problemu kupimy na naszym rynku , jest wart każdych pieniędzy. Jego zaletą oprócz mikraśnych rozmiarów i relatywnie małej ilości elementów zewnętrznych jest brak efektu poparzonego palca przy dużym obciążeniu :). Nie wiem jak to amerykańce zrobili tak samo jak nie wiem jak są zrobione F35, że ich słabo widać na ruskim radarze :). Do programowania płytki będzie nam służyć gniazdo 10-pinowe z rozstawem pinów 1.27. Na płytce osadziłem kwarc zewnętrzny 16MHz. (max 32MHz) . Płytka posiada na pokładzie złącze Mikroelektroniki w które zapmniemy setki modułów tej firmy lub wystrugamy takowe sami.


Do zabaw z płytką potrzebujemy dwóch elementów. Programatora i kompletnego środowiska IDE  . Programator jakim się posługuję to najtańsza wersja J-Linka czyli EDU Mini. Warto nadmienić , że programatory serii J-LINK to jedne z najlepszych narzędzi na rynku  do programowania ARM-ów:). Programator jest filigranowy a my już wiemy, że małe jest piękne :). Można go przenosić w portfelu albo jako bryloczek przy kluczach do samochodu :)



Aby programator użyć w naszym systemie operacyjnym musimy ściągnąć ( i zainstalować) paczkę ze strony Seggera o nazwie J-Link Software and Documentation Pack


Moim wyborem jest plik dla systemu Linux 64bit w formacie deb. Po ściągnięciu pliku klikamy w niego i proces instalacji zostanie zainicjowany automatycznie. Po zakończeniu instalacji uruchamiamy konsolę i podłączamy programator kablem USB do PC. Wpisujemy w konsoli sekwencję :

sudo JLinkExe

po wydaniu powyższego polecenia programator jest rejestrowany w systemie, jeśli mamy nieaktualny firmware to zostanie on zaktualizowany automatycznie.



Od tego momentu nasz programator jest widoczny w systemie. Czas na środowisko.

Moim "epokowym" odkryciem co do środowiska jest Embedded Studio firmy Segger. W środowisku tym zaprogramujemy MCU z rdzeniem ARM wszystkich znaczących producentów na rynku. Zaletą tego środowiska jest niesamowita prędkość działania oraz bardzo dobry i ultra szybki debugger oparty o programatory J-LINK firmy Segger. W sumie zaryzykuję tezę , że jest to obecnie jedno z najszybszych wieloplatformowych narzędzi na rynku do programowania MCU z rdzeniem ARM-a. Co ciekawe w środowisku tym zaprogramujemy również MCU z architekturą RISC-V. Środowisko Seggera służy do tworzenia wydajnego i dobrze zoptymalizowanego kodu w oparciu o pliki nagłówkowe MCU.  Pliki nagłówkowe przygotowane dla ATSAM-ów są dobrze zrobione i pracuje się na nich wygodnie, każdy moduł ma oddzielny plik nagłówkowy . Środowisko pobieramy tutaj :



Ja pobieram paczkę dla Linuxa 64 bit. Zauważmy, że środowisko waży tylko ok.350 kB (po rozpakowaniu) czyli jest lekkie jak piórko. Ściągnięty plik należy rozpakować. Odpalamy konsolę Linuxową i tam podajemy ścieżkę dostępu do pliku instalacyjnego i uruchamiamy plik instalacyjny, u mnie wygląda to jak poniżej na obrazku :


Instalacja trwa bardzo krótko i jej efektem jest pojawienie się ikonki programu w katalogu Programowanie :


Uruchamiamy środowisko. Po uruchomieniu znajdziemy się w widoku z przykładowym projektem Hello  dla jakiegoś Cortex M3 jak poniżej :


W widoku projektu Hello dodamy przydatne i niewidoczne belki z narzędziami aby były pod ręką. W tym celu wybieramy z górnej belki View --> Toolbars --> Standard oraz View --> Toolbars --> Build. Efekt jak poniżej:



Więcej projekt Hello do niczego nam nie będzie potrzebny i możemy go zamknąć File --> Close Solution i przejść do widoku Dashboard

Teraz musimy doinstalować plugin obsługujący nasz MCU czyli ATSAML10. W tym celu wybieramy z górnej belki opcję Tools --> Package Manager. W okienku które się pojawi instalujemy dwie paczki , CMSIS CORE 5 :


i paczkę dla ATSAML10 :


Po wybraniu paczek do instalacji "klikamy" NEXT , w kolejnym okienku też NEXT i po chwili paczki niezbędne do programowania naszego MCU będą zainstalowane. Od tej chwili możemy programować naszego ATSA-mika. Stwórzmy sobie nowy projekt w nowym Solution (kontener na projekty). W widoku Dashboard w którym się znajdziemy po wykonaniu File --> Close Solution , wybieramy opcję Create New :



Podajemy nazwę projektu np atsaml10_Hello w domyślnej lokalizacji i zaznaczamy opcję pokazaną powyżej , wybieramy Next. W kolejnym okienku jakie się pojawi musimy wybrać model naszego MCU czyli ATSAML10E16:


Ponownie Next i kolejne okienko gdzie muszą być wszystkie "ptaszki" zaznaczone.


Następnie Next i ostatnie już okienko gdzie obie opcje powinny być zaznaczone.


Kończymy wybierając Finish. Utworzone zostanie nowe Solution o nazwie atsaml10_Hello a w nim nasz projekt o tej samej nazwie. Do jednego Solution może być przyporządkowanych wiele projektów.



Zanim przejdziemy dalej  sprawdzimy czy dobrze podłączyliśmy programator do płytki i czy nasz MCU jest prawidłowo rozpoznany przez IDE. W pierwszej kolejności zawsze podłączamy zasilanie do płytki a potem dopiero podpinamy programator do PC kablem USB. Ta kolejność jest bardzo istotna. Podłączmy zatem programator do płytki i wybierzmy Target --> Connect J-Link. Jeśli kabelek płytka - programator jest podłączony prawidłowo na samym dole po prawej stronie zobaczymy komunikat CortexM23 on J-Link.



Teraz musimy zrobić Build programu , po tej operacji do naszego projektu dodane zostaną pliki nagłówkowe  MCU. W tym celu z górnej belki narzędziowej wybieramy drugą od lewej ikonkę z rozsypanym kwadracikiem lub klawisz F7. Efekt jak poniżej :


Pliki nagłówkowe znajdziemy w zaznaczonym powyżej katalogu o nazwie Dependencies. Każdy moduł peryferyjny ma oddzielny plik  nagłówkowy, te pliki są zdublowane ale tak ma być :


Od tej chwili mamy wszystko przygotowane do programowania naszego MCU.
Możemy zatem napisać jakiś program . Napiszmy sobie program , który w sposób nie blokujący zamiga nam diodą LED. Nie będę tutaj opisywał jak posługiwać się plikami nagłówkowymi bo zakładam, że taką minimalną wiedzę posiadamy. Jak dokonywać wpisów w rejestry w ATSAM fajnie pokazuje ten mały tutorial : Getting Started
Poniżej kod programu do migania diodą LED podłączoną na mojej płytce do PA27.


Kod jest zbyt prosty aby go komentować. Jedna istotna rzecz , na którą zwrócę uwagę, ATSAM-y, na starcie mają podłączone główne peryferia do "szyn" zegarowych. Dlatego w programie nie widzimy inicjalizacji zegara dla modułu  obsługującego piny I/O tak jak trzeba to robić w ekosystemach u innych producentów . Jest to wygodne i zawsze mamy o jedną rzecz mniej do wykonania i pamiętania. ATSAML10 startuje z zegarem RC ustawionym na  4 MHz . Zegar wewnętrzny możemy popędzić maksymalnie na 16 MHz . Z kwarca zewnętrznego możemy ustawić maksymalnie 32 MHz. Jest jeszcze możliwość z kwarca zegarkowego 32kHz uzyskać 32 MHz . W programie posłużyłem się operacjami "atomowymi" w dostępie do rejestru obsługującego pin. "Atomistyka" w ATSAM-ach jest przyjaźnie dla użytkownika zaimplementowana i przyjemnie się tego używa.

Gorąco polecam rozwijać swoje horyzonty i nie kończyć swojej wiedzy na jednym ekosystemie, nie idźmy jak małpka za tłumem i nie wpadajmy w rutynę. Rutyna to zabójca szarych komórek :). Dotknijmy rzeczy spoza popularnych nurtów i sprawdźmy gdzie się czujemy najlepiej. A im więcej różnorodnych bodźców serwujemy naszemu mózgowi tym lepiej go rozwiniemy a ten rozwój odczujemy potem na całkiem innych polach, kompletnie nie związanych ze światem mikrokontrolerów :) 


Pozdrawiam
PICmajster
picmajster.blog@gmail.com

Linki:

ATSAML10E16A

Brak komentarzy:

Prześlij komentarz