天天看點

STM32 Boot 模式和設定介紹

一、三種BOOT模式介紹

所謂啟動,一般來說就是指下好程式後,重新開機晶片時,SYSCLK的第4個上升沿,BOOT引腳的值将被鎖存。使用者可以通過設定BOOT1和BOOT0引腳的狀态,來選擇在複位後的啟動模式。

Main Flash memory

是STM32内置的Flash,一般我們使用JTAG或者SWD模式下載下傳程式時,就是下載下傳到這個裡面,重新開機

STM32 Boot 模式和設定介紹

後也直接從這啟動程式。

System memory

從系統存儲器啟動,這種模式啟動的程式功能是由廠家設定的。一般來說,這種啟動方式用的比較少。系統存儲器是晶片内部一塊特定的區域,STM32在出廠時,由ST在這個區域内部預置了一段BootLoader, 也就是我們常說的ISP程式, 這是一塊ROM,

出廠後無法修改。一般來說,我們選用這種啟動模式時,是為了從序列槽下載下傳程式,因為在廠家提供的BootLoader中,提供了序列槽下載下傳程式的固件,可以通過這個BootLoader将程式下載下傳到系統的Flash中。但是這個下載下傳方式需要以下步驟:

Step1:将BOOT0設定為1,BOOT1設定為0,然後按下複位鍵,這樣才能從系統存儲器啟動BootLoader

Step2:最後在BootLoader的幫助下,通過序列槽下載下傳程式到Flash中

Step3:程式下載下傳完成後,又有需要将BOOT0設定為GND,手動複位,這樣,STM32才可以從Flash中啟動可以看到, 利用序列槽下載下傳程式還是比較的麻煩, 需要跳帽跳來跳去的,非常的不注重使用者體驗。

Embedded Memory

内置SRAM,既然是SRAM,自然也就沒有程式存儲的能力了,這個模式一般用于程式調試。假如我隻修改了代碼中一個小小的地方,然後就需要重新擦除整個Flash,比較的費時,可以考慮從這個模式啟動代碼(也就是STM32的記憶體中),用于快速的程式調試,等程式調試完成後,在将程式下載下傳到SRAM中。

 二、開發BOOT模式選擇。

1、通常使用程式代碼存儲在主閃存存儲器,配置方式:BOOT0=0,BOOT1=X;

2、Flash鎖死解決辦法:

開發調試過程中,由于某種原因導緻内部Flash鎖死,無法連接配接SWD以及Jtag調試,無法讀到裝置,可以通過修改BOOT模式重新刷寫代碼。

修改為BOOT0=1,BOOT1=0即可從系統存儲器啟動,ST出廠時自帶Bootloader程式,SWD以及JTAG調試接口都是專用的。重新燒寫程式後,可将BOOT模式重新更換到BOOT0=0,BOOT1=X即可正常使用。

三、 RDP讀保護級别和注意事項

 RDP讀保護級别

修改選項位元組的RDP位的值可設定内部FLASH為以下保護級别:

A.  0xAA:級别0,無保護

這是STM32的預設保護級别,它沒有任何讀保護,讀取内部FLASH及"備份SRAM"的内容都沒有任何限制。(注意這裡說的"備份SRAM"是指STM32備份域的SRAM空間,不是指主SRAM,下同)

B.  其它值:級别1,使能讀保護

把RDP配置成除0xAA或0xCC外的任意數值,都會使能級别1的讀保護。在這種保護下,若使用調試功能(使用下載下傳器、仿真器)或者從内部SRAM自舉時都不能對内部FLASH及備份SRAM作任何通路(讀寫、擦除都被禁止);而如果STM32是從内部FLASH自舉時,它允許對内部FLASH及備份SRAM的任意通路。

也就是說,在級别1模式下,任何嘗試從外部通路内部FLASH内容的操作都被禁止,例如無法通過下載下傳器讀取它的内容,或編寫一個從内部SRAM啟動的程式,若該程式讀取内部FLASH,會被禁止。而如果是晶片自己通路内部FLASH,是完全沒有問題的,例如前面的"讀寫内部FLASH"實驗中的代碼自己擦寫内部FLASH空間的内容,即使處于級别1的讀保護,也能正常擦寫。

當晶片處于級别1的時候,可以把選項位元組的RDP位重新設定為0xAA,恢複級别0。在恢複到級别0前,晶片會自動擦除内部FLASH及備份SRAM的内容,即降級後原内部FLASH的代碼會丢失。在級别1時使用SRAM自舉的程式也可以通路選項位元組進行修改,是以如果原内部FLASH的代碼沒有解除讀保護的操作時,可以給它加載一個SRAM自舉的程式進行保護降級,後面我們将會進行這樣的實驗。

C.   0xCC:級别2,禁止調試

把RDP配置成0xCC值時,會進入最進階别的讀保護,且設定後無法再降級,它會永久禁止用于調試的JTAG接口(相當于熔斷)。在該級别中,除了具有級别1的所有保護功能外,進一步禁止了從SRAM或系統存儲器的自舉(即平時使用的序列槽ISP下載下傳功能也失效),JTAG調試相關的功能被禁止,選項位元組也不能被修改。它僅支援從内部FLASH自舉時對内部FLASH及SRAM的通路(讀寫、擦除)。

由于設定了級别2後無法降級,也無法通過JTAG、序列槽ISP等方式更新程式,是以使用這個級别的保護時一般會在程式中預留"後門"以更新應用程式,若程式中沒有預留後門,晶片就無法再更新應用程式了。所謂的"後門"是一種IAP程式(In Application Program),它通過某個通訊接口擷取将要更新的程式内容,然後利用内部FLASH擦寫操作把這些内容燒錄到自己的内部FLASH中,實作應用程式的更新。

此級别設定要特别小心,如果未作防護的情況下設定錯誤,可能這顆晶片就沒有法用了,特别是焊好的成品闆,可能會造成一整塊闆都報廢。

繼續閱讀