Programowanie mikrokontrolerów 2.0 Wstęp Marcin Engel Marcin Peczarski Instytut Informatyki Uniwersytetu Warszawskiego 4 października 2016
Co to jest mikrokontroler? Układ scalony integrujący następujące elementy (zależnie od modelu): jednostka obliczeniowa (8-, 16-, 32-bitowa) pamięć danych (SRAM, EEPROM, FRAM) pamięć programu (Flash, ROM, EEPROM) układy taktujące (generator kwarcowy, generator RC, pętla synchronizacji fazy lub częstotliwości PLL, FLL) kontroler przerwań kontroler DMA liczniki przetworniki analogowo-cyfrowe przetworniki cyfrowo-analogowe interfejsy szeregowe (UART, USART, LIN, IrDA, SPI, I 2 C, I 2 S, CAN, SDIO, 1-Wire, USB, Ethernet,... ) interfejsy równoległe (LCD, kamera, SRAM, DRAM, Flash)...
Co to jest mikrokontroler?... interfejs do debugowania (JTAG, SWD) układ nadzorujący, strażnik (ang. watchdog) układ zarządzania poborem prądu zegar czasu rzeczywistego RTC (ang. Real Time Clock) generator liczb losowych akcelerator kryptograficzny (AES, SHA,... )... mikrokontroler = komputer w jednym układzie scalonym
Popularne mikrokontrolery 8051 firmy Intel i jego liczne klony PIC firmy Microchip Technology 68HC firmy Motorola (obecnie Freescale) Z8 firmy Zilog AVR firmy Atmel MSP430 firmy Texas Instruments ARM, produkowane przez wiele firm, np.: Atmel Freescale NXP Samsung STMicroelectronics Texas Instruments...
ARM = Advanced RISC Machines Międzynarodowa firma, mająca główną siedzibę w Cambridge w Wielkiej Brytanii Projektuje i sprzedaje licencje na rdzenie ARM Nie produkuje krzemu Większość urządzeń mobilnych, w tym głównie telefonów komórkowych, i systemów wbudowanych zawiera rdzenie ARM
Rozwój 32-bitowej architektury ARM Źródło: http://www.arm.com 1.6
64-bitowa architektura ARM Źródło: http://www.arm.com 1.7
ARM Cortex-A i Cortex-R Rdzenie Cortex-A przeznaczone są do stosowania w urządzeniach wymagających dużych mocy obliczeniowych i umiarkowanego zużycia energii smartfony tablety Rdzenie Cortex-R przeznaczone są do stosowania w systemach czasu rzeczywistego (ang. real time), gdzie wymagana jest szybka reakcja na zdarzenia, wysoka niezawodność, spora moc obliczeniowa motoryzacja lotnictwo energetyka
ARM Cortex-M Cortex-M7 przeznaczony do systemów wbudowanych wymagających bardzo dużej wydajności Cortex-M4 przeznaczony do systemów wbudowanych wymagających dużej wydajności FPU SP i DSP tylko w rdzeniach M4 i M7 Cortex M3 przeznaczony do szerokiego stosowania w systemach wbudowanych Cortex-M1 przeznaczony do implementacji w FPGA (ang. Field Programmable Gate Array) ASIC (ang. Application Specific Integrated Circuit) ASSP (ang. Application Specific Standard Product) Cortex-M0+ przeznaczony do urządzeń o małym zużyciu energii ograniczony zestaw instrukcji uproszczona architektura alternatywa dla architektur 8- i 16-bitowych Cortex-M0 to poprzednia (mniej udana) wersja Cortex-M0+
ARM SecureCore SC300 rdzeń Cortex-M3 SC100 rdzeń ARM7TDMI SC000 rdzeń Cortex-M0 Główny obszar zastosowań to karty czipowe SIM płatnicze do dekoderów TV identyfikacyjne
Rodzina mikrokontrolerów STM32 Źródło: http://www.st.com/stm32 1.11
Jak zacząć zabawę? Trzeba kupić: mikrokontroler troszkę innych elementów elektronicznych (rezonator kwarcowy, diody świecące, rezystory, kondensatory, mikroprzełączniki, złącza,... ) programator laminat, wytrawiacz, lutownicę i inne narzędzia Ponadto należy: przygotować komputer z oprogramowaniem nauczyć się projektować obwody drukowane Ale obiecaliśmy, że nie będziemy lutować...
Nucleo I I I I Szybkie tworzenie układów testowych Programowanie i debugowanie przez USB Dostępne różne ekspandery Dodatkowe układy podłączane za pomocą kabelków 1.13
Nucleo-F411RE Mikrokontroler STM32 32-bitowy mikrokontroler STMicroelectronics F4 Cortex-M4 o maks. częst. takt. 84 180 MHz 11 oznaczenie modelu, wbudowane peryferie R rozmiar obudowy: 64 wyprowadzenia E rozmiar pamięci Flash: 512 KiB T typ obudowy: LQFP 6 zakres temperatur pracy: 40... 85 C STM32F411RET6 maks. częst. takt. 100 MHz, 128 KiB SRAM
Interfejsy do programowania i debugowania w układzie JTAG (ang. Joint Test Action Group) wyprowadzenia JTMS (PA13), JTCK (PA14), JTDI (PA15), JTDO (PB3), NJTRST (PB4) SWD (ang. Serial Wire Debug) wyprowadzenia SWDIO (PA13), SWCLK (PA14) Przykładowe adaptery JTAG/SWD USB ARM-USB-TINY-H J-Link ST-LINK/V2-1 Adapter korzysta też z wyprowadzenia NRST, zerującego mikrokontroler
Środowisko programistyczne GCC: polecenie arm-eabi-gcc Binutils: przydatne programy arm-eabi-ar, arm-eabi-as, arm-eabi-ld, arm-eabi-objcopy, arm-eabi-objdump,... GDB: debuger arm-eabi-gdb OpenOCD (ang. Open On Chip Debugger): polecenie openocd Newlib: standardowa biblioteka C dla systemów wbudowanych Program make Dostępne w labie po dodaniu do.bash_profile ścieżki poszukiwań plików PATH=$PATH:/opt/arm/bin export PATH Instrukcja i skrypt instalujący zestaw narzędzi dostępne w labie w katalogu /opt/arm/stm32/doc
Dokumentacja PM0214 Programming manual, STM32F3 and STM32F4 Series Cortex-M4 RM0383 Reference manual, STM32F411xC/E advanced ARM-based 32-bit MCUs STM32F411xC/E Data sheet STM32F411xC/E Errata sheet, device limitations UM1724 User manual, STM32 Nucleo boards W labie dostępna w katalogu /opt/arm/stm32/doc Aktualne wersje do ściągnięcia ze strony producenta http://www.st.com/stm32
Ogólne własności architektur ARMv6 do ARMv8 Rdzenie ARM mogą być cienkokońcówkowe lub grubokońcówkowe, w niektórych jest możliwość wyboru Cortex-M jest wyłącznie cienkokońcówkowy Jednolita przestrzeń adresowa architektura typu Princeton Osobne szyny do pamięci danych i programu organizacja typu Hardward Zestawy instrukcji maszynowych ISA (ang. Instruction Set Architecture): ARM, Thumb, Thumb-2 Cortex-M nie obsługuje zestawu ARM
Rejestry w Cortex-M4 32-bitowe: R0 do R12 rejestry ogólnego przeznaczenia SP (R13, MSP, PSP) wskaźnik stosu LR (R14) adres powrotu PC (R15) licznik programu PSR (APSR, IPSR, EPSR) rejestr znaczników PRIMASK, FAULTMASK, BASEPRI rejestry maskujące przerwania CONTROL rejestr sterujący trybami pracy rdzenia S0 do S31 rejestry zmiennoprzecinkowe 64-bitowe: D0 do D15 rejestry zmiennoprzecinkowe, mapowane na pary rejestrów S0 do S31; tylko przesyłanie wartości rdzeń nie obsługuje arytmetyki podwójnej precyzji
Zestaw instrukcji maszynowych Wzorowany na RISC, aby łatwo potokować ldr r3, [r1, #36] adds r2, r3, #1 RISC-owe wołanie procedur bl bx etykieta lr Prawie każda instrukcja może być wykonywana warunkowo movge r7, r4 Argument można przesunąć przed wykonaniem operacji orr r1, r1, r4, lsl #12 str r2, [r4, r0, lsl #2] Występują instrukcje typowo CISC-owe push pop {r4, r5, lr}; prolog funkcji {r4, r5, pc}; epilog funkcji