Na rozgrzewkę:
Podczas pracy nad urządzeniem miałem problem z działaniem programu bez podpiętego programatora. Szukałem błędu w rodzaju bootowania, finalnie okazało się, że niepodłączony programator ściąga linię reset. We wpisie przedstawię Ci zagadnienia jakie sprawdzałem podczas dochodzenia do rozwiązania problemu.
Zakres wpisu:
- Rodzaje pamięci z jakich może być boot’owany procesor
- Sposoby konfiguracji źródła boot’owania
- Narzędzia niezbędne do konfiguracji źródła boot’owania
Rodzaje pamięci z jakich może być boot'owany procesor:
W instrukcji obsługi (Reference Manual) procesora, którego używam jest umieszczona tabela ze sposobami boot’owania. STM32 G0 może być boot’owany w następujący sposób:
- z pamięci flash, najprostsza i najczęściej wybierana opcja. Zewnętrzny programator np. ST-link programuje bezpośrednio pamięć flash np. wykorzystując interfejs SWD.
- z pamięci systemowej (ROM). Bootloader przechowywany w pamięci systemowej w sektorze chronionym, jest programowany przez ST podczas procesu produkcji. Wykorzystując ten tryb, pamięć flash może być programowana poprzez interfejsy komunikacyjne tj. UART, I2C, SPI, USB czy CAN (w zależności od procesora). W celu implementacji tego rodzaju boot’owania ST zaleca skorzystanie z noty aplikacyjnej AN2606 [1]. Podczas programowania na początku program jest transportowany do pamięci RAM następnie programowana jest pamięć flash.
- z pamięci SRAM (Static Random Access Memory), static oznacza, że pamięć przechowuje dane tylko kiedy jest zasilana. Dane w pamięci SRAM są przechowywane podczas stanu reset. Przed reset program może być przetransportowany do SRAM, następnie programowana może być pamięć flash.
Najczęściej wybieraną opcją jest boot’owanie z głównej pamięci flash.
Sposoby konfiguracji źródła boot'owania:
Konfiguracje źrodła bootowania można przeprowadzić na dwa sposoby:
- konfiurowanie za pomocą pinu procesora BOOT0 oraz rejestrów konfiguracyjnych,
- konfigurowanie tylko za pomocą rejestrów.
Narzędzia niezbędne do konfiguracji źródła boot'owania:
Narzędziem, które możemy użyć do sprawdzenia i zmiany konfiguracji boot’owania jest STM32 Cube Programmer, który możesz pobrać ze strony ST po zarejestrowaniu się.
Ja w swoim projekcie używam pierwszej opcji boot’owania czyli bit BOOT_LOCK ma wartość 0, bit nBOOT_SEL ma wartość 0 oraz pin procesora BOOT0 podłączony jest przez rezystor 10kΩ do GND.
[1] https://www.st.com/resource/en/application_note/cd00167594-stm32-microcontroller-system-memory-boot-mode-stmicroelectronics.pdf
[2] https://www.st.com/resource/en/reference_manual/rm0444-stm32g0x1-advanced-armbased-32bit-mcus-stmicroelectronics.pdf