【STM32F407開發板用戶手冊】第28章 STM32F407的系統bootloader基礎知識


最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

第28章       STM32F407的系統bootloader基礎知識

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

28.1 初學者重要提示

28.2 系統bootloader基礎知識

28.3 進入系統bootloader的方法

28.4 退出系統bootloader的方法

28.5 系統bootloader的擦寫管理

28.6 總結

 

 

28.1 初學者重要提示

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

28.2 系統bootLoader基礎知識

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

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

28.2.1 系統bootLoader執行流程

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

 

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

28.2.2 系統bootLoader使用的引腳

STM32F4的bootloader使用到的引腳分配如下:

 

28.3 進入系統bootLoader的方法

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

28.3.1 設置硬件boot引腳進入系統BootLoader

STM32F407支持的啟動方式如下:

  •   從Flash啟動(正常運行時選擇這種模式)。
  •   從系統存儲器啟動(做ISP下載時用)。
  •   從內嵌SRAM啟動(調試用,一般很少使用)。

具體到原理圖上的設計如下:

 

  •   如果僅作從Flash驅動,可以將BOOT0和BOOT1直接接地,不需要電阻。
  •   從SRAM啟動,BOOT1固定取低電平,BOOT0可以取高電平或者低電平。注意硬件上不支持從SRAM啟動。因為掉電后,SRAM中的數據消失。

28.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運行失敗。

 

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

28.4 退出系統bootLoader的方法

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

  •   USB DFU

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

  •   串口IAP

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

28.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個字節,分別為如下表所述:

 

28.6 總結

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


免責聲明!

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



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