STM32 – #1 – Jak korzystać z wbudowanego bootloadera?

Wprowadzenie.

W dzisiejszym świecie systemy wbudowane odgrywają bardzo ważną rolę w wielu aspektach naszego codziennego życia. Od inteligentnych urządzeń domowych po pojazdy autonomiczne, wiele z tych zaawansowanych technologicznie rozwiązań opiera się na mikrokontrolerach. W układach elektronicznych bootloader odgrywa często istotną rolę, stanowiąc fundamentalny element systemów. Mówiąc prostym językiem, bootloader to program, który uruchamia się jako pierwszy, przez co realizuje on między innymi procesy związane z uruchamianiem właściwej aplikacji.

W niniejszym artykule dowiesz się jak od podstaw przejść przez proces korzystania ze wbudowanego bootloadera w mikrokontrolerach STM32. Mikrokontrolery STM32, ale i nie tylko możesz nabyć w sklepie msalamon.pl. We wpisie pokazałem też, jakie oprogramowanie będzie potrzebne, żeby skorzystać z funkcji wbudowanego bootloadera. Przedstawiłem także krok po kroku proces instalacji wspomnianego oprogramowania oraz pokazałem jak użyć oprogramowania do wgrania programu przez bootloader, ale także przez programator ST-Link.

Sponsorem wpisu jest msalamon.pl
WWW: https://msalamon.pl/
Sklep: https://sklep.msalamon.pl/

Zakres artykułu.

  • Jakie funkcje może pełnić bootloader?
  • Jakie wady i zalety wynikają z zastosowania bootloadera w porównaniu do programowania z zastosowaniem ST-Linka?
  • Jak pobrać oprogramowanie STM32CubeProgrammer?
  • Jak zainstalować oprogramowanie STM32CubeProgrammer?
  • Jak uruchomić wbudowany bootloader na STM32?
  • Jak przy pomocy STM32CubeProgrammer wgrać program za pomocą ST-LINKa?
  • Jak przy pomocy STM32CubeProgrammer wgrać program za pomocą bootloadera przez USB?

Jakie funkcje może pełnić bootloader?

Poniżej przedstawiłem 8 przykładów funkcji jakie może pełnić bootloader:

  • Inicjalizacja sprzętu: Bootloader może być odpowiedzialny za konfigurację i inicjalizację podstawowych elementów sprzętowych, takich jak peryferia, zegary, interfejsy komunikacyjne itp., aby przygotować urządzenie do działania.
  • Ładowanie systemu operacyjnego: Bootloader może wczytywać system operacyjny z trwałego nośnika (np. pamięci flash) do pamięci RAM, aby umożliwić jego uruchomienie.
  • Sprawdzanie integralności aplikacji / systemu operacyjnego: Bootloader może sprawdzać integralność aplikacji / systemu operacyjnego, aby upewnić się, że są one niezmienione i nieuszkodzone.
  • Przekazywanie kontroli mikrokontrolera: Po załadowaniu aplikacji / systemu operacyjnego do pamięci RAM, bootloader przekazuje kontrolę nad mikrokontrolerem właściwemu kodowi aplikacji / systemu operacyjnego, uruchamiając go.
  • Interfejs diagnostyczny: Niektóre bootloader’y oferują interfejs diagnostyczny, który umożliwia programistom monitorowanie i debugowanie systemu na wczesnym etapie startu.
  • Obsługa aktualizacji oprogramowania: Bootloader może umożliwiać aktualizację oprogramowania bez konieczności korzystania z programatora sprzętowego, ułatwiając proces aktualizacji firmware’u. Aktualizacja może odbywać się w takim przypadku nawet zdalnie.
  • Bezpieczeństwo i autentykacja: Niektóre bootloader’y mają mechanizmy bezpieczeństwa, takie jak autentykacja kodu, aby zapobiec nieautoryzowanym modyfikacjom oprogramowania.
  • Przywracanie z awarii: Bootloader może być zaprojektowany w taki sposób, aby umożliwiać przywracanie systemu w przypadku awarii lub błędów w procesie uruchamiania, co zwiększa niezawodność systemu.
Warto zaznaczyć, że wewnętrzny bootloader w urządzeniach STM32 jest zaprogramowany przez firmę ST podczas procesu produkcyjnego. Główną funkcją tego bootloadera jest umieszczanie programu aplikacji w wewnętrznej pamięci flash za pośrednictwem jednego z dostępnych interfejsów komunikacyjnych: USART, CAN, USB, I2C, SPI.

Jakie wady i zalety wynikają z zastosowania bootloadera w porównaniu do programowania z zastosowaniem ST-Linka

Bootloader:

Zalety:

  • Nie wymaga sprzętu programistycznego: Nie jest wymagane dodatkowe urządzenie programistyczne, takie jak ST-Link. Wystarczy jedynie odpowiedni interfejs komunikacyjny, na przykład USB, CAN, czy UART.
  • Aktualizacja przez interfejs użytkownika: Możliwe jest aktualizowanie oprogramowania bez konieczności posiadania sprzętu programistycznego. Bootloader może udostępniać interfejs użytkownika, np. przez port szeregowy, co ułatwia proces aktualizacji dla użytkowników końcowych.

Wady:

  • Ograniczona przepustowość: Transfer oprogramowania przez bootloader może być wolniejszy w porównaniu z programowaniem za pomocą ST-Linka, szczególnie jeśli wymaga on komunikacji przez interfejsy szeregowe, takie jak UART.
  • Mniejsza elastyczność: Niektóre operacje programistyczne, takie jak debugowanie w czasie rzeczywistym, mogą być ograniczone lub trudniejsze do realizacji przez bootloader w porównaniu z ST-Linkiem.
 

ST-Link:

Zalety:

  • Szybkie programowanie: ST-Link zapewnia szybkie i wydajne programowanie pamięci flash mikrokontrolera, co może być istotne podczas intensywnego procesu deweloperskiego.
  • Wszechstronność: ST-Link umożliwia nie tylko programowanie, ale także debugowanie w czasie rzeczywistym, co ułatwia analizę i diagnostykę problemów podczas rozwoju oprogramowania.

Wady:

  • Konieczność posiadania sprzętu programistycznego: Wykorzystanie ST-Linka wymaga posiadania odpowiedniego sprzętu programistycznego, co może być dodatkowym kosztem i wymagać posiadania specjalistycznej wiedzy.
  • Zależność od fizycznego dostępu: Programowanie za pomocą ST-Linka wymaga fizycznego połączenia z mikrokontrolerem, co może być niewygodne w przypadku urządzeń zamontowanych w trudno dostępnych miejscach.

Jak pobrać oprogramowania STM32CubeProgrammer?

Pierwszym krokiem, jaki należy wykonać, aby skorzystać ze wbudowanego bootloadera w mikrokontrolerze STM32, jest pobranie oprogramowania STM32CubeProgrammer, które znajdziemy na stronie internetowej:
https://www.st.com/en/development-tools/stm32cubeprog.html

Na stronie, należy przejść do sekcji “Get Software“, gdzie znajduje się program na różne systemy operacyjne. Po naciśnięciu na przycisk “Get latest” powinno rozpocząć się pobieranie oprogramowania, w przeciwnym razie zostaniemy poproszeni o podanie adresu e-mail, na który zostanie wysłany link do pobrania interesującej nas wersji programu.

Po pobraniu oprogramowania możemy przejść do jego instalacji.

Jak zainstalować oprogramowanie STM32CubeProgrammer?

Instalacja oprogramowania STM32CubeProgrammer jest intuicyjna i przebiega jak na poniższych zrzutach ekranu.

W pierwszym kroku instalacji ujrzymy okno powitalne, na którym zostanie przedstawiony link do strony domowej instalacji tego oprogramowania.

W drugim oknie przedstawione nam są najważniejsze informacji dotyczące oprogramowania.

W trzecim oknie widzimy informacje odnośnie licencji oprogramowania, które należy przeczytać i zaakceptować, jeżeli chcemy przejść do dalszych kroków instalacji.

W czwartym kroku należy zapoznać się z informacjami na temat użycia oprogramowania i następnie zaznaczyć check box.

W piątym kroku definiujemy ścieżkę, gdzie oprogramowanie ma się zainstalować.

W szóstym kroku zaznaczamy komponenty, które chcemy, aby zostały zainstalowane. 

W następnym kroku rozpoczyna się proces instalacji oprogramowania.

Podczas tego kroku pojawi się też okno odnośnie instalacji sterowników, które również należy zainstalować.

Po ukończeniu instalacji sterowników powinniśmy zobaczyć następujące okno.

Gdy zakończy się proces instalacji oprogramowania, możemy przejść dalej.

Na koniec wyświetli się okno odnośnie ustawienia skrótów do oprogramowania.

W ostatnim oknie ukaże nam się informacja o zakończonym procesie instalacji.

Jak uruchomić wbudowany bootloader na STM32?

Wbudowany bootloader w mikrokontrolerach STM32 znajduje się w pamięci systemowej “System memory“. Uruchomienie go w przypadku mikrokontrolerów STM32 jest bardzo prostą czynnością, wystarczy, aby odpowiednio podłączyć dwa piny BOOT0 oraz BOOT1. W celu uzyskania informacji, w jaki sposób skonfigurować piny, należy zajrzeć do dokumentacji i przejść do sekcji z trybami bootowania Boot modes“. Dla mikrokontrolera STM32F4xx taka informacja znajduje się w tabelce jak poniżej. W tabeli widzimy, że w celu użycia bootloadera znajdującego się w pamięci systemowej, należy pin BOOT0 podciągnąć do zasilania, a pin BOOT1 do GND.

W sekcji z pinami odnajdźmy piny BOOT0 oraz BOOT1. BOOT0 jest oddzielnym pinem, natomiast BOOT1 jest dodatkową funkcją pinu PB2.

Jak przy pomocy STM32CubeProgrammer wgrać program za pomocą ST-LINKa?

Na początku przygotujmy pliki binarne programów, które będziemy wgrywać. Ja przygotowałem cztery proste programy, które mają za zadanie migać różnymi diodami na płytce developerskiej.

Po przygotowaniu programów możemy włączyć oprogramowanie STM32CubeProgrammer.

Gdy jesteśmy podłączeni do płytki przy pomocy ST-Linka, w pierwszej kolejności należy wybrać opcję ST-LINK przy pomocy błękitnego przycisku, a następnie należy nacisnąć na zielony przycisk “Connect“. Oba przyciski znajdują się po prawej stronie programu.

Gdy połączenie zostanie nawiązane prawidłowo, powinniśmy zobaczyć dane w postaci heksadecymalnej, które zapisane są w poszczególnych komórkach adresów. Liczby te oznaczają, że program, który znajduje się na mikrokontrolerze, został sczytany poprawnie. Dodatkowo po prawej stronie, zielony przycisk “Connect” powinien przemienić się na przycisk “Disconnect” oraz nad przyciskiem powinniśmy ujrzeć napis “Connected“.

W celu wgrania programu należy przejść do drugiej zakładki znajdującej się po lewej stronie. W tym miejscu przy pomocy przycisku “Browse” możemy odszukać nasze pliki binarne z naszymi programami.

Następnie wybieramy program, który chcemy wgrać.

Ścieżkę do programu powinniśmy ujrzeć w polu wyboru przy etykiecie “File path“.

W tym momencie możemy nacisnąć na przycisk “Start Programming“. Wgrywanie programu powinno się rozpocząć.

Po zakończeniu wgrywania powinno pojawić nam się okno z informację “File downloaded complete

W Polu z logami również powinniśmy dostać tę samą informację. W tym momencie możemy się rozłączyć przyciskiem “Disconnect“.

W celu zobaczenia efektu naszej pracy należy jeszcze zrobić restart mikrokontrolera. Po tej czynności program powinien się załadować.

Jak przy pomocy STM32CubeProgrammer wgrać program za pomocą bootloadera przez USB?

Znając piny uruchamiające wbudowany bootloader, możemy przejść do wgrania programu przy pomocy interfejsu USB. W tym celu podłączmy naszą płytkę developerską za pomocą przewodu USB oraz podłączmy ją do zasilania.

Nie podłączajmy jeszcze pinów od wbudowanego bootloadera, tylko uruchommy program STM32CubeProgrammer.

Przy pomocy niebieskiego przycisku wybierzmy opcję “USB” a następnie spróbujmy wybrać port z sekcji “USB configuration“. Port USB nie powinien zostać znaleziony.

Podłączmy teraz piny od bootloadera zgodnie z wcześniejszymi informacjami i wykonajmy restart płytki. Wybierając teraz port, powinien ukazać nam się dostępny port USB, który należy wybrać. Następnie możemy nacisnąć na przycisk “Connect“.

Tak jak poprzednio powinno zostać nawiązane połączenie oraz program z mikrokontrolera powinien zostać sczytany.

Przejdźmy do już znanej nam zakładki do wgrywania programu i naciśnijmy przycisk “Browse“.

Wybierzmy teraz inny program, abyśmy mogli porównać, czy program się poprawnie wgrał.

Po wybraniu programu możemy nacisnąć na przycisk “Start Programming“.

Tak jak poprzednio powinniśmy otrzymać tę samą informację o zakończeniu wgrywania pliku.

Po rozłączeniu pinów i wykonaniu restartu powinien załadować się nasz drugi program.

Źródła

[1] Oficjalna strona oprogramowania STM32CubeProgrammer, Dostęp z dnia 25 Stycznia 2024 z https://www.st.com/en/development-tools/stm32cubeprog.html
[2] Strona interenetowa sklepu msalamon.pl, Dostęp z dnia 25 Stycznia 2024 z  https://sklep.msalamon.pl/

Autor artykułu
Dominik Bednarski

2 Replies to “STM32 – #1 – Jak korzystać z wbudowanego bootloadera?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.