BOOT0 i BOOT1 w układach STM32

To co nie widoczne gołym okiem ,a jednak obecne i przydatne ...
ODPOWIEDZ
Awatar użytkownika
SunRiver
Administrator
Posty: 344
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

BOOT0 i BOOT1 w układach STM32

Post autor: SunRiver » 19 lis 2017, 23:29

W mikrokontrolerach STM32 Piny BOOT0 i BOOT1 występują od dawna , szczególnie się nimi nikt nie przejmuje ogólnie odpowiadają one za uruchomienie (bootowanie mikrokontrolera) .. zwykle ustawione na DEV Boardach producenta ... i ok ...


Zasadniczo z praktyki :
BOOT0 = 0 pozwala na uruchomienie programu w mikrokontrolerze
BOOT1 = 0 (NC)

Dlaczego o tym piszę ??

Dlatego że bawiąc się z mikrokontrolerami STM32szczególnie rodziny F4 warto sobie zdawać sprawę z istnienia wbudowanego bootloadera który pozwala programować mikrokontroler przy pomocy samego UARTA. TAK TAK ...

STM udostępnia program o nazwie Flash LOADER Demonstrator
, który pozwala zaprogramować pamięć naszego mikrokontrolera bez użycia programatora , przy pomocy właśnie bootloadera ... ma to znaczenie gdy robimy własną płytkę , bądź używamy takiej np Chińskiej i nie mamy programatora ....
Przechwytywanie.PNG
Ale co to ma do rzeczy ?? a no to że wszystkie F4 mają wbudowany bootloader :) , którego możemy użyć w bardzo prosty sposób który tu opiszę .. Tymczasem wystarczy mieć dowolną przejściówkę USB -- UART czy to opartą na FT232RL czy "RED board" CYPRESSA zainstalowany w/w program i to wszystko :)

NIE NIE NIE TO NIE WSZYSTKO :!


O ile sam program jest banalny w obsłudze <może dla niektórych nie bardzo> ale te kilka osób nie będę się nimi przejmował :) o tyle płytkę też trzeba przygotować w odpowiedni sposób do pracy i dlatego właśnie będą nam potrzebne tytułowe PINY BOOT0 i BOOT1

Na pierwszy ogień poszła płytka :
STM32F4-Discovery.jpg

STM32F4 Discovery z mikrokontrolerem STM32F407VGT
musimy ja ładnie przygotować do pracy wiec szybciorem bierzmy się do pracy ...

Najpierw ... ściągamy zworki ST-Link (wyłączamy programator)
gallery_9192_45_833829.png
Teraz zaglądamy na pinout naszej płytki i odszukujemy pin PB2 jest tam sygnał BOOT1 oraz bardzo blisko bo obok jest GND wiec używamy jednej ze zworek od ST-Linka i zakładamy na PB2 i GND :)
Tym sposobem :

BOOT1 = 0

Następnie odnajdujemy pin BOOT0 macie ?? cóż za szczęście patrzcie obok niego zaraz jest VDD
pozostaje nam tylko założyć zworkę na nie :) i Tym sposobem :

BOOT0 = 1


Dzięki tym ustawieniom mamy aktywny bootloader więc zobaczmy ... podłączoną mamy naszą przejściówkę w moim wypadku RED Board Cypressa (pisałem o tym fragmencie na blogu)
Musimy podłączyć piny TXD i RXD do mikrokontrolera ...

na naszej płytce testowej wiec mamy :

UART1
  • TXD (PA9) ; RXD (PA10) --- >> UART1
  • TXD (PA2) ; RXD (PA3) --->> UART2
  • TXD (PB10) ; RXD (PB11) --->> UART3
  • TXD (PC10) ; RXD (PC11) --->> UART4
  • i kilka innych pinów ...
Od razu wam napisze że używanie PA9 i PA10 nie zadziała bowiem te piny są używane do połączenia z USB. Ale dowolny inny UART śmiga :) w każdym razie wybieramy 2 dowolne inne niż PA9 i PA10 podpinamy pamiętając o krosie :)

RXD --> TXD
TXD <-- RXD
GND <--> GND

Wpinamy przejściówkę do USB , naszą płytkę też podpinamy do usb (trzeba jakoś ją zasilać) i wracamy do programu Flasher Demonstrator :)

Tu jak pisałem sprawa banalna ...

1. Wybieramy właściwy port COM --- U mnie COM3
2. Klikamy NEXT

Zobaczymy takie okienko :
usb-uart-bootloader-flash-loader-device-readable.png
3. Klikamy NEXT ....

4. Tu wybieramy nasze urządzenie (STM32F3_1024K) gdyż nasz mikrokontroler ma 1MB Flash
Select.png
5. Klikamy NEXT
6. W następnym oknie wybieramy nasz plik z programem w formacie .HEX/BIN lub S19
W sekcji Download to device :
flashbin.png
7. Nic więcej nie zmieniamy klikamy NEXT :)
flashing.png
I ładnie program się wgrywa do naszego mikrokontrolera :)

8. Uruchamiamy program :) resetując układ ..

O nie działa ... a no tak... aby uruchomić program z pamięci FLASH Musimy zdjąć zworki z pinów BOOT0 i BOOT1 :) gdyż po resecie jak ich nie zdejmiemy mikrokontroler będzie czekał na transmisję z UART:)

Oczywiście w zasadzie jak pisałem wcześniej
BOOT0 = 1 , BOOT1 = 0 = UART BOOTLOADER
BOOT0 = 0 , BOOT1 = 0 or 1 or NC = BOOT to FLASH MEMORY

I to tyle jeśli chodzi o ów 2 magiczne piny ...

UWAGA !!


Niestety program Flash Loader Demonstrator nie działa z STM32F429I gdyż nie obsługuje on mikrokontrolerów z 2Mb pamięci FLASH ... ale może kiedyś :)

Z innymi mikrokontrolerami STM32 nie sprawdzałem wiec jak działą u was to dajcie znać :)

------------------------------------------ Lista STM32 i pinów dla bootloadera ----------------------------------------------------------------------


Ustawienie : BOOT0 = 1
Referecje : AN2606



STM32F0-Discovery (STM32F051RBT6) UART1 PA9 / PA10
STM32VL-Discovery (STM32F100RBT6) UART1 PA9 / PA10
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
xbary
Użytkownik
Posty: 52
Rejestracja: 08 paź 2017, 19:59

Re: BOOT0 i BOOT1 w układach STM32

Post autor: xbary » 20 lis 2017, 0:00

A uszykowany .bin do wgrania nie musi być przelinkowany na inne adresy? czy to ten sam .bin co bym wgrywał st-linkiem przez SWD? :)

Dla ciekawostki dodam że rozwiązanie loadera przez uart otwiera nam możliwość podejmowania programowania wprost np. z ESP8266 który ściągnie kiedy trzeba odpowiedni .bin :) i wgra do naszego STMa.

Awatar użytkownika
l3n1n
Użytkownik
Posty: 92
Rejestracja: 28 paź 2017, 8:46
Lokalizacja: 3M

Re: BOOT0 i BOOT1 w układach STM32

Post autor: l3n1n » 20 lis 2017, 5:58

Jak dla mnie rewelacja. Sun opisał chyba pierwszy raz w życiu coś krok po kroku, nie wymagając myślenia od czytelnika :p. Mam pytanie czy takie uartowe programowanie jest dużo wolniejsze od programowania przez programator? Trochę wyszło masło maślane. To nie jest pytanie malkontenta tylko raczej zainteresowanie.

Awatar użytkownika
SunRiver
Administrator
Posty: 344
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: BOOT0 i BOOT1 w układach STM32

Post autor: SunRiver » 20 lis 2017, 9:50

xbary pisze:
20 lis 2017, 0:00
A uszykowany .bin do wgrania nie musi być przelinkowany na inne adresy? czy to ten sam .bin co bym wgrywał st-linkiem przez SWD? :)

Dla ciekawostki dodam że rozwiązanie loadera przez uart otwiera nam możliwość podejmowania programowania wprost np. z ESP8266 który ściągnie kiedy trzeba odpowiedni .bin :) i wgra do naszego STMa.
Nie bowiem bootloader siedzi sobie fabrycznie nie zajmuje dostępnej pamięci , wiec wgrywasz w tą sama przestrzeń adresową co programatorem
chyba że sa inne wymogi adresowania programu ... ale w normalnych warunkach nic się nie zmienia. Jedynie wachlowanie pinami BOOT0 i BOOT1

W sumie ESP powinno się też dać zrobić updater na ESPku ale trzeba zapewnic przełączanie pinu BOOT1 gdyż domyślnie po resecie nie startuje program do puki BOOT0 nie zostanie przełączony :)
l3n1n pisze:
20 lis 2017, 5:58
Jak dla mnie rewelacja. Sun opisał chyba pierwszy raz w życiu coś krok po kroku, nie wymagając myślenia od czytelnika :p. Mam pytanie czy takie uartowe programowanie jest dużo wolniejsze od programowania przez programator? Trochę wyszło masło maślane. To nie jest pytanie malkontenta tylko raczej zainteresowanie.
No nie pierwszy raz , ale ... niech będzie. Wiesz wolniejsze jest zawsze uźywanie bootloadera , ale w wielu przypadkach jest bardzo przydatne
zwłaszcza jak mamy utrudniony dostęp do urządzenia. W kwestii formalnej np Arduino opiera się własnie o bootloader dla wygody i nie tzreba miec pod ręką żadnego programatora :)
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
squeez
Użytkownik
Posty: 76
Rejestracja: 16 paź 2017, 23:52

Re: BOOT0 i BOOT1 w układach STM32

Post autor: squeez » 20 lis 2017, 11:03

Botloader na UART jest też chyba w innych rodzinach jak F1 czy F3 co prawda się niem nie bawiłem jeszcze ale zasada jest taka sama?
W DS jest waksazy na jakim UART działa bootloader np. USART1 dla F103 ale soft jest ten sam?

A jeszcze takie pytanie dodatkowe.
Czy transmisja jest w jedną stronę czy w obydwie? bo jak tylko w jedną to można by było to ożenić z RS485. jak w dwie to już bardziej komplikuję bo należało by sterować linią DE/RE.

Awatar użytkownika
SunRiver
Administrator
Posty: 344
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: BOOT0 i BOOT1 w układach STM32

Post autor: SunRiver » 20 lis 2017, 11:25

Zgodnie z wiedzą od STM bootloader jest nawet w M0 , ale nie bawiłem się nimi , a tu tak mnie natchnęło ....
Tak komunikacja jest w 2 strony ... można wgrać i zgrać wsad zresztą to widać na początku jak odpalasz softa
najpierw jest próba łączenia i dostajesz info ze target jest readable co pozwala przejść dalej ...
tak więc bez problemowo można to wkożystać do niecnych planów :)
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
SunRiver
Administrator
Posty: 344
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: BOOT0 i BOOT1 w układach STM32

Post autor: SunRiver » 20 lis 2017, 22:49

Uzupełniłem o 2 płytki Discovery , i dodałem dokument referencyjny dla BOOTLOADERA AN2606
który traktuje o konfiguracji i sposobie używania na większości mikrokontrolerów STM32
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Jaglarz
Użytkownik
Posty: 9
Rejestracja: 16 paź 2017, 14:37

Re: BOOT0 i BOOT1 w układach STM32

Post autor: Jaglarz » 08 gru 2017, 4:01

A dla F7 też da się? 8-)

ODPOWIEDZ

Wróć do „ARM Pod Lupą”