Rodzina STM32G0: więcej szczegółów

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

 

Autor: STM32eu

STM32eu