Jedną z ważnych cech mikrokontrolerów STM32G0 jest duża kompatybilność programowa i skalowalność architektury w ramach różnych rodzin z różnymi rdzeniami. Innymi słowy projektant/programista stosujący mikrokontrolery STM32 może używać zależnie od potrzeb elementów:
- tanich o stosunkowo prostej architekturze na przykład z rdzeniem Cortex M0+,
- poprzez jednostki bardziej wydajne z rdzeniem Cortex -M3, aż do
- najbardziej rozbudowanych i wydajnych Cortex- M4 i Cortex -M7.
Przechodzenie pomiędzy rodzinami nie wymaga zmiany przyzwyczajeń, poznawania nowych narzędzi projektowych (IDE, konfiguratora peryferii) itp. Również przenoszenie istniejących aplikacji jeżeli jest możliwe w ramach możliwości mikrokontrolerów jest bardzo uproszczone.
Rdzenie Cortex-M w STM32
Na rysunku 1 pokazano przypisanie rdzeni Cortex-M do rodzin mikrokontrolerów produkowanych przez ST.
Rys. 1. Rodziny mikrokontrolerów STM32 w powiązaniu z rdzeniami Cortex
Rodzina mikrokontrolerów STM32G0 jest ulepszonym następcą znanej i popularnej rodziny STM32F0 i została podzielona w zależności od wyposażenia w układy peryferyjne na trzy linie:
- Value Line
- Access Line
- Access Line & Encryption
Wyposażenie w zasoby (pamięć, peryferia itp.) w zależności od linii zostało to pokazane na rysunku 2.
Rys. 2. Linie produktów STM32G0
Generator sygnałów taktujących
Podstawowym generatorem sygnału zegarowego w wielu mikrokontrolerach jest wbudowany w strukturą precyzyjny generator RC. To źródło zegara jest powiązane z układem programowanego preskalera, a w jednostkach, które wymagają wyższej częstotliwości taktowania dodatkowo jest wbudowany programowany układ PLL do powielania/dzielenia częstotliwości Z generatorami RC był taki problem, że wykonane w strukturze układu scalonego nie grzeszyły dokładnością częstotliwości i co może ważniejsze stabilnością w funkcji temperatury. Z czasem dopracowano to rozwiązanie i w STM32G0 stabilność jest ona poziomie 1% w zakresie temperatur 0….85*C i +1,5% do -2% w zakresie temperatur -40….105*C. Generator o takich parametrach wystarcza do większości zastosowań.
Wybór wewnętrznego taktowania RC pozwala na uproszczenie projektu PCB. Na rysunku 3 pokazano konfigurację taktowania z wykorzystaniem oscylatora RC HSI o częstotliwości 16MHz. Ta częstotliwość została powielona x8 w układzie PLL i następnie podzielona przez 2. W wyniku tych operacji częstotliwość taktująca mikrokontroler ma wartość 64MHz.
Rys. 3. Konfiguracja taktowania mikrokontrolera STM32G071 (STM32CubeMX)
Wyprowadzenia STM32G0
Obudowy mikrokontrolerów 32-bitowych często mają kilka par wyprowadzeń linii zasilających. Komplikuje to projekt PCB i ogranicza ilość linii portów dostępnych w danym typie obudowy. W rodzinie STM32G0 w obudowach do 64 pinów zasilanie jest doprowadzane tylko przez dwa wyprowadzenia zasilania. W obudowie 64-pinowej mamy do dyspozycji 60 linii I/O.
Na rysunku 4 została pokazana obudowa LQFP64 mikrokontrolera STM32G071 z zaznaczonymi wyprowadzeniami zasilania.
Rys. 4. Wyprowadzenia mikrokontrolera STM32G071
Intencje producenta wchodzenia w obszar tradycyjnie zajmowany przez 8 bitowce można poznać też po rozmiarze oferowanych obudów. STM32G0 są oferowane w obudowach od 8 wyprowadzeń do 100 wyprowadzeń. Mikrokontrolery z 8 wyprowadzeniami mają od 32 do 64kB pamięci Flash i 8 kB pamięci RAM. To w połączeniu z 32-bitowym rdzeniem dość sporo jak na proste w założeniu aplikacje.
Na rysunku 5 pokazano wyposażenie w pamięć programu Flash i pamięć danych w funkcji ilości wyprowadzeń.
Rys. 5. Wyposażenie w pamięć programu Flash i pamięć danych w funkcji ilości wyprowadzeń
Ochrona IP w STM32G0
Jedną z podstawowych oczekiwanych cech mikrokontrolera, szczególnie w kontekście wykorzystywania w aplikacjach IoT jest ogólnie pojęta niezawodność i bezpieczeństwo. Wiąże się to między innymi z zapewnieniem bezpieczeństwa kodu umieszczonego w pamięci Flash. Znanym od lat problemem jest ochrona własności intelektualnej, czyli zabezpieczenie przed nie uprawnionym odczytaniem całej lub fragmentu pamięci kodu.
Tu mamy trzy rodzaje zabezpieczeń:
- RDP (Readout Protection) aktywne zabrania dostępu do rejestrów Flash/SRM/Backup przez debugger (SWD), kiedy program jest wykonywany z pamięci RAM lub aktywny jest bootloader,
- PCROP (Propiertary Code Protection) Używany do protekcji zapisu i odczytu (read/write) specyficznych obszarów pamięci z kodem. Chroniony kod może być tylko wykonywany (execute) – rysunek 6,
- WRP (Write Protection) Używany do protekcji określonego obszaru kodu przez zapisaniem i skasowaniem.
Użytkownik może programowo aktywować specjalny obszar pamięci o wielkości definiowanej nazywany Securable Memory Area. Kiedy ten obszar jest aktywny, to każda próba dostępu do niej: pobranie kodu, odczyt, programowanie, czy kasowanie jest odrzucany i generuje błąd magistrali. Tak definiowana pamięć może przechowywać na przykład klucze do kodów deszyfrujących (rysunek 7) . Dezaktywacja jest również wykonywana przez kod użytkownika (firmware).
Rys. 6. Protekcja kodu PCROP
Rys. 7. Idea wykorzystywania Securable Memory Area
Oprócz zabezpieczenia przed odczytem/zapisem/debugowaniem duże znaczenie dla poprawnego działania programu jest bezbłędny zapis pamięci kodu Flash. Żeby stwierdzić czy pamięć jest zapisana poprawnie dla każdych dwu zapisywanych słów 32-bitowych jest wyliczana 8 bitowa suma kontrolna CRC i ta suma jest umieszczana w specjalnym obszarze pamięci Flash. CRC pozwala na wykrycie i skorygowanie błędu odczytu na jednej pozycji. Przy przekłamaniach na większej ilości pozycji korekcja nie jest możliwa, ale jest wykrywana i zgłaszana. Taki mechanizm nazywa się ECC – Error Code Correction.
W pamięć Flash wbudowano dodatkowy obszar pamięci OTP (one-time-programmable) o rozmiarze 1kB. Tą pamięć można zaprogramować tylko raz i nie można jej skasować. Wydzielono także specjalnie chroniony obszar na kod ST bootloader.
Kryptografia w STM32G0
W urządzeniach IoT wymaga się możliwości komunikowania się z innymi urządzeniami przez łącze radiowe. Najczęściej są to standaryzowane łącza na przykład BLE (Bluetooth V5), ale mogą to być jakieś własne rozwiązania. W wielu przypadkach nie jest dopuszczalne, żeby osoby postronne miały możliwość „podsłuchania” przesyłanych danych i ewentualnego włamania się do systemu komunikacyjnego. Żeby się przed tym zabezpieczyć stosuje się szyfrowanie transmisji. W najbardziej rozwiniętej linii rodziny SRTM32G0 do tego celu można wykorzystać wbudowany moduł szyfrujący AES256.
AES szyfruje dane po stronie nadawcy za pomocą klucza użytkownika i praktycznie nie jest możliwe ich odczytanie bez znajomości tego klucza. Odbiorca, który ma klucz deszyfrujący, deszyfruje dane do pierwotnej postaci. Rozwinięciem zabezpieczenia z szyfrowaniem jest szyfrowanie z autentykacją. Na rysunku 8 jest pokazana idea szyfrowania z autentykacją stosowana w STM32G0.
Rys. 8. Szyfrowanie z autentykacją
Algorytmy szyfrujące wspiera dodatkowy moduł generowania liczb losowych RNG (Random Number Generation).
Wiąksza wydajność STM32G0
Jedna z istotnych modyfikacji rdzenia Cortex M0+ w porównaniu do Cortex M0 jest dodanie 16-bajtowej pamięci Cache, do której zapisuje się kody rozkazów. Takie rozwiązanie znane z wielu rozbudowanych i wydajnych jednostek może wyraźnie zwiększyć szybkość pracy mikrokontrolera. W trakcie wykonywania kodu rozkazy są pobierane z szybkiej Cache, do momentu napotkania rozkazu skoku. Podstawowe różnice pomiędzy rodzinami STM32F0 i STM32G0 pokazano na rysunku 9.
Rys. 9. Podstawowe różnice pomiędzy rodzinami STM32F0 i STM32G0
Peryferia w STM32G0
O atrakcyjności mikrokontrolera, czy rodziny mikrokontrolerów oprócz typowych właściwości rdzenia, układów bezpieczeństwa, czy zasobów typu pamięć programu i danych decyduje też wyposażenie w układy peryferyjne. Na rysunku 10 pokazano schemat blokowy mikrokontrolera STM32G081 z najbardziej rozbudowanej linii Access Line.
Rys. 10. Schemat blokowy mikrokontrolera STM32G081
Oprócz standardowych interfejsów komunikacyjnych: SPI, USART, I2C, rozbudowanych układów PWM i liczników znajdziemy tu wspomniane bloki szyfrujące AES256, moduł komunikacyjny USB PDI i zmodyfikowany moduł przetwornika analogowo cyfrowego ADC. Peryferyjne układy analogowe są uzupełnione o 12-bitowy przetwornik cyfrowo analogowy, komparator i czujnik temperatury.
USB PDI
Moduł USB PDI (Power Delivery Interface) 3.0 wspiera wszystkie tryby standardu zasilania urządzenia PD (Power Delivery). PD w założeniu może dostarczać do odbiornika do 100W mocy przesyłanej. Możliwe jest przesyłanie energii w obu kierunkach, tzn. od hosta do urządzenia peryferyjnego i od urządzenia peryferyjnego do hosta. Ważną cechą sterowników urządzenia PD jest możliwość elastycznego dostarczania mocy zależnie od potrzeb urządzenia zasilanego, a także negocjowania wartości napięcia zasilającego w zakresie 5….20V. Warstwa fizyczna modułu (PHY) wspiera obsługę złącza USB C. USB C ma o wiele więcej styków w porównaniu ze starszymi standardami:
- GND (4 styki) i VBUS (4 styki) magistrala do przesyłania napięcia zasilania – dla USB2.0 maksymalnie +5V i 500mA. Dla standardu USB-C +20V 5000mA,
- D+ i D- magistrala danych dla standardu USB2.0,
- RX1-, RX1+, oraz TX1-, TX1+ magistrala danych SuperSpeed standardu USB3.1,
- SBU1, SBU2 dodatkowa magistrala i niższej prędkości,
- CC1, CC2 magistrala danych przeznaczona do wykrywania wykonania połączenia, identyfikacji położenia wtyku względem gniazda i do negocjacji trybu pracy złącza USB, oraz parametrów zasilania.
Styki są rozmieszczone symetrycznie, co umożliwia dowolne wkładanie wtyku do gniazda.
Rys. 11. Styki złącza USB C wspierane przez PHY USB PDI STM32G0
ADC
Zmodyfikowany przetwornik analogowo-cyfrowy ma rozdzielczość 12-bitową i może wykonywać próbkowanie w czasie 0,4 usek. Dla przypomnienia ADC w rodzinie STM32F0 mógł wykonywać konwersje w czasie 1usek. Rozszerzono zakres napięć pracy od 1,62V do 3,6V. W moduł przetwornika wbudowano układ nadpróbkowania (oversmpling) pozwalający rozszerzyć rzeczywistą rozdzielczość przetwornika do 16 bitów. Dokładne informacje można znaleźć w nocie aplikacyjnej AN2668. Do monitorowania progów napięć wejściowych przeznaczonych do konwersji można użyć trzech układów analog watchog. Więcej informacji na ten temat można znaleźć w nocie aplikacyjnej AN2558.
LPUART
Ciekawym układem peryferyjnym jest moduł LPUART (Low Power UART) mogący pracować również w trybie interfejsu SPI Slave. Interfejs LPUART w rodzinie STM32G0 wyposażono w preskaler zegara taktującego transmisję i bufory FIFO oddzielnie dla toru odbioru danych RXFIFO i tory wysyłania danych TXFIFO. Jedna z unikalnych właściwości jest możliwość pracy z bardzo małym poziomem poboru mocy dla prędkości transmisji 9600 baud przy taktowaniu oscylatorem LSE (zoscylator pracujący z zewnętrznym oscylatorem kwarcowym „zegarkowym” o częstotliwości 32,768kHz).
Zestawy z STM32G0
Producent mikrokontrolerów STM32G0 przygotował wsparcie dla projektantów w postaci modułów Nucleo (zgodnych z Arduino) , zaawansowanego modułu ewaluacyjnego z mikrokontrolerem STM32G081 i małego modułu Discovery. W konfiguratorze STM32Cube można je wybrać w selektorze modułów (board selector) i stworzyć szkielet programu z konfiguracjami układów peryferyjnych i ewentualnie Firmware. Na rysunku 12 pokazano wybór modułu NucleoG071RB za pomocą selektora Board Selector i rodziny STM32G0.
Rys. 12. Wybór NUCLEO G-071RB w STM32CubeMX
Na rysunku 13 pokazano przykładową konfigurację wyprowadzeń portu USB PDI w trybie Dual Role (jako źródło i jako odbiornik zasilania) w STM32CubeMX.
Rys. 13. Przykładowa konfiguracja portu USB PDI w STM32CubeMX
Podsumowanie
STM32G0 – ulepszona wersja rodziny STM32F0 – przejmuje jej wszystkie zalety i dodaje sporo istotnych modyfikacji w postaci uproszczonego ale wydajniejszego rdzenia z pamięcią cash, rozbudowanym sterownikiem pamięci flash i precyzyjnego zegara taktującego RC HSI. Jednym z obszarów zastosowań STM32G0 są aplikacje tradycyjnie zajmowane przez mikrokontrolery 8-bitowe – na przykład z powodu niskiej ceny – STM32G0 swobodnie na tym polu z nimi konkuruje.
Porównywalna cena to tylko jeden z atutów. Inne to 32-bitowa jednostka, bardzo dobrze wyposażona w tradycyjne układy peryferyjne, układy wspierające stosowanie w aplikacjach IoT (np. AES256), porty USB PDI, ale tez w spore pamięci programu i danych. Nie bez znaczenia jest kompatybilność z dość zaawansowanym „ekosystemem”mikrokontrolerów STM32, który obejmuje obok tanich modułów ewaluacyjnych Nucleo, także rozbudowane programy narzędziowe w postaci konfiguratora STM32CubeMx i bezpłatne oraz płatne środowiska projektowe.
Tomasz Jabłoński