Chyba wszyscy entuzjaści elektroniki słyszeli już o mikrokontrolerach STM32. W naszych kursach opisaliśmy podstawy F1 i F4, dzięki czemu wielu hobbystów mogło poznać te układy w praktyce.
Do niedawna oferta STM32 dotyczyła wyłącznie mikrokontrolerów. Jednak układy STM32MP1 to już świat rozbudowanych mikroprocesorów.
Pomijając podział na mikrokontrolery i mikroprocesory, najważniejszą cechą wyróżniającą STM32MP1 jest możliwość uruchomienia pełnego systemu operacyjnego (np. Linuksa). Dzięki temu otrzymujemy dostęp do sprawdzonych bibliotek sieciowych, graficznych, obsługi systemów plików oraz mnóstwa układów peryferyjnych, do których sterowniki znajdują się na wyposażeniu systemu operacyjnego.
Dostępne biblioteki w połączeniu z dużą ilością pamięci pozwalają na łatwe opracowanie urządzenia z bogatym interfejsem użytkownika. Z punktu widzenia inżyniera może to wydawać się niepotrzebnym "wodotryskiem", ale musimy pamiętać, że użytkownik postrzega urządzenie przez jego interfejs, wiec jego wygląd i czytelność mają ogromne znaczenie. Jako przykład dostępnych bibliotek może posłużyć chociażby Qt, którego podstawy omówione zostały w osobnej serii artykułów:
Celem tej serii jest przedstawienie środowiska Qt i stworzenie bazy do szybkiego wykorzystywania frameworka Qt w przyszłych projektach. Sprawdzimy... Czytaj dalej »
Płytki ewaluacyjne dla STM32MP1
Firma ST znana jest z popularnych zestawów uruchomieniowych Discovery i Nucleo, które znacznie ułatwiają pracę z ich układami. Nie inaczej jest w tym przypadku - tym razem w nasze ręce trafiła płytka STM32MP157C-DK2, o której pisaliśmy już w newsie zapowiadającym rodzinę MP1.
Zestaw z układem STM32MP1
Duży, dotykowy wyświetlacz
Widok od spodu
Widok płytki pod wyświetlaczem
Najważniejsze cechy płytki:
mikroprocesor STM32MP157CAC wyposażony w 2 rdzenie Cortex-A7 oraz jeden Cortex-M4,
pamięć podręczna: 512 MB DDR3L,
Gigabitowy Ethernet,
4 gniazda USB host,
USB OTG,
wbudowany konwerter UART-USB do debugowania (konsola),
kodek audio i wyjście słuchawkowe,
złącze kart microSD,
dotykowy wyświetlacz z interfejsem MIPI DSI o rozdzielczości 480x800 pikseli,
możliwość podłączenia monitora przez HDMI,
moduł WiFi oraz Bluetooth LE,
wyprowadzenia zgodne ze standardem Arduino oraz Raspberry Pi.
Złącze HDMI, zasilanie i USB
Antena i moduł bezprzewodowy
Pełna dokumentacja płytki jest dostępna na stronie producenta. W sprzedaży jest również inna wersja zestawu ewaluacyjnego, która pozbawiona jest wyświetlacza, WiFi/BLE i funkcji kryptograficznych.
Firma ST zadbała o bardzo dobrą dokumentację MP1 - Reference Manual ma 4017 stron!
Przeglądając parametry płytki oraz układu STM32MP157C moglibyśmy odnieść wrażenie, że mamy do czynienia z kolejnym komputerem typu Raspberry Pi. Jednak jest to mylne odczucie. STM32MP1 należy do zupełnie innego segmentu rynku, jest to układ o mniejszej mocy obliczeniowej (nawet od RPi Zero). Jednak nie o moc tutaj chodzi – przeznaczeniem takiego typu układów nie jest zastąpienie laptopa, ale wykorzystanie go jako systemu wbudowanego, czyli zastosowanie układu w dedykowanym urządzeniu np. nawigacji samochodowej, panelu sterującym pracą jakiegoś urządzenia, czy w prostym robocie.
STM32MP1 ewidentnie nie startuje w konkurencji na najszybszy procesor, jego zalety to niski pobór mocy, świetna dokumentacja, dostępność oraz rdzeń Cortex-M4.
W podobnej niszy rynkowej: znajdziemy też inne układy. Przykładem może być tutaj rodzina SAMA5 produkowana przez Atmel/Microchip oraz scalaki z serii i.mx6 i i.mx7 od firmy NXP.
Pierwsze uruchomienie STM32MP1
Płytka ewaluacyjna zasilana jest przez złącze USB typu C. Razem z zestawem dostajemy kartę microSD, na której nagrany jest obraz systemu. Wystarczy umieścić ją w odpowiednim gnieździe i podłączyć zasilanie. Na uruchomienie musimy chwilę poczekać, ostatecznie zobaczymy przykładową aplikację:
Przykładowa aplikacja na STM32MP1
Aplikacja została napisana w Pythonie. Przykład ten jest dość rozbudowany - widać tam m.in. działanie interfejsu graficznego opartego o protokół Wayland, czyli nowszą wersję, popularnego w świecie Linuksa, X11.
Podczas zabawy z aplikacją demonstracyjną można przetestować odtwarzanie filmów, renderowanie animacji 3D, przesyłanie dźwięku do głośnika BT, a nawet rozpoznawanie narysowanych na ekranie znaków - ten ostatni przykład oparty jest na sieci neuronowej.
Obraz systemu, czyli OpenSTLinux
Na karcie SD dostarczanej razem z zestawem znajdziemy specjalną dystrybucję Linuksa przygotowaną przez producenta płytki, czyli firmę ST. Aby ułatwić pierwsze kroki z systemem przygotowane zostały trzy wersje oprogramowania:
Starter package - czyli dokładnie to, co widoczne jest na powyższym zrzucie ekranu
Developer package - zestaw narzędzi niezbędny do pisania własnych programów (m.in. kompilator)
Distribution package - skrypty Yocto, które pozwalają na przygotowanie powyższych 2 wersji
W rzeczywistości mamy więc jedną dystrybucję: po prostu Yocto wraz ze skryptami i licencją od ST. Starter to efekt pracy Yocto, czyli skompilowany od podstaw system. Zestaw narzędzi będzie również tworzony przez Yocto jeśli tylko użyjemy odpowiedniej opcji (bitbake -c populate_sdk).
Przykładowy, ogólny artykuł na temat tworzenia własnej wersji systemu z użyciem Yocto (w kontekście Raspberry Pi) znaleźć można na forum.
Wersja starter i developer przydaje się do poznania ogólnych możliwości płytki. Niestety wykorzystanie jej do czegokolwiek sensownego wymaga użycia Yocto i kompilacji własnego obrazu. Domyślny system zawiera sporo pakietów, jednak ich wybór nie będzie optymalny dla każdego projektu, a dodawanie nowych programów wymaga ich kompilacji (i do tego właśnie najlepiej używać Yocto).
CubeMX i mikrokontroler
O konfiguracji Linuksa oraz tworzeniu własnych dystrybucji można byłoby napisać wiele książek, jednak STM32MP1 jest wyjątkowy z innego względu - można go używać jak zwykłego i popularnego STM32, który będzie nawet podobny do popularnego STM32F4.
Do takiej pracy z STM32MP1 konieczny będzie CubeMX, z którego korzystaliśmy już w kursie F4.
Oprogramowanie CubeMX
Narzędzie to pojawiało się już wielokrotnie na Forbocie. Nie będziemy więc skupiać się na podstawach, najważniejsze, że można w nim odszukać układy z nowej rodziny MP1:
Wyszukiwarka układów CubeMX
Największa nowość to możliwość (i konieczność) przypisania peryferiów do jednego z 3 podsystemów:
A7S (optee) - czyli system operacyjny działający w izolacji od Linuksa, uruchamiany przed nim i zabezpieczony przed dostępem nawet z konta administratora (roota).
A7NS - peryferia dostępne dla systemu Linuksa
Cortex-M4 - moduły przeznaczone dla rdzenia Cortex-M4
Przypisywanie peryferiów do podsystemów
CubeMX, na podstawie naszego projektu, generuje pliki konfiguracyjne: dla optee, u-boota, linuxa oraz szablon projektu dla mikrokontrolera.
W tej chwili wspierane jest tylko środowisko OpenSTM32.
Przykładowy projekt STM32MP1
Jako przykład zalet wyposażenia STM32MP1 w rdzeń Cortex-M4 opiszemy w skrócie prosty przykład, czyli miganie diodą. Na początek tworzymy w CubeMX projekt i wybieramy odpowiedni mikroprocesor.
W przypadku większego projektu powinniśmy skonfigurować odpowiednie peryferia co wykonujemy tak samo jak było to robione w przypadku STM32F4. Do teoretycznego migania potrzebujemy tylko skonfigurować zegar systemowy oraz wyprowadzenie, czyli GPIO.
Konfiguracja zegara jest dość skomplikowana, ale CubeMX znacznie ułatwia to zadanie:
Konfiguracja zegara w STM32MP1
Wyprowadzenia GPIO nie musimy nawet konfigurować - CubeMX i tak nie generuje kodu dla GPIO (tylko ustawienia dla device-tree). Ustawimy piny za pomocą biblioteki HAL, tak jak w kursie STM32F1.
Po tej krótkiej konfiguracji możemy wygenerować projekt dla OpenSTM32:
Generowanie projektu dla OpenSTM32
Praca w Engineering Mode
STM32MP1 posiada specjalny tryb, który ułatwia programowanie rdzenia Cortex-M4. Zmieniając położenie przełączników na płytce wybieramy tzw. Engineering Mode. Czyli tryb, w którym procesor nie uruchamia systemu, zamiast tego, po starcie, czeka on na połączenie przez JTAG.
Na płytce oprócz konwertera USB-UART znajdziemy interfejs ST-Link, który pozwoli na uruchamianie programów jak na "klasycznym" STM32.
Otwieramy wygenerowany projekt w OpenSTM32 i piszemy program używając znanego nam HALa.
Widok przykładowego projektu dla STM32MP1
Aby uruchomić program wystarczy wybrać konfigurację "ST's STM32 MPU Debugging":
Wybór odpowiedniej konfiguracji projektu
A następnie w zakładce Startup zaznaczamy tryb Engineering mode:
Wskazanie odpowiedniego trybu pracy
Teraz możemy pisać aplikację dla tego potężnego układu zupełnie jak na "zwykłego" STM32. W ten sposób moglibyśmy nawet łatwo przenieść istniejący projekt na nowy procesor, a nawet uruchomić przykłady opisywane w naszych kursach, które tworzone były z myślą o zupełnie innych układach.
STM32MP1 można programować zupełnie jak STM32F4 bez "przejmowania się" Linkusem.
Integracja z Linuksem
Engineering Mode ułatwia przygotowywanie programu dla rdzenia Cortex-M4. Jednak w pewnym momencie chcielibyśmy, aby nasz program działał bez STLink-a i wgrywania z poziomu debuggera. Na szczęście okazuje się że to zadanie jest również bardzo łatwe.
Dystrybucja przygotowana przez ST zawiera bibliotekę OpenAMP. Za jej pomocą można sterować pracą oraz komunikować się z rdzeniem Cortex-M4. W docelowej konfiguracji z poziomu Linuksa (lub u-boota) po prostu załadujemy i uruchomimy nasz program. Natomiast wewnętrzna komunikacja działa przez wirtualny port UART. Możemy więc zupełnie niezależnie opracować przepiękny interfejs użytkownika i samą aplikację na mikrokontroler.
Podsumowanie
Układy STM32MP1 dają możliwość połączenia światów mikrokontrolerów i mikroprocesorów. Dzięki nim można opracować urządzenie z tylko jednym układem, w którym jednocześnie będzie działała aplikacja dla mikrokontrolera oraz rozbudowany interfejs użytkownika. Dodatkowo mamy również możliwość wykorzystania np. TrustZone i systemu optee do uruchamiania bezpiecznych aplikacji.
Czy wpis był pomocny? Oceń go:
Średnia ocena 4.9 / 5. Głosów łącznie: 50
Nikt jeszcze nie głosował, bądź pierwszy!
Artykuł nie był pomocny? Jak możemy go poprawić? Wpisz swoje sugestie poniżej. Jeśli masz pytanie to zadaj je w komentarzu - ten formularz jest anonimowy, nie będziemy mogli Ci odpowiedzieć!
Opisanie możliwości tego układu to temat na znacznie więcej niż jeden artykuł. Mamy jednak nadzieję, że opis ten zainspiruje hobbystów (i nie tylko) do własnych eksperymentów z tym nowym układem.
Firma ST wprowadziła na rynek nową rodzinę mikrokontrolerów. Układy oznaczone STM32MP1 posiadają kilka rdzeni, zdolnych do uruchomienia... Czytaj dalej »
Autor: Piotr Bugalski Zdjęcia: Piotr Adamczyk Redakcja: Damian Szymański
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...