KursyPoradnikiInspirujące DIYForum

Co warto wiedzieć o STM32MP1? Jak zacząć?

Co warto wiedzieć o STM32MP1? Jak zacząć?

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.

STM32MP1 - kiedy będzie pomocny?

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:

Kurs Qt – #1 – Czym jest Qt? Pierwsza aplikacja w praktyce
Kurs Qt – #1 – Czym jest Qt? Pierwsza aplikacja w praktyce

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.

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.

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.

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.

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

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).

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

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

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

Przypisywanie peryferiów do podsystemów

CubeMX, na podstawie naszego projektu, generuje pliki konfiguracyjne: dla optee, u-boota, linuxa oraz szablon projektu dla mikrokontrolera.

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

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

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.

Otwieramy wygenerowany projekt w OpenSTM32 i piszemy program używając znanego nam HALa.

Widok przykładowego projektu dla STM32MP1

Widok przykładowego projektu dla STM32MP1

Aby uruchomić program wystarczy wybrać konfigurację "ST's STM32 MPU Debugging":

Wybór odpowiedniej konfiguracji projektu

Wybór odpowiedniej konfiguracji projektu

A następnie w zakładce Startup zaznaczamy tryb Engineering mode:

Wskazanie odpowiedniego trybu pracy

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.

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.

Nowe STM32 ze wsparciem dla Linuksa – coś dla fanów RPi?
Nowe STM32 ze wsparciem dla Linuksa – coś dla fanów RPi?

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

HAL, programowanie, stm32, stm32mp1

Trwa ładowanie komentarzy...