Wstęp

Nowa płytka od STMicroelectronics, STM32MP257F-DK, trafiła na moje biurko. To mocna jednostka z dwurdzeniowym Cortex-A35 i dodatkowym Cortex-M33, oferująca sporo możliwości.

W tym krótkim wpisie pokażę, jak wgrać na nią oficjalny obraz systemu OpenSTLinux Starter Package, aby szybko zacząć pracę.

Więcej znajdziesz w materiale na YT:

https://www.youtube.com/watch?v=LkYbFwyitYI

Przygotowanie środowiska

Zanim podłączymy płytkę, potrzebujemy kilku narzędzi na naszym komputerze z Linuxem.

mkdir stm32mp25 && cd stm32mp25  cp ~/Downloads/en.stm32cubeprg-lin-v2-18-0.zip . unzip en.stm32cubeprg-lin-v2-18-0.zip

    • Uruchom instalator:

./SetupSTM32CubeProgrammer-2.18.0.linux

    • Aby łatwo używać narzędzia z linii komend, dodajmy je do PATH. Najprościej stworzyć link symboliczny w /usr/bin (może wymagać sudo):

# Ścieżka może się różnić w zależności od Twojej instalacji!  # Sprawdź, gdzie zainstalował się CubeProgrammer.  ln -s /home/USER/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/STM32_Programmer_CLI /usr/bin/STM32_Programmer_CLI

    • libusb: Potrzebne do komunikacji z płytką przez USB w trybie DFU (Device Firmware Upgrade).

apt-get update sudo apt-get install libusb-1.0-0

    • Reguły udev: Aby system poprawnie rozpoznawał podłączoną płytkę.
        • Przejdź do katalogu z regułami w zainstalowanym CubeProgrammer:

# Ścieżka może się różnić!  cd /home/USER/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules

    • Skopiuj reguły do systemowego katalogu udev:

cp *.* /etc/udev/rules.d/

Pobieranie i przygotowanie obrazu systemu

    • Stwórz nowy katalog roboczy na pliki systemowe, skopiuj tam pobrane archiwum (.tar.gz) i rozpakuj je: Bash#

# Przejdź do swojego głównego katalogu roboczego cd ~/prv/stm32mp25 mkdir starter && cd starter  cp ~/Downloads/en.FLASH-stm32mp2-openstlinux-6.6-yocto-scarthgap-mpu-v24.12.05.tar.gz .  # Rozpakuj archiwum (nazwa pliku będzie zależeć od wersji)  gunzip en.FLASH-stm32mp2-openstlinux-6.6-yocto-scarthgap-mpu-v24.12.05.tar.gz tar -xvf en.FLASH-stm32mp2-openstlinux-6.6-yocto-scarthgap-mpu-v24.12.05.tar

    • Po rozpakowaniu powstanie struktura katalogów. Najważniejszy dla nas będzie podkatalog images/stm32mp2 wewnątrz rozpakowanego folderu (np. stm32mp2-openstlinux-6.6-yocto-scarthgap-mpu-v24.12.05/images/stm32mp2). Znajdują się tam m.in.:
        • Pliki związane z procesem bootowania (TF-A, U-Boot, OP-TEE)

        • Obraz jądra Linux

        • Obraz systemu plików rootfs

        • Pliki FlashLayout (.tsv) – kluczowe dla procesu wgrywania, opisują układ partycji dla różnych konfiguracji i nośników (np. SD card, eMMC).

Przygotowanie sprzętu i wgrywanie obrazu

    • Ustaw tryb bootowania: Na płytce STM32MP257F-DK znajdź przełączniki DIP (SW1). Aby wymusić tryb DFU (wgrywanie przez USB), ustaw wszystkie przełączniki w pozycję OFF. Szczegóły znajdziesz w dokumentacji ST Wiki dla tej płytki (link w rozdziale Referencje)

    • Podłącz zasilanie: Użyj portu USB-C oznaczonego jako PWR. Zasilacz od Raspberry Pi 4B działa bez problemu.

    • Podłącz dane USB: Użyj drugiego portu USB-C i podłącz go do komputera kablem USB-C -> USB-A/C.

    • Sprawdź połączenie: Otwórz terminal i wpisz:

STM32_Programmer_CLI -l usb 

    • Powinieneś zobaczyć wykryte urządzenie USB (np. usb1). Jeśli nie, sprawdź reguły udev, libusb i połączenia kablowe.

    • Wgraj obraz: Przejdź do katalogu z obrazami i plikami dystrybucji:

# Ścieżka zależy od wersji i miejsca rozpakowania!  cd ~/prv/stm32mp25/starter/stm32mp2-openstlinux-*/images/stm32mp2

    • Uruchom proces wgrywania, używając odpowiedniego pliku .tsv. Poniższy przykład wgrywa obraz optee na kartę SD:

STM32_Programmer_CLI -c port=usb1 -w flashlayout_st-image-weston/optee/FlashLayout_sdcard_stm32mp257f-dk-optee.tsv

    • Uwaga: Jeśli usb1 nie działa, spróbuj usb0 lub sprawdź wynik polecenia STM32_Programmer_CLI -l usb. Wgrywanie potrwa kilka minut.

    • Zakończenie: Po pomyślnym wgraniu zobaczysz komunikat typu:

Start operation done successfully at partition 0x13 Flashing service completed successfully

Pierwsze uruchomienie

    • Odłącz zasilanie i kabel USB-C danych.

    • Zmień tryb bootowania: Ustaw przełączniki DIP (SW1) z powrotem na domyślną konfigurację bootowania z nośnika, na który wgrałeś system (np. z karty SD – sprawdź w dokumentacji ST Wiki, często jest to ON OFF OFF OFF).

    • Podłącz UART: Aby zobaczyć konsolę szeregową podczas startu systemu, podłącz kabel USB-C z komputera do portu PWR/STLINK. Ten port zasili płytkę oraz zapewni połączenie UART przez wbudowany konwerter ST-LINK.
        • Uwaga: Korzystanie z zasilania przez port ST-LINK może powodować świecenie diod LED wskazujących na problem z zasilaniem (np. pomarańczowa LED). Wydaje się to normalne w tej konfiguracji. Jeśli potrzebujesz pełnej mocy, użyj zasilacza sieciowego.

    • Uruchom terminal szeregowy: Użyj minicom, screen lub putty na swoim PC, łącząc się z odpowiednim portem szeregowym (zazwyczaj /dev/ttyACMx, baud rate 115200).

    • Po podłączeniu zasilania powinieneś zobaczyć logi startowe U-Boota i Linuksa.

Podsumowanie i porównanie z Raspberry Pi

Start z STM32MP257 jest trochę trudniejszy niż z popularnym Raspberry Pi. Wymaga instalacji dedykowanych narzędzi, ręcznej konfiguracji trybu bootowania i wgrywania obrazu przez USB DFU. Dokumentacja ST, choć obszerna, czasami zawiera drobne nieścisłości lub niedopowiedzenia (np. który port USB-C służy do czego po flashowaniu, potencjalne problemy z rozpakowaniem archiwum tar jeśli użyje się złej komendy).

Jednak STM32MP2 oferuje sporo zalet:

    • Secure Boot

    • Koprocesor Cortex-M, przyda się do zastosowań real-time

    • Przycisk Reset: Przydatny :)

    • Pamięć eMMC: Wbudowana, szybsza i trwalsza niż typowa karta SD

    • Elastyczny bootflow: Większa kontrola nad bootem, możemy wybierać i eksperymentować

    • Bogate peryferia: WiFi, Bluetooth, Ethernet, HDMI, liczne GPIO (to ma też Raspberry)

Mimo początkowych trudności, STM32MP257 wydaje się bardzo obiecującą platformą dla bardziej zaawansowanych projektów wykorzystujących Embedded Linuxa.

Referencje

Oficjalna dokumentacja flashowania:

https://wiki.st.com/stm32mpu/wiki/STM32MP25_Discovery_kits_-_Starter_Package

Opis HW:

https://wiki.st.com/stm32mpu/wiki/STM32MP257x-DKx_-hardware_description#USB_Power-_ST-LINK_TypeC

Karta produktu:

https://www.st.com/en/evaluation-tools/stm32mp257f-dk.html

Wdrażasz Embedded Linuxa?

Jeżeli potrzebujesz profesjonalnego szkolenia lub konsultacji z Embedded Linuxa – napisz.