W dziale tym znaleźć możecie materiały zebrane i/lub przygotowane przez członków SKN MIPSA - dotyczące wielu zagadnień związanych z projektowaniem oraz programowaniem systemów mikroprocesorowych.
Computerphile Youtube Channel
As the authors describe it: Computerphile is a YouTube Channel with videos about computers and that kind of stuff. Brief look will unveil a number of very interesting and well prepared videos about number representations, digital systems architecture, etc.
The most interesting videos that we found (roughly 2 new videos are uploaded every week) are categorized in the following article.
Important: If you liked it - do not forget to subscribe and support their hard work.
Number Representation in Digital Systems
WinAVR na komputerach Windows 8.1 x64
Próba kompilacji programu dla mikrokontrolerów AVR z wykorzystaniem (już nieco starego) pakietu WinAVR na komputerze z systemem Windows 8.1 x64 kończy się komunikatem 'This application was unable to start correctly (0xc000142). Click OK to close the application.' Nie pomagają przy tym ustawienia trybu uruchamiania z kompatybilnością do starszych wersji systemów Windows... rozwiązanie przedstawiono na niezawodnym forum AVR Freaks.
W celu usunięcia opisywanego błędu wystarczy pobrać archiwum z adresu: http://www.madwizard.org/download/electronics/msys-1.0-vista64.zip. Po jego rozpakowaniu należy skopiować znajdującą się w nim bibliotekę msys-1.0.dll do katalogu utils\bin (nadpisując oryginalny plik). Po tej operacji kompilator powinien pracować bez problemów.
AVR Dragon / AVR ISP mkII w AVRDude na komputerach z Windows x64
Część z Was (z różnych względów) trzyma się starszych rozwiązań do programowania mikrokontrolerów AVR: pakiet WinAVR + Eclipse IDE + AVRDude (obecnie króluje Atmel Studio) - wiecie więc, że z konfiguracją środowiska na 64-bitowych wydaniach systemów Windows 7/8/8.1 wymaga dodatkowych operacji. Tak jest np. przy instalacji sterowników lib-usb programatorów AVR Dragon lub AVR ISP mkII do pracy z oprogramowaniem AVRDude...
Wspomniane programatory domyślnie instalowane są przez system Windows ze sterownikami Jungo Connectivity. W tym trybie pracy AVRDude nie będzie współpracował z żadnym z urządzeń - wymaga on zainstalowania sterowników lib-usb.
Sterowniki tego typu (tylko dla programatora AVR ISPmkII, w wersji dla systemów 32-bitowych) dostępne są w katalogu \utils\libusb\bin. W przypadku programatorów AVR Dragon (dla obu systemów) oraz AVR ISP mkII (dla systemu 64-bitowego) musimy przygotować odpowiednie sterowniki.
W tym celu pobieramy sterowniki libusb dla systemu Windows:
http://sourceforge.net/projects/libusb-win32/ (w naszym przypadku był to plik libusb-win32-bin-1.2.6.0). Po rozpakowaniu uruchamiamy kreator inf-wizard.exe znajdujący się w katalogu: bin.
Kolejne kroki naszego kreatora:
Przechodzimy do kolejnej strony.Wybieramy z listy odpowiednie urządzenie (AVR ISP mkII / AVRDRAGON) Potwierdzamy wartości domyślne.Wybieramy katalog, w którym zapisane zostaną przygotowane sterowniki.Wybieramy opcję 'Install now...'Czekamy na zakończenie procesu instalacji. Potwierdzamy ew. monity systemu o instalacji nieautoryzowanych (niepodpisanych cyfrowo) sterowników. Instalacja zakończona sukcesem.
W 'Menadżerze urządzeń' powinniśmy zauważyć już zmianę sterowników naszego programatora. Na koniec pozostało jedynie dodanie programatora i jego odpowiednia konfiguracja w avr-eclipse-plugin (Project -> Properties -> AVR -> AVRDude - > Programmer).
Poprawna konfiguracja umożliwia już ładowania programów za pośrednictwem AVRDude. wprost ze środowiska Eclipse IDE:
avrdude: Device signature = 0x1e9403
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Drive_RAPW.hex"
avrdude: input file Drive_RAPW.hex auto detected as Intel Hex
avrdude: writing flash (5268 bytes):
avrdude: verifying ...
avrdude: 5268 bytes of flash verified
avrdude done. Thank you.
avrdude finished
Środowisko dla ARM Cortex-Mx
W tym artykule opisujemy konfigurację kompletnego środowiska rozwojowego dla mikrokontrolerów rodziny ARM Cortex-Mx (na przykładzie mikrokontrolerów rodziny STM32), w oparciu o zintegrowane środowisko programistyczne Eclipse IDE, bleeding-edge-toolchain przygotowany przez Freddiego Chopina oraz OpenOCD.
Etap I: Eclipse - kompilator + IDE
POBIERANIE OPROGRAMOWANIA
Pobierz archiwum zawierające Eclipse IDE for C/C++ Developers z tej strony.
Krok 1. W górnej części witryny eclipse.org wybieramy "Download".Krok 2. Interesuje nas edycja: Eclipse IDE for C/C++ Developers.Krok 3. Wybieramy proponowany serwer źródłowy lub ew. mirror.Krok 4. Pobieranie rozpoczyna się automatycznie po kilku sekundach.
PROCES INSTALACJI
Oprogramowanie nie wymaga instalacji. Po rozpakowaniu archiwum w wybranej lokalizacji jest ono od razu gotowe do pracy (o ile na komputerzez zainstalowana jest środowisko uruchomieniowe JAVA JRE).
bleeding-edge-toolchain
POBIERANIE OPROGRAMOWANIA
Pobierz archiwum zawierające bleeding-edge-toolchain z tej strony. W tutorialu wykorzystaliśmy najnowszą wersję dostępną w momencie pisania tego artykułu (platforma Windows x86): gcc-arm-none-eabi-4_8-141002-win.7z. W przypadku problemów z rozpakowaniem archiwum polecamy wykorzystać darmowy program 7-Zip.
Krok 1. Wybieramy najnowszą wersję toolchainu.Krok 2. Wersja dla platformy MS Windows.Krok 3. Wybieramy proponowany serwer źródłowy lub ew. mirror.Krok 4. W przypadku problemów z automatycznym rozpoczęciem pobierania należy uruchomić je ręcznie.
PROCES INSTALACJI
Oprogramowanie nie wymaga instalacji. Archiwum należy rozpakować na dysku (najlepiej w katalogu głównym jednego z dysków).
GNU ARM Eclipse Plugin
POBIERANIE I INSTALACJA OPROGRAMOWANIA
Najwygodniej zainstalować plugin z poziomu środowiska Eclipse (umożliwia to np. wygodne aktualizowanie rozszerzenia w późniejszym czasie).
PODSUMOWANIE
W tym momencie powinno być już możliwe zbudowanie w środowisku Eclipse nowego projektu. Dla płytki STM32F401 Nucleo można to wykonać następująco: File -> New -> C Project
Krok 1.Krok 2.Krok 3.Krok 4.Krok 5.
Kod projektu zbudowany przez kreatora (przygotowany dla STM32F4DISCOVERY) nie będzie działał na płytce STMF401 Nucleo z dwu powodów:
błędna automatyczna konfiguracja wyprowadzenia na którym podłączona jest dioda LED (PD12 w STM32F4DISCOVERY, PA5 w STMF401 Nucleo),
błędna konfiguracja zegara mikrokotrolera (konfiguracja źródła zegara jako HSE. który nie jest domyślnie obecny na STMF401 Nucleo).
Pierwszy z problemów rozwiążemy korygując definicje BLINK_PORT_NUMBER oraz BLINK_PIN_NUMBER w pliku include/BlinkLed.h. Prawidłowe wartości dla STM32F401 Nucleo to:
Drugi wymaga rekonfiguracji zegara systemowego - funkcja void configure_system_clock(void) w pliku src/_initialize_hardware.c powinna zawierać następującą konfigurację:
Korekta obu powyższych problemów gwarantuje uruchomienie skompilowanego programu na płytce ewaluacyjnej STM32F401 Nucleo (Project -> Build Project).
W przypadku braku na komputerze programu make (brak dostępnych narzędzi, które z niego korzystają, np. WinAVR, MinGW itp.) można pograć go z tej strony. Po instalacji należy dodać katalog bin do ścieżki systemowej lub skopiować jego zawartość (pliki libiconv2.dll, libintl3.dll oraz make.exe) do katalogu bin bleeding-edge-toolchain.
Podobnie w przypadku braku narzędzia rm będzie występował błąd przy czyszczeniu projektu (Project -> Clean). Komplet narzędzi CoreUtils dla systemu Windows można pobrać z tej strony, a po instalacji skopiować je do katalogu bin bleeding-edge-toolchain.
Etap II: programowanie + debugowanie
Programowanie: STM32 ST-LINK Utility
Jeśli zależy nam jedynie na zaprogramowaniu mikrokotrolera możemy zwykle użyć darmowych narzędzi oferowanych lub polecanych przez producentów (dla mikrokotrolerów STM32 będzie to STM32 ST-LINK Utility, dla układów z rodziny LPCxxxx będzie to aplikacja Flash Magic).
Po zainstalowaniu i uruchomieniu aplikacji ST-LINK Utility możemy podłączyć się do płytki uruchomieniowej (Target->Connect), wybrać plik wynikowy (File->Open file...) oraz załadować go do pamięci mikrokontrolera (Target -> Program & Verify... -> START).
Debuggowanie: OpenOCD
Program można znaleźć na stronie niezawodnego Freddiego Chopina, który wraz z pojawieniem się nowej wersji na głównej stronie projektu (http://openocd.sourceforge.net/) kompiluje go dla systemu Windows.
Program dostępny jest w formie archiwum (ponownie przydatny okaże się 7Zip), które należy rozpakować w katalogu głównym jednego z dysków twardych komputera.
Działanie OpenOCD w konsoli Windows
Działanie można sprawdzić komendą
openocd-0.8.0.exe --version
w konsoli systemu:
C:\openocd-0.8.0\bin>openocd-0.8.0.exe --version
Open On-Chip Debugger 0.8.0 (2014-04-28-08:39)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Aktualne sterowniki STLink v2 / v2-1 będą odpowiednie do współpracy z OpenOCD. Jeśli wszystko jest w porządku a do komputera podłączona jest płytka Nucleo F401RE po wywołaniu komendy:
C:\openocd-0.8.0\bin>openocd-0.8.0.exe -f ..\scripts\board\st_nucleo_f401re.cfg
Open On-Chip Debugger 0.8.0 (2014-04-28-08:39)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v23 API v2 SWIM v6 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.255010
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Integracja z Eclipse
Wraz z ARM Eclipse Plugin instalowany jest odpowiedni plugin do współpracy z OpenOCD.
PODSUMOWANIE
Powyższe działania (sprawdzone dla czystych instalacji systemów Windows 7 x86 oraz Windows 8.1 x64) gwarantują poprawne skonfigurowanie środowiska dla mikrokontrolerów z rdzeniem ARM Cortex-Mx.
Port FreeRTOS na STM32F100RB dla bleeding-edge-toolchain
STM32VLDiscovery - to bardzo popularna płytka rozwojowa z mikrokontrolerem STM32F100RB (STMICROELECTRONICS) dostępna już za około 50PLN. Umożliwia ona nie tylko realizację niezliczonej liczby projektów, ale jednocześnie pozwala na zapoznanie się z zaganieniami programowania wielowątkowego na przykładzie opensourcowego systemu FreeRTOS.
Toolchain
Oryginalny kod demonstracyjny dla kontrolera STM32F100RB, rozpowszechniany wraz ze źródłami systemu FreeRTOS, przygotowany jest dla środowiska Atollic TrueSTUDIO (toolchain bazujący na GCC). Bez większych trudności można go jednak dostosować do darmowych toolchainów, również bazujących na GCC. W naszym przypadku wybór padł na toolchain przygotowany przez Freddiego Chopina: bleeding-edge-toolchain.
W naszym pracach wykorzystaliśmy najnowszą wersję dostępną w momencie pisania tego artykułu (platforma Windows x86): gcc-arm-none-eabi-4_8-131228-win.7z. Archiwum należy rozpakować na dysku (najlepiej w katalogu głównym jednego z dysków) oraz dodać podkatalog X:\gcc-arm-none-eabi-4_8-131228\bin do ścieżki PATH systemu operacyjnego.
Kod Startowy
Wykorzystano nieco zmodyfikowany kod startowy przygotowany w projekcie stm32_blink_led na stronie Autora. Jedyna zmiana ogranicza się do wyeliminowania inicjalizacji stosu Process Stack. Domyślnie, po starcie, rdzeń Cortex-M3 wykorzystuje Main Stack. Po uruchomieniu schedulera systemu FreeRTOS każdy z wątków ma przydzielony odrędny stos na stercie zarezerwowanej przez system i zgodznie z zaleceniami ARM system wykorzystuje wskażnik PSP do obsługi stosu w kontekście każdego z wątków.
Skrypt Linkera
Jak wyżej, bez problemów można wykorzystać skrypt linkera przygotowany przez Freddiego Chopina (modyfikując jedynie __main_stack_size oraz __process_stack_size).
Makefile
Ponownie jako punkt startowy warto wykorzystać Makefile dostępny w oryginalnym projekcie stm32_blink_led. Modyfikacje obejmują określenie definicji dla kompilatora C (-DSTM32F10X_MD_VL -DUSE_STDPERIPH_DRIVER) oraz konfigurację katalogów w sekcji INC_DIRS oraz SRCS_DIRS.
STM32F4xx have a build in RTC (Real Time Clock) module. It is easy to use and can be driven by an internal or external 32,768 kHz reference clock. External 32.768 kHz clock reference is (by default) not fitted on the STM32F4-Discovery boards, but footprint of the crystal oscillator and load capacitors is provided on the PCB. The only issue is an additional VBAT voltage that is used as a backup supply for the RTC (as well as for additional backup registers and a small amout of backup SRAM memory).
Internal 32kHz reference has a wide tolerance and changes with temperature (as presented in the STM32F405xx / STM32F407xx Datasheet):
So if a stable and accurate time measurements (especially in longer periods) are needed - it is definitelly worth using an external cristall oscillator as a reference clock for the RTC.
Only thing that remains unclear is how to connect the VBAT backup power supply for the RTC (otherwise time and date must be configured each time the board is disconnected from the power supply). While there is a dedicated VBAT pin on the Morpho expansion header on the STM Nucleo boards series it was not routed on any of the STM32F4-Discovery headers. VBAT supply current is small enough that a coin cell battery (for e.g. CR2032) will provide enough power.
By default VBAT is shorten (with R26, 0 Ohm, 0603 size resistor) to the VBAT and can also be found on the C28 decoupling capacitor (schematic of the board can be found in the UM1472 STM32F407 Discovery Kit User Manual):
The R26 can be desoldered (otherwise, when power is removed VBAT would provide VDD voltage for the board, but what is worse: when the board is repowered the VDD would recharge the lithium coin cell battery an it will not end well). In our case a typical, cheap, through hole button cell holder was a perfect match and is soldered directly to the positive pin on the C26 decoupling capacitor and P2-2 GND pin:
stm32f4 disco rtc hack 1stm32f4 disco rtc hack 2stm32f4 disco rtc hack 3
It must be remembered, that the cell holder must be operated carefully or the C26 or the board itself (C26 pad torn of the PCB laminate) can be destroyed.
RPi na lekko
Oficjalne obrazy dostarczane dla Raspberry Pi na stronie http://www.raspberrypi.org/downloads/ zawierają mnóstwo opcji zupełnie niepotrzebnych w większości aplikacjach typu embedded (np. GUI). Oczywiście można z funkcji tych nie korzystać (uruchamoiamy system do wiersza poleceń, bez GUI), lecz pomimo tego zajmują one miejsce na karcie (zalecany minimalny rozmiar karty SD to 4-8GB).
Dodatkowo system ładując wiele niepotrzebnych modułów w związku z czym startuje bardzo wolno... tutaj pojawia się możliwość konfiguracji własnego ('skrojonego na miarę') obrazu:
Obie opcje dotyczą raczej zaawansowanych użytkowników.
Istnieje również inna droga - skorzystanie z gotowych 'minimalistycznych' obrazów systemu linux. Do wyboru mamy aktualnie dwie opcje:
Dodatkowo oba zostały przygotowane w wariancie armhf (korzystamy ze sprzętowego modułu floating point), więc operacje zmiennoprzecinkowe wykonywane są znacznie szybciej niż w alternatywnym wariancie armel.
Gdy już zdecydujemy i zainstalujemy wybrany obraz na karcie SD warto dbać o kilka podstawowych elementów, aby utrzymać go w dobrym stanie