Od czego zaczyna się każdy kurs programowania w dowolnym języku? Tradycyjnie pierwszym etapem nauki jest napisanie i uruchomienie programu Hello World, wyświetlającego wiadomość powitalną w konsoli. To pozornie łatwe zadanie okazuje się bardzo cennym doświadczeniem z punktu widzenia programistów. Sukces (na tym etapie) oznacza nie tylko poprawne wykonanie instrukcji, ale przede wszystkim udaną konfigurację środowiska i przygotowanie do wdrażania coraz bardziej skomplikowanych zagadnień.
W obszarze systemów wbudowanych (embedded) ta tradycja również obowiązuje, jednak przybiera nieco inną formę. Wyświetlenie fragmentu tekstu zastępowane jest przez miganie diodą LED. Wykonując ten nieskomplikowany program zyskujemy jeszcze więcej informacji, niż w przypadku jego klasycznej wersji. Oprócz sprawdzenia środowiska programistycznego, weryfikujemy również, czy nasz podstawowy „kawałek” sprzętu działa zgodnie z oczekiwaniami. Ponadto testujemy sprawność interfejsu komunikacyjnego, czyli posiadanego programatora/debuggera.
Uruchomienie Hello World z migającą diodą będzie naszym głównym celem w niniejszym artykule, którym rozpoczynamy kurs programowania układów Nordic nRF5340. W kolejnych częściach serii będziemy przybliżać coraz bardziej zaawansowane zagadnienia. Zaprezentujemy między innymi różne aspekty systemu operacyjnego Zephyr, a także postaramy się uruchomić kilka projektów korzystających z komunikacji Bluetooth Low Energy (BLE).
Platforma sprzętowa
Zacznijmy od garści informacji o układzie nRF5340. Producent prezentuje go jako pierwszy na świecie bezprzewodowy SoC (system-on-chip) z dwoma procesorami Arm Cortex-M33. Wśród cech produktu wymieniane są między innymi Bluetooth 5.4, HS-SPI, QSPI, USB oraz NFC. Procesor aplikacyjny ma 1 MB pamięci Flash i 512 KB RAM oraz jest w stanie działać z częstotliwością do 128 MHz.
W naszym kursie będziemy korzystać z zestawu deweloperskiego nRF5340 DK[1]. Ze względu na pełne wsparcie tej płytki, możemy szybko uruchomić na niej wiele gotowych przykładów. Posiadacze własnych PCB z układem nRF5340 – lub innym wspieranym przez Zephyra – mogą napotkać pewne trudności przy pierwszym uruchomieniu. Dlatego w dalszej części pokażemy też, jak dodać wsparcie nowej płytki.
Platforma nRF5340 DK wyposażona została w debugger SEGGER J-Link, co ułatwi nam rozpoczęcie programowania. W zestawie dodatkowych peryferiów znajdują się między innymi: zewnętrzna pamięć Flash, 4 przyciski, port USB, elementy do sterowania zasilaniem oraz GPIO wyprowadzone na kilku złączach. Płytka wyposażona jest również w 4 LED-y – mamy więc wszystko, czego potrzebujemy do uruchamiania pierwszych programów.
Przygotowanie środowiska
Podstawowym składnikiem naszego środowiska programistycznego będzie nRF Connect SDK [2]. Jest to pakiet oprogramowania pozwalającego budować aplikacje do bezprzewodowych urządzeń opartych na układach nRF52, nRF53, nRF70 i nRF91 – zintegrowany z systemem Zephyr i zawierający wiele gotowych przykładów, sterowników oraz bibliotek.
Zgodnie z zaleceniami producenta wybieramy instalację korzystającą z Visual Studio Code wraz z dedykowanym rozszerzeniem. Jedną z zalet tej ścieżki jest jej niezależność od używanego systemu operacyjnego. Istnieje alternatywna opcja budowania środowiska bez edytora, oparta jedynie na linii poleceń, jednak tę drogę rekomendujemy bardziej zaawansowanym użytkownikom [3].
Tworząc zalecane środowisko instalujemy kolejno następujące oprogramowanie:
- Narzędzia nRF Command Line Tools [4]. W zależności od systemu operacyjnego, załączone oprogramowanie SEGGER J-Link może wymagać dodatkowych kroków w czasie instalacji.
- System kontroli wersji Git [5].
- Edytor Visual Studio Code [6].
- Rozszerzenie nRF Connect for VS Code Extension Pack [7]. Całą paczkę znajdziemy wyszukując jej nazwę w widoku Extensions, który wybieramy klikając jego ikonę na pasku aktywności Activity Bar, domyślnie znajdującym się po lewej stronie okna VS Code