Rodzina LPC5410x składa się z 8 typów mikrokontrolerów, których najważniejsze cechy umieszczono w tabeli 1 zaczerpniętej z dokumentacji producenta. Na rysunku 1 pokazano schemat blokowy, który jest wspólny dla rodzin LPC5410x i LPC5411x. Dostępne są zarówno jednostki z jednym rdzeniem Cortex-M4, jak i 2-rdzeniowe z dodatkowym „koprocesorem” Cortex-M0+. Wersje 2-rdzeniowe mogą być zastosowane w aplikacjach wrażliwych na pobór energii, na przykład w urządzeniach zasilanych bateryjnie. Jeśli nie jest potrzebna duża wydajność, można użyć rdzenia Cortex-M0+ zoptymalizowanego do małego poboru mocy. Wydajny rdzeń Cotrex-M4 jest włączany dla algorytmów wymagających dużej mocy obliczeniowej.
Do zarządzaniem poborem energii zastosowano rozwiązanie nazwane Low-Power Management. Ma ono za zadanie zarządzanie trybami oszczędzania energii, w tym również przez skalowanie wartości napięcia zasilania zależnie od wymaganej wydajności. Głównym elementem systemu oszczędzania energii jest programowany układ PMU (Power Management Unit). Pozwala on na wprowadzanie trybów oszczędzania energii: sleep, deep-sleep i deep power-down. Jest możliwość wybudzania z trybu deep-sleep po odebraniu danych przez interfejsy USART, SPI lub przez I2C pracujący w trybie slave.
Rdzenie mogą być taktowane przebiegiem o częstotliwości do 100 MHz (oba używają tego samego generatora). Przebieg taktujący rdzeń może pochodzić z dwóch źródeł:
- Z wbudowanego generatora FRO (Free Running Oscillator) zawierającego oscylator RC o częstotliwości 12 MHz. Moduł FRO ma dwa wyjścia. Na jednym z nich występuje przebieg o częstotliwości 48 MHz lub 96 MHz, a na drugim 12 MHz. Oscylatora RC pracuje z niepewnością częstotliwości 1% w całym zakresie napięcia zasilającego i dopuszczalnej temperatury otoczenia.
- Zewnętrznego oscylatora kwarcowego o częstotliwości do 25 MHz.
Dokładną żądaną częstotliwość taktowania rdzenia można ustalić za pomocą układu PLL. Sygnałem wejściowym dla PLL może być zarówno przebieg o częstotliwości 12 MHz z modułu FRO, jak i z oscylatora kwarcowego. Oprócz zegara taktującego w rdzeń wbudowano też niezależny oscylator dla timera watchdog i oscylator o częstotliwości 32,768 kHz do taktowania modułu zegara systemowego RTC.
Duża wydajność i uniwersalność mikrokontrolerów LPC5410x powoduje, że będą używane do pracy w aplikacjach wymagających rozbudowanego oprogramowania. Jak informuje tabela 1, jest w nich dostępna pamięć programu Flash o pojemności do 512 kB i danych SRAM do 102 kB. Pozwala to na umieszczenie w pamięci rozbudowanych procedur oraz na przykład bitmap i tablic generatorów znaków używanych w interfejsach graficznych.
Oprócz pamięci programu Flash w strukturze mikrokontrolerów umieszczono pamięć ROM z „zaszytymi” modułami programowania pamięci Flash w systemie (In System Programming), w aplikacji (In Application Programming) oraz z bootloaderem pozwalającym na programowanie pamięci Flash przez interfejsy szeregowe USART, SPI, I2C lub USB. W pamięci ROM są też umieszczone drivery USB: HID, CDC, MSC oraz DFU.
Interfejsy szeregowe są umieszczone w module Flexcomm. Zawiera on 8 modułów funkcjonalnych, z których każdy może pracować jako USART, SPI, I2C lub I2S (tylko w dwóch urządzeniach peryferyjnych). Interfejsy UART, SPI i I2S są wyposażone w bufor FIFO. Interfejs I2C można zaprogramować do pracy z prędkością do 1 Mb/s, a dwa z nich z prędkością do 3,4 Mb/s, ale tylko w trybie slave. Taktowanie każdego z dostępnych interfejsów zapewnia rozbudowany generator taktujący Baud Rate Generator. Moduł Flexcomm jest bardzo wygodny, bo nie zakłada „na sztywno”, ile i jakich interfejsów jest umieszczonych w obudowie mikrokontrolera.
Pięć standardowych liczników 32-bitowych może współpracować maksymalnie z 4 wejściami przechwytującymi (capture) i 4 wyjściami typu compare. Każdy z tych liczników można zaprogramować do pracy w trybie PWM. Cztery z nich może zliczać impulsy z wejścia zewnętrznego (wyprowadzenia mikrokontrolera). Do generowania żądania transferu w kanale DMA można wybrać zdarzenie generowane przez jeden z timerów. Timer SCTimer/PWM ma 8 wejść i 8 wyjść. Wyjścia i wejścia mogą być programowo przyłączane do wyprowadzeń mikrokontrolera oraz do wewnętrznych sygnałów generowanych przez inne moduły peryferyjne.
Wbudowany w mikrokontroler 32-bitowy zegar czasu rzeczywistego RTC odlicza czas z rozdzielczością 1 sekundy i nigdy nie jest usypiany. Może być wykorzystywany do wybudzania mikrokontrolera z trybów obniżonego poboru energii, w tym z trybu deep power-down z rozdzielczością 1 milisekundy.
W skład interfejsów cyfrowych wchodzi: kontroler DMA oraz układy linii wejścia-wyjścia GPIO. Kontroler DMA ma 20 kanałów i 20 wejść wyzwalających. Umożliwia transfer danych z wszystkich układów peryferyjnych wpierających DMA
Uniwersalne linie GPIO mogą mieć programowo dołączane rezystory pull-up (do plusa zasilania) i pull-down (do masy). Można je zaprogramować z wyjściem typu otwarty dren (open drain) lub z zanegowanym wejściem (input inverter). Żeby manipulacje stanami linii GPIO mogły się odbywać z dużą prędkością, rejestry GPIO zostały podłączone do magistrali AHB mikrokontrolera. Zmiany stanów na liniach GPIO mogą po odpowiedniej konfiguracji generować przerwania zewnętrzne. Dostępne jest programowe wybranie wyzwalania zboczem narastającym, zboczem opadającym lub oboma zboczami. Można też zgrupować dwie linie wejściowe i zdefiniować warunek wyzwalania przerwania połączony z funkcjami logicznymi AND lub OR.
Głównym interfejsem analogowym prezentowanych mikrokontrolerów jest przetwornik A/C z 12 kanałami pomiarowymi i wieloma wewnętrznymi i zewnętrznymi sygnałami wyzwalającymi pomiar i konwersję. Maksymalna prędkość próbkowania wynosi 5 MSa/s. Przetwornik wspiera dwie niezależne sekwencje konwersji analogowo-cyfrowej. Kolejnym interfejsem analogowym jest wbudowany czujnik temperatury współpracujący z przetwornikiem A/C.
Każdy producent mikrokontrolerów oferuje dla swoich wyrobów moduły ewaluacyjne. Jest to standardowe postępowanie ułatwiające znacznie konstruktorom szybkie zapoznanie się z wybranym elementem i ewentualna weryfikacja możliwości układu, środowiska projektowego, wsparcia programistycznego w postaci gotowych bibliotek itp. Dla rodziny LPC541xx MCU producent przygotował moduł OM1307.
Moduł ewaluacyjny OM13077 pokazany na fotografii 2 jest elementem składowym platformy LPCXpresso. LPCXpresso składa się z uproszczonego środowiska programistycznego IDE opartego na Eclipse i przeznaczonego dla mikrokontrolerów firmy NXP z rdzeniem ARM oraz tanich modułów ewaluacyjnych z wbudowanym programatorem/debuggerem. Jest to kompletne rozwiązanie umożliwiające inżynierom szybkie przetestowanie możliwości zastosowania mikrokontrolera w swoich aplikacjach. LPCXpresso54102 ma zabudowany mikrokontroler LPC54102. I jest podzielony funkcjonalnie na dwie części: programatora/debuggera i mikrokontrolera. Programator/debugger jest połączony z komputerem, na którym jest uruchomione IDE poprzez złącze USB. Obsługiwane są protokoły CMSIS-DAP i Redlink. Można go również użyć do programowania mikrokontrolerów użytych w innych urządzeniach.
Zestaw wyposażono m.in. w trójkolorową diodę LED, przyciski RESET, ISP i WAKE. Płytka ma wyprowadzenia linii portów i zasilania zgodne ze standardem Arduino UNO. Znajdziemy tam też port PMOD oraz port UART/FTDI (emulacja UART poprzez USB). Układ zasilania zawiera stabilizatory 1,8 V oraz 3,3 V. Możliwe jest zasilanie z portu USB lub z zewnętrznego zasilacza.
Wykaz mikrokontrolerów z rodziny LPC5411x umieszczono w tabeli 2. Układy obu rodzin są wyposażone w rdzeń Cortex-M4 i koprocesor Cortex M0+ (zależnie od typu) oraz w takie same układy peryferyjne. Różnice pomiędzy poszczególnymi modelami to głównie większa pamięć danych SRAM (do 192 kB), pamięć Flash do 256 kB oraz interfejs USB i interfejs mikrofonu cyfrowego.
Wbudowany interfejs USB może pracować z maksymalną prędkością Full Speed i nie wymaga stosowania dodatkowego sygnału zegarowego o częstotliwości stabilizowanej kwarcem. Interfejs mikrofonu cyfrowego składa się z mikrofonu i układu DMIC realizującego cyfrową obróbkę sygnału audio. To rozwiązanie wyraźnie ogranicza pobór mocy w układach wymagających toru audio i zasilanych bateryjnie.
Dla rodziny LPC5411x przygotowano moduł o nazwie OM13089 LPCXpresso54114 z dwurdzeniowym mikrokontrolerem LPC54114. Budowa modułu jest bardzo podobna do LPCXpresso54102. Oba moduły różnią się, co oczywiste, zastosowanym mikrokontrolerem oraz zabudowaniem pamięci Flash o pojemności 8 Mb z interfejsem SPI.
Mikrokontrolery z rodziny LPC546xx wyposażono w rdzeń Cortex-M4, który może być taktowany przebiegiem o częstotliwości do 200 MHz. Szybki, wydajny, 32-bitowy rdzeń w połączeniu z dużą pamięcią programu Flash o pojemności do 512 kB oraz pamięcią SRAM do 200 kB predestynują te układy do zastosowań w aplikacjach wymagających dużej mocy obliczeniowej. Mogą to być układy kontroli budynków, medyczny sprzęt diagnostyczny, wieloprotokołowe węzły komunikacyjne itp. Wykaz mikrokontrolerów z tej rodziny pokazano w tabeli 3, a ich schemat blokowy na rysunku 4. Wiele interfejsów peryferyjnych (komunikacyjne, cyfrowe i analogowe) jest zbudowanych podobnie jak w opisywanych już rodzinach. Jednak z racji większych możliwości obliczeniowych i większej ogólnej wydajności dodano interfejsy realizujące bardziej zaawansowane zadania. Interfejsy szeregowe zostały rozbudowane o zaawansowane moduły transmisyjne:
- Interfejsy hosta HS USB 2.0 i hosta FS USB 2.0 z szybkimi układami PHY wbudowanymi w strukturę układu.
- Obsługa połączeń internetowych jest wspierana przez moduł MAC z interfejsem MII/RMII, obsługą Audio Video Briding (AVB) i szybką transmisją za pomocą DMA.
- Interfejs SPIIF z funkcją XIP do szybkiej obsługi pamięci Flash z interfejsem SPI/DSP/QSPI.
- Dwa moduły CAN FD wspierane przez kontroler DMA.
- Dwa interfejsy Smart Card ISO7816 ze wsparciem DMA.
Również interfejsy cyfrowe również rozbudowano i dodano nowe możliwości. Najważniejsze z nich to:
- Rozbudowanie układu DMA do 30 kanałów i 24 sygnałów wyzwalających.
- Dodanie interfejsu obsługi kart SD ze wsparciem za pomocą DMA.
- Dodanie sterownika pamięci zewnętrznej External Memory Controller ze wsparciem statycznych pamięci RAM i ROM i dynamicznych pamięci SDRAM z zegarem do 100 MHz.
- Dodanie sterownika paneli LCD typu STN i TFT o maksymalnej rozdzielczości 1024×768 pikseli i 24-bitowej głębi koloru. Sterownik wykorzystuje do przesyłania danych kanał DMA.
Tak rozbudowane układy pozwalają na tworzenie aplikacji z graficznymi interfejsami użytkownika, aplikacji sieciowych (na przykład IoT) czy aplikacji stosowanych w przemyśle motoryzacyjnym.
W wypadku tej rodziny mikrokontrolerów producent również zadbał o odpowiednie wsparcie w postaci modułów ewaluacyjnych. Jednym z takich modułów oferowanych przez NXP jest OM13092 LPCXpressso54608 z mikrokontrolerem LPC54608 pokazany na fotografii 5. Podobnie jak w modułach wcześniej opisywanych rodzin, na płytce umieszczono programator/debugger USB link2 z CMSIS-DAP i opcjonalnym protokołem Segger J-Link. Jednym z elementów zestawu jest wyświetlacz graficzny LCD (rysunek 5) o rozdzielczości 272×480 pikseli z pojemnościowym ekranem dotykowym. Ponadto na płytce znajdziemy:
- 3 diody LED oraz przyciski RESET, ISP i USER.
- Złącza zgodne ze standardem Arduino UNO i PMOD.
- Pamięć Flash o pojemności 128 Mb Micron MT25QL128 z interfejsem Quad SPI obsługiwanym przez interfejs S/PDIF.
- Pamięć SDRAM o pojemności 16 MB Micron MT48LC8M16A2B4.
- Mikrofon cyfrowy SPH0641LM4H.
- Akcelerometr NXP MMA8652FCR1.
- Kodek stereofoniczny audio z liniami wejściowymi i wyjściowymi.
- Łącze Ethernet 10/100 z konektorem RJ45.
- Port USB ze złączami USB A/B do pracy w trybach host lub device.
- Złącze dla kart SD.
Jest to bardzo dobrze wyposażony moduł pozwalający na testowanie nawet zaawansowanych aplikacji.
Narzędzia programowe
Do programowania mikrokontrolerów będziemy potrzebowali środowiska programowego z kompilatorem i, co dzisiaj oczywiste, bibliotekami zawierającymi obsługę układów peryferyjnych w warstwie abstrakcji HAL i w warstwie sprzętowej oraz bardziej zaawansowane funkcje typu stos USB, TCP/IP, system plików FAT czy możliwość integracji z systemem RTOS.
Firma NXP ma w ofercie środowisko IDE MCUXpresso oparte na Eclipse z wbudowanymi funkcjami edycji, kompilacji i debugowania kodu. MCUXpresso jest całkowicie zintegrowane z programatorami/debuggerami firmowych modułów ewaluacyjnych, w tym z modułami opisywanymi wyżej. Schemat blokowy MCUXpresso – IDE został pokazano na rysunku 6. Firmowe biblioteki przygotowane dla mikrokontrolerów NXP są dostępne w pakiecie SDK – MCUXpresso Software Development Kit. Oprócz narzędzi NXP można również korzystać z komercyjnych pakietów oferowanych przez firmy IAR czy Keil. Niestety obecnie nie jest dostępne wsparcie dla modułów opisywanych rodzin w środowisku ARM mbed.
Omówione w artykule trzy rodziny mikrokontrolerów są ciekawą propozycją dla projektantów poszukujących mikrokontrolerów do swoich aplikacji. Producent oferuje bogato wyposażone wydajne układy (w tym dwurdzeniowe) z modułami ewaluacyjnymi i wszystkimi niezbędnymi narzędziami programistycznymi.
Tomasz Jabłoński, EP