【STM32H7教程】第67章 STM32H7的系統bootloader基礎知識


完整教程下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

第67章       STM32H7的系統bootloader基礎知識

本章為大家介紹STM32H7內置的系統bootloader的基礎知識。

67.1 初學者重要提示

67.2 系統bootloader基礎知識

67.3 進入系統bootloader的方法

67.4 退出系統bootloader的方法

67.5 系統bootloader的擦寫管理

67.6 總結

 

 

67.1 初學者重要提示

  1.   本章主要為大家介紹系統bootloader的理論知識,下個章節為大家實戰。
  2.   更多系統bootloader的基礎知識看本帖的AN2606應用筆記:http://www.armbbs.cn/forum.php?mod=viewthread&tid=96573

67.2 系統bootLoader基礎知識

STM32的系統存儲區自帶bootloader,此程序是ST在芯片出廠時燒錄進去的,主要用於將用戶應用程序下載到芯片內部Flash。支持USB,SPI,I2C,CAN,UART等接口方式下載。如果大家的應用程序打算采用這種接口方式進行升級,可以考慮采用系統bootloader,簡單易用,無需用戶自己寫bootLoader了。

更重要的是,使用系統BootLoader可以不依賴硬件boot引腳,可以直接從應用程序跳轉到系統BootLoader,這樣靈活性就很大了。

67.2.1 系統bootLoader執行流程

下面是STM32H7的BootLoader程序執行流程,簡單了解下即可:

 

關於這個執行流程,要特別注意一點:如果在進入系統BootLoader前就插入了USB線,會導致進入系統BootLoader后優先執行USB DFU,其它的接口方式將沒有機會執行。

67.2.2 系統bootLoader使用的引腳

STM32H7的Bootloader使用到的引腳分配如下:

 

67.3 進入系統bootLoader的方法

STM32進入系統BootLoader主要有兩種方法,一種是設置boot引腳,另一種是應用程序直接跳轉到系統BootLoader。

67.3.1 設置硬件boot引腳進入系統bootLoader

H7的啟動方式比較更靈活,只需一個boot引腳。但是一個引腳只能區分出兩個狀態,為了解決這個問題,H7專門配套了兩個option bytes選項字節配置,如此以來就可以方便設置各種存儲器地址了。

 

BOOT_ADD0和BOOT_ADD1對應32位地址到高16位,這點要特別注意。通過這兩個選項字節,所有0x0000 0000到0x3FFF 0000的存儲器地址都可以設置,包括:

  •   所有Flash地址空間。
  •   所有RAM地址空間,ITCM,DTCM和SRAM。

設置了選項字節后,掉電不會丟失,下次上電或者復位后,會根據BOOT引腳狀態從BOOT_ADD0,或BOOT_ADD1所設置的地址進行啟動。也就是說是,H7可以從0x0000 0000到0x3FFF 0000所有地址進行啟動,這點與F4完全不同,F4系列是固定從0x0000 0000啟動的。

STM32H7的boot引腳設計:

 

使用BOOT功能,注意以下幾個問題:

  •   如果用戶不慎,設置的地址范圍不在有效的存儲器地址,那么BOOT = 0時,會從Flash首地址0x0800 0000啟動,BOOT = 1時,會從ITCM首地址0x0000 0000啟動。
  •   如果用戶使能了Flash Level 2保護,那么只能從Flash地址空間進行啟動。

67.3.2 用戶應用程序跳轉到系統bootLoader

除了使用boot引腳控制運行系統BootLoader,也可以上電后跳轉,跳轉前注意以下問題:

  •   禁止所有外設時鍾。
  •   禁止使用的PLL。
  •   禁止所有中斷。
  •   清除所有中斷掛起標志。
  •   如果使用Go命令,對於BootLoader中使用的硬件外設寄存器,跳轉前是不會設置到復位值的,如果用戶代碼中恰好也用到這些寄存器,需要重新配置。這里要特別注意的是BootLoader會用到看門狗,並且喂狗時間設為最長了,如果用戶代碼里面要用到看門狗請根據需要重新配置,並且看門狗一旦開啟是無法關閉的。
  •   對於具有雙bank特性的STM32,為了能夠從用戶代碼跳轉到系統boot,需要將系統boot代碼區使用寄存器SYSCFG重映射到0x0000 0000(除了F7和H7系列)。對於STM32F7系列,需要禁止nDBOOT / nDBANK 特性,然后跳轉到系統boot區。
  •   如果用到系統bootloader的DFU/CAN接口,需要用到HSE時鍾,這個時鍾的頻率是通過內部HSI/MSI檢測出具體頻率。因此,由於外部溫度等各種情況,內部HSI的精度會受到影響,從而影響檢測出來的HSE時鍾有較大誤差,最終導致DFU/CAN運行失敗。

 

具體實現會在下一章節為大家講解。

67.4 退出系統bootLoader的方法

當前主要研究了USB DFU和串口IAP退出bootLoader。

  •   USB DFU

當芯片工作在系統bootLoader的USB DFU模式,更新完畢程序后,不會自動退出USB DFU,需要重新復位芯片后才會退出。由於DFU模式會用到USB線,插拔USB線是難以避免的,所以是否支持自動退出,並不影響。

  •   串口IAP

當芯片工作在系統bootLoader的串口升級模式,更新完畢程序后,可以自動退出。所以基於串口的組網設備,使用系統bootloader非常方便。

67.5 系統bootLoader的擦寫管理

注:這部分知識點有個了解即可。

  • 使用bootloader命令進行的所有寫操作都只能字對齊(地址應該是4的倍數)。要寫入的數據數量也必須是4的倍數(接受未對齊的半頁寫地址)。
    •   有些產品不支持批量擦除操作。使用BootLoader進行批量擦除時,有兩種方法可用:
    •   使用扇區擦除命令一個一個刪除。
  •   將保護級別設置為1,然后設置為0(使用讀保護命令,然后使用讀非保護命令),將導致大批量擦除操作。
  •   STM32 L1和L0系列的Bootloader除了支持操作內部Flash,內部SRAM,可選字節等,還支持操作Data Memeory(數據存儲區,貌似是指的EEPROM)。數據存儲區支持讀寫操作,而不支持擦除命令,如果要擦除,寫0即可。另外對此存儲區的寫操作必須是4字節對齊(寫地址),並且寫入的數據也是4的倍數。
  •   F2, F4, F7 和 L4除了支持操作內部Flash,內部SRAM,可選字節等,還支持操作OTP存儲區。僅支持讀寫操作,不支持擦除命令。
  •   F2, F4 和 F7系列的內部Flash寫格式依賴於供電電壓范圍,默認的寫操作只支持字節(半字,字和雙字是不支持的),為了增加寫操作速度,用戶施加足夠的電壓范圍以允許寫操作按半字,字或雙字,並通過虛擬內存位置的boot程序更新此配置。該內存位置不是物理地址,但可以根據協議使用常規的BootLoader讀寫操作。該存儲位置包含4個字節,分別為如下表所述:

 

67.6 總結

本章節就為大家講解這么多,更新相關的知識看ST的應用筆記AN2606。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM