目錄
一、從主閃存存儲器啟動(Main Flash Memory)
二、從系統存儲器啟動(System Memory)
三、從內置SRAM啟動(Embedded SRAM)
四、從外掛存儲介質啟動的實現方式
1.?存儲介質選型
2.?硬件連接
3.?引導程序(Bootloader)
4.?固件更新
5. 示例流程
6. 注意事項
一、從主閃存存儲器啟動(Main Flash Memory)
>>配置:BOOT0 = 0,BOOT1 = X(任意狀態)
>>描述:最常見的啟動方式,STM32從內置的Flash存儲器啟動。使用JTAG或SWD模式下載程序時,程序被下載到主閃存中,重啟后也從這里開始執行。
>>地址映射:主Flash的起始地址
0x0800 0000被映射到0x0000 0000
二、從系統存儲器啟動(System Memory)
>>配置:BOOT0 = 1, BOOT1 = 0
>>描述:這種啟動方式用于通過串口或其他接口下載程序到STM32的Flash中。系統存儲器是芯片內部一塊特定區域,出廠時預置了一段Bootloader程序,這段程序允許通過外部接口將代碼寫入STM32的Flash中。
>>地址映射:系統存儲器的起始地址
0x1FFF 0000被映射到0x0000 0000
三、從內置SRAM啟動(Embedded SRAM)
>>配置:BOOT0 =1,BOOT1 = 1
>>描述:這種啟動方式通常用于程序調試。因為它不需要擦寫Flash,因此速度較快。由于SRAM是易失性存儲器,掉點后數據丟失。
>>地址映射:內置SRAM的起始地址
0x2000 0000被映射到0x0000 0000
? ? ? ?通過這些啟動方式,STM32提供了靈活的編程和調試選項,滿足不同的應用需求!
四、從外掛存儲介質啟動的實現方式
1.?存儲介質選型
可以使用多種類型的外部存儲器,例如:
- SPI Flash:常用于存儲固件或數據,速度較快,易于實現。
- I2C EEPROM:適合小規模的數據存儲和字典。
- SD卡:可用于較大存儲需求,常用于數據記錄和固件更新。
2.?硬件連接
- 接口選擇:根據所用存儲介質的協議,選擇合適的接口(如SPI、I2C等)來與單片機連接。
- 電源管理:確保外部存儲器供電正常,且能在單片機啟動時保持穩定。
3.?引導程序(Bootloader)
為了實現從外部存儲器啟動,通常需要一個引導程序(Bootloader):
-
Bootloader的功能:
- 初始化外部存儲器的通信接口(如SPI或I2C)。
- 從外部存儲器讀取程序代碼。
- 將代碼加載到內存中并轉移控制權。
-
設計考慮:
- Bootloader需要確保能夠在外部存儲器內找到有效的程序代碼,常見的做法是使用特定的文件格式或簽名標識有效的固件。
- Bootloader一般會存放在單片機的中間區域,既可以執行又不會影響正常的應用代碼。
4.?固件更新
使用外部存儲啟動的一個主要應用場景是進行固件更新:
- 通過外部介質更新固件:
- 允許用戶通過SD卡或串口等方式上傳新固件。
- Bootloader在檢測到新的固件后,可以將其燒錄到內部閃存或直接運行。
5. 示例流程
- 上電或復位:單片機上電或復位,進入Bootloader。
- 外部存儲器初始化:Bootloader初始化與外部存儲器的連接。
- 讀取程序:Bootloader從外部存儲器讀取預定區域的數據,將其加載到RAM或直接從閃存執行。
- 跳轉到應用程序:Bootloader完成加載后,將控制權轉交給主應用程序。
6. 注意事項
- 時序:確保外部存儲器在單片機啟動時能夠迅速響應。
- 存儲保護:設計時要考慮存儲介質的耐久性和擦寫次數。
- 安全性:如果固件通過外部來源更新,需實現相應的安全驗證措施,防止惡意代碼注入。
通過以上這些措施,單片機能夠從外掛存儲介質中順利啟動。