logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki

p.kaczmarek2 09 Sty 2022 06:02 2487 0
  • Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Witajcie moi drodzy.
    Przedstawię tu krok po kroku jak można zacząć przygodę z mikrokontrolerem EFM32 Zero Gecko na przykładzie EFM32ZG222F32 (ARM Cortex-M0+). Mikrokontroler ten uruchomię na uniwersalnej płytce startowej pod obudowę TQFP48, program pod niego skompiluję w Simplicity Studio, a wgrywanie wsadu odbywać się będzie poprzez bootloader UART. Nie będzie potrzebny do tego żaden zewnętrzny programator, bo użyty EFM32ZG222F32 ma już fabrycznie wgrany bootloader. To będzie pierwszy temat z serii poświęconej EFM i jak na razie obejmie tylko absolutne podstawy wymagane by wystartować z EFM32ZG222F32 bądź podobnym w oparciu o język C i Simplicity Studio.

    Hardware - niezbędne minimum
    Płytkę z EFM32ZG222F32 w obudowie TQFP48 przygotowałem wedle swojego opisu stąd:
    https://www.elektroda.pl/rtvforum/topic3853189.html
    Tamten temat zawiera również informacje gdzie można zakupić taki minimalny breakout TQFP48 z gotowymi zworkami/pętlami masy i zasilania.
    Na płytce miałem EFM32ZG222F32 + LDO 3.3V + drobnica (kondensatory odsprzęgające) oraz wyprowadzone BOOT_RX/BOOT_TX na przejściówkę USB na UART.
    Dodatkowo, uzupełniłem ją o kilka niezbędnych dodatków:
    - przycisk microswitch między pinem RESET (pin 16) a masą - do resetowania układu
    - diodę LED z rezystorem 470 omów do masy z wyjściem wyprowadzonym na kabelek stykowy (by móc podpinać ją pod dowolny pin IO) - by mieć czym migać
    - kabelek stykowy żeńsko-żeński z rezystorem (tj. rezystor z żeńskimi końcówkami stykowymi) - by móc łatwo dodać rezystor pull up na DBG_SWDIO (pin 38), tj. rezystor do zasilania, by wymusić stan wysoki na tym pinie oczekiwany przez bootloader (początkowo myślałem, że to nie jest potrzebne, ale bez tego miałem kłopoty z wykryciem płytki na UART, udawało się raz na jakiś czas tylko, dodanie tego naprawiło wszystko)
    Płytka z modyfikacjami:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki

    Software - instalacja Simplicity Studio
    Simplicity Studio możemy pobrać za darmo ze strony producenta. Na moment pisania tego artykułu pobierałem je stąd:
    https://www.silabs.com/developers/simplicity-...mplicityStudio-5.iso%7CSimplicityStudio-5.iso
    Musiałem w tym celu założyć darmowe konto na Silabs - nie ma z tym żadnego problemu.
    Pobrany plik to SimplicityStudio-5.iso. Jest to obraz płyty, trzeba go odpowiednio zamontować w wirtualnym napędzie CD/DVD.
    Do działań na plikach ISO polecam program Virtual CloneDrive:
    https://www.elby.ch/pl/download.html
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    "Montujemy" ściągnięty obraz ISO tak by pokazał się jako wirtualna płyta CD w naszym wirtualnym napędzie i instalujemy.
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Instalację zasadniczo musimy "przeklikać", z tym że na pewnym etapie będzie potrzeba zalogowania się oraz wybrania komponentów które chcemy zainstalować. Użyłem tam trybu "Install by technology type" i wybrałem mikrokontrolery 32-bitowe. Na tym etapie zainstalował się automatycznie GNU Arm Toolchain (v10.2.2020.q4), Gecko SDK - 32-bit and Wireless MCUs - 4.0.0, IAR ARM Toolchain Integration - 4.2.11. Szczegóły na zrzutach ekranu, kolejno z etapów instalacji:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Instalator pobierze wybrane paczki z sieci. Powinniśmy mieć stabilne łącze internetowe i troszkę cierpliwości, bo może to zająć nieco czasu.

    Software - instalacja TeraTerm oraz pierwszy test komunikacji UART
    TeraTerm jest to terminal UART (podobnie jak używany przeze mnie częściej RealTerm), który wspiera m. in. przesyłanie danych wedle protokołu XMODEM. Będzie to potrzebne do wgrywania wsadu przez bootloader.
    TeraTerm pobieramy stąd (teraterm-4.106 bądź aktualną wersję):
    https://osdn.net/projects/ttssh2/downloads/74780/teraterm-4.106.exe/
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki

    Simplicity Studio - pierwszy projekt (miganie diodą - blink led)
    Po uruchomieniu Simplicity Studio widzimy mniej więcej taki widok:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Mniej więcej, bo ja już mam dwa utworzone projekty.
    Klikamy File->New->Project:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Konfigurujemy projekt - pod Custom Board (własna płytka) z tym mikrokontrolerem jaki mamy:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Wybieramy typ - Example (tam są gotowe projekty):
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Na początek wybierzemy Blink, ale na screenie też pokazuję jakie inne są przykłady:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Nazywamy projekt:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    UWAGA! Tworzenie projektu zajmie dość dużo czasu, a przynajmniej w moim odczuciu, dość dużo czasu. Czekamy cierpliwie.
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Po dłuższym oczekiwaniu (na 30% postępu) mamy projekt:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Jak widać utworzyło nam nieco plików, zarówno .c jak i .h (kod C, nagłówek C). Możemy poświęcić chwilę na zapoznanie się z ich zawartością.
    Projekt kompilujemy przez Build:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Przy pierwszej kompilacji powinniśmy otrzymać niepowodzenie:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Brakuje zdefiniowania:
    - SL_SIMPLE_LED_LED0_PORT
    - SL_SIMPLE_LED_LED0_PIN
    Czyli nie określiliśmy czym będziemy migać (jaki port i pin).
    Widzimy też, że mamy Warning (ostrzeżenie), które również pojawia się w widoku plików projektu.
    Cytat:

    C:\Users\admin\SimplicityStudio\v5_workspace\blink_baremetal_2\config/sl_simple_led_led0_config.h:37:2: warning: #warning "Simple LED Driver GPIO pin not configured" [-Wcpp]

    Można w ten sposób trafić do pliku, który trzeba uzupełnić:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Poprawione - kompilujemy drugi raz:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Sukces - 0 errors!
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Ale to nie wszystko. W celu użycia bootloadera musimy zmienić miejsce w pamięci Flash, gdzie umieszczać będzie się generowany kod programu. To dlatego, że bootloader umieszczony jest już na początku pamięci flash a nie chcemy przecież go nadpisać. Generowany przez nas kod będziemy umieszczać nieco dalej, za bootloaderem.
    W tym przypadku bootloader oczekuje naszego wsadu na offsecie 0x800, a nie na domyślnym 0x0.
    Opcję tę znajdujemy pod "Properties" projektu, reszta ścieżki na zrzucie ekranu:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Włączamy własne offsety i wpisujemy 0x800 (oraz zmniejszamy rozmiar programu o te 0x800, logiczne):
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Po tym kompilujemy ponownie projekt (jak nie jesteśmy czegoś pewni, to można dla zasady najpierw zrobić Clean a potem pełny Build).
    Wygenerowany wsad jest pod "Binaries". Wygodną opcją jest "Show In -> Explorer", otwiera po prostu katalog z binarką w Windowsie:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Nas interesuje plik bin (nie hex!). Zapamiętujemy do niego ścieżkę....

    Wgrywanie wsadu przez bootloader UART
    Wymagane połączenia były już omawiane, ale jeszcze je przypomnę:
    - musimy mieć przycisk RESET
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    - przejściówka USB-UART z poziomami logicznymi 3.3V ma być na BOOT_TX i BOOT_RX (oczywiście RX do TX, a TX do RX... wiadomo):
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    - dodatkowo pin BOOT_RX ma też rolę DBG_SWDIO, więc go dodatkowo poprzez rezystor 4.7k lub podobny podłączamy do 3.3V (robimy pullup)
    Przy szukaniu numerów pinów upewniamy się czy sprawdzamy w odpowiedniej tabelce, numery pinów dla QFN48 są inne niż np. dla QFN32!!!
    Podłączamy wszystko do komputera, resetujemy przyciskiem płytkę, w Tera Term wysyłamy duży klawisz U przy baudzie 115200:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Jak widać, mikrokontroler nam odpowiedział.
    Następnie wysyłamy pojedynczy mały klawisz u:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Następnie wysyłamy wygenerowany plik bin z Binaries poprzez File->transfer->xmodem->Send:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Tak wygląda wysyłanie:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki
    Na koniec uruchamiamy ten wsad poprzez wysłanie pojedynczego b (na które mikrokontroler już nie odpowie, chyba, że w naszym wsadzie uruchomimy UART).
    LED powinien migać:



    Nasz pierwszy blink LED dla EFM32 działa!

    Rodziny wspierane przez opisany tu bootloader
    Temat ten zrealizowałem na przykładzie EFM32ZG222F32, bo akurat go miałem na stanie, ale opisany tu bootloader wspiera więcej rodzin układów.
    Układy z rodziny EFM32 Series 0:
    • EFM32 Gecko (EFM32G)
    • EFM32 Giant Gecko (EFM32GG)
    • EFM32 Wonder Gecko (EFM32WG)
    • EFM32 Leopard Gecko (EFM32LG)
    • EFM32 Tiny Gecko (EFM32TG)
    • EFM32 Zero Gecko (EFM32ZG)
    • EFM32 Happy Gecko (EFM32HG)
    Układy z rodziny EZR32 Series 0:
    • EZR32 Wonder Gecko (EZR32WG)
    • EZR32 Leopard Gecko (EZR32LG)
    • EZR32 Happy Gecko (EZR32HG)
    Układy z rodziny EFM32 Series 1:
    • EFM32 Pearl Gecko (EFM32PG1/EFM32PG12 Rev C onwards)
    • EFM32 Jade Gecko (EFM32JG1/EFM32JG12 Rev C onwards)
    • EFM32 Giant Gecko GG11 (EFM32GG11)
    • EFM32 Tiny Gecko 11 (EFM32TG11)
    Po szczegóły oraz aktualną wersję listy wspieranych układów odsyłam do aplikacji katalogowej Silabs AN0003.

    Alternatywny bootloader - przez USB
    Silabs oferuje również bootloader do mikrokontrolerów z interfejsem USB. Szczegóły na jego temat znajdziecie w AN0042. Być może też któregoś dnia przygotuję jego demonstrację.

    Dodatkowe komendy bootloadera UART
    Bootloader UART wspiera również generowanie CRC16 dla bieżącego wsadu (komenda v i pokrewne), jak i destruktywny upload wsadu (wtedy wsad zastępuje bootloader a my zapewne tracimy dostęp do mikrokontrolera - nie polecam z tym eksperymentować początkującym). Pełna lista poniżej:
    Tutorial EFM32 ARM Cortex-M0+- cz1, bootloader, pierwsze kroki

    Podsumowanie
    Naprawdę nie potrzeba dużo, by zacząć przygodę z EFM32. Opisany tutaj bootloader pochodzi z noty aplikacyjnej AN0003 i wspiera znacznie więcej układów, niż wybrany przeze mnie EFM32ZG222F32. Każdy może znaleźć coś dla siebie - szczegóły w załącznikach.
    Jak na razie tylko przygotowaliśmy środowisko pracy i nauczyliśmy się kompilować program oraz wgrywać wsad, cała przygoda dopiero przed nami.
    W drugiej części z serii spróbuję przedstawić nieco bardziej zaawansowane koncepty na EFM32ZG222F32 a może nawet pokuszę się o jakiś przykładowy projekt.
    Załączam dodatkowe materiały do zapoznania się oraz kopie instalek użytych programów.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
REKLAMA