jsp是做網(wǎng)站后臺的嗎樂陵seo外包
最近搞MCU,發(fā)現(xiàn)它與SOC之間存在諸多差異,不能沿用SOC上一些技術(shù)理論。本文以STM L4為例,總結(jié)了一些STM32 小白入門指南。
標(biāo)題MCU沒有DDR?
是的。MCU并沒有DDR,而是讓代碼存儲在nor flash上,臨時變量和棧運行在SRAM上。之所以這么做是因為MCU的cpu頻率很低,都是幾十MHZ到一二百MHZ,nor flash的讀取速度能夠滿足cpu 的取指需求,但nor flash 的寫入速度很慢,所以引入了SRAM 作為臨時變量和棧的運行空間。
標(biāo)題STM32啟動方式
STM32提供三種上電后的引導(dǎo)方式:從 flash引導(dǎo)啟動,從 system memory引導(dǎo)啟動 和 從 SRAM引導(dǎo)啟動。
從 flash引導(dǎo)啟動就是加載 flash里面的 bin文件,運行用戶燒錄后的固件程序。
從 system memory啟動是去運行MCU出廠自帶的一塊 ROM程序,該程序可稱作為bootloader,提供通過串口、I2C、SPI或者USB去燒錄flash,防止flash擦除后變磚,也可以用來實現(xiàn)MCU OTA,但要想用起來還需要遵從通訊協(xié)議開發(fā)上位機程序。STM32 Cube Programmer應(yīng)該也是利用這段程序,完成 flash燒錄的。
從 SRAM啟動,比較難理解,SRAM不是掉電易失嗎?怎么還能引導(dǎo)啟動?既然SRAM是掉電易失,那就要寫入程序后不掉電,直接切換跳轉(zhuǎn)運行,所以該模式主要用來做在線仿真,使用場景比較小眾。
這三種啟動方式的選擇是通過外部的BOOT0 pin或者 nSWBOOT0 option bit配置選擇的。
但如果boot配置為flash啟動,但flash又為空怎么辦?這個ST也已經(jīng)考慮到了,在這種情況下,檢查發(fā)現(xiàn)flash為空,cpu轉(zhuǎn)頭會去運行system memory程序,所以你會發(fā)現(xiàn)即使flash沒程序,上電后某些GPIO仍然被配置了,其實這就是內(nèi)部ROM程序運行導(dǎo)致的后果。詳細內(nèi)容參看官方文檔: AN2606。
分析一下內(nèi)存地址表:
可以發(fā)現(xiàn),CPU上電后是從地址 0開始運行的,但地址0 處存放的是什么代碼?取決于BOOT configuration,不同的BOOT configuration會導(dǎo)致不同代碼映射到0 地址處。
Flash memory的地址范圍是0x08000000 ~ 0x08020000,所以 該MCU所支持掛載的最大flash容量為0x20000 byte,即128KB。flash的燒錄地址也只能在這個范圍選擇。
標(biāo)題STM32 OTA實現(xiàn)方案
標(biāo)題方案一:bootloader + AB分區(qū)
該方案把flash分為三個區(qū):bootloader、A分區(qū)、B分區(qū)。
bootloader分區(qū)代碼不參與升級,只負責(zé)引導(dǎo)分區(qū)和升級檢查。A和B 分區(qū)大小需要一致,里面是需要OTA的業(yè)務(wù)邏輯代碼。升級時,將升級固件寫入A或B分區(qū),重啟之后,bootloader根據(jù)A B分區(qū)的版本號跳轉(zhuǎn)到最新的版本分區(qū)代碼運行。這樣做的好處是:1、無感升級,不需要進專門的燒錄模式,可以在正常業(yè)務(wù)運行的情況下升級寫入flash。2、不會變磚,即使升級寫入flash失敗,依然存在上一個版本的固件可以使用,安全性高。
缺點:flash容量需求大。
標(biāo)題方案二:bootloader + A分區(qū)
該方案可節(jié)省一個分區(qū),對flash壓力很小。升級燒錄邏輯放在 bootloader,app在接收到升級請求后跳轉(zhuǎn)執(zhí)行到bootloader代碼,bootloader進行數(shù)據(jù)接收和flash燒錄,完成后,跳轉(zhuǎn)執(zhí)行app程序,升級完成。
該方案適用性好,畢竟很少會因為OTA,而閑置一半的 flash空間。此模式需要MCU處于燒錄模式,燒錄失敗后,無法正常運行,只能重新嘗試升級燒錄。
標(biāo)題方案三:直接利用system memory分區(qū)進行升級
與方案二的區(qū)別就是不用寫bootloader代碼,直接重啟利用boot pin引導(dǎo)進入system memory分區(qū),利用里面的ROM代碼進行flash燒寫。缺點就是需要配置boot pin重啟,風(fēng)險大,且bootloader是官方固化提供的,無法修改,使用不方便,但也是一條路子。參考文檔:AN3155。