本文原創(chuàng)于http://www.CUOXin.com/humaoxiao,非法轉(zhuǎn)載者請自重!
?
硬件平臺:STM32F4 DISCOVERY開發(fā)板 型號:MB997A或MB997C主芯片型號:STM32F405xx, STM32F407xx, STM32F415xx, 或 STM32F417xx
主要參考文檔:
(1)PM0081 STM32F40xxx and STM32F41xxx Flash PRogramming manual.pdf (2)STM32F407 datasheet.pdf
?
? ? 做為嵌入式方面的開發(fā)人員,拿到一個(gè)芯片后,我們首先看它的參數(shù)指標(biāo),有多少多少容量的RAM,多少多少容量的Flash。當(dāng)然,前提是芯片自帶這兩個(gè)模塊。? ? 今天我們只研究Flash的結(jié)構(gòu):)(一)聲明? ? STM32F405xx, STM32F407xx, STM32F415xx, 和 STM32F417xx的Flash模塊都是一樣的,所以,我們在文章后面統(tǒng)一以STM32F4代表它們。(二)概覽? ? 首先來一張概覽圖吧
?
?
?
2.1 Main memory? ? Main memory部分各個(gè)Sector相加最后正合適等于1024Kbyte,這也是與文檔開頭說的Capacity up to 1 Mbyte相符的。在這個(gè)區(qū)域里主要是存儲我們用戶編寫的程序,這里你可能看到了,該片存儲區(qū)地址是從0x08000000開始的,這也就是為什么我們在使用ST-Link2燒寫程序的時(shí)候,要規(guī)定起始地址是0x08000000的原因了。2.2 System memory? ? System memory區(qū)域是系統(tǒng)保留區(qū),用來在“System memory boot”模式下啟動芯片。存儲的是一段特殊的程序,叫做bootloader,通過運(yùn)行此段區(qū)域里的程序,可以對Main memory進(jìn)行重新燒寫。舉個(gè)栗子,如果我們選擇以System memory boot模式啟動,同時(shí)插上了帶有系統(tǒng)固件的U盤,那么經(jīng)過配置后,bootloader就可以讀出U盤里的固件,燒寫到Main memory區(qū)域里去,怎么樣,方便吧!也就是說,給芯片重新燒寫固件,可以通過USB OTG FS的方式!神奇的功能:)2.3 OTP area
?
?
?
? ? 這段區(qū)域更是神奇,OTP是One-time programmable的縮寫,從字面上可以看出來,此段區(qū)域是一次性編程區(qū)。但是,機(jī)智的人類也有犯錯(cuò)誤的時(shí)候,萬一寫錯(cuò)了怎么辦!ST公司考慮到這一點(diǎn),在從0x1FFF7A00地址開始的16個(gè)字節(jié)是帶有“鎖”功能的字節(jié),當(dāng)你確定OTPx區(qū)域?qū)戇M(jìn)去的數(shù)據(jù)確實(shí)沒有錯(cuò)誤了,你就可以對LOCKBx地址寫入0x00,從此OTPx區(qū)域就沒法更改了。2.4 Option bytes? ? 官方文檔應(yīng)該寫錯(cuò)了吧,0x1FFFC000-0x1FFFC00F怎么會是16Kbytes呢?應(yīng)該是16bytes才對吧。
?
? ? 想要具體了解的朋友們,可以參考STM32F407 datasheet.pdf中3.1-3.9節(jié)的詳細(xì)介紹:)? ? 下一節(jié)將給大家?guī)韱游募?S的詳細(xì)解釋。
?
? ? ------------------------------------
?
? ? 大家可以+關(guān)注我的博客,以便得到最新的文章。
?
? ? ------------------------------------
?
打字不易,轉(zhuǎn)載請注明出處(http://www.CUOXin.com/humaoxiao/p/3579214.html),謝謝。
新聞熱點(diǎn)
疑難解答
圖片精選