產(chǎn)品詳情
1
摘要
本篇應(yīng)用筆記主要介紹如何使用 HC32F460 系列芯片的嵌入式 FLASH 讀寫數(shù)據(jù)。
2
FLASH 簡介
什么是 FLASH?
FLASH 接口通過 FLASH ICODE、DCODE、MCODE 總線對 FLASH 進(jìn)行訪問,該接口可對 FLASH 執(zhí)行編程、擦除和全擦除操作;通過緩存機(jī)制加速代碼執(zhí)行。
FLASH 的重要特征?
FLASH 讀、編程、擦除和全擦除操作,支持引導(dǎo)交換,安全保護(hù)和數(shù)據(jù)加密。
3
HC32F460 系列的 FLASH
3.1
簡介
FLASH 接口通過 FLASH ICODE、DCODE、MCODE 總線對 FLASH 進(jìn)行訪問,該接口可對FLASH 執(zhí)行編程、擦除和全擦除操作;通過指令預(yù)取和緩存機(jī)制加速代碼執(zhí)行。
3.2
說明
FLASH 讀、編程、扇區(qū)擦除和全擦除操作。CODE 總線 16Bytes 預(yù)取值,I_CODE 和 D-CODE 總線上共享 64 個緩存(128bit 寬)。支持 FLASH 低功耗讀。支持引導(dǎo)交換。支持安全保護(hù)及數(shù)據(jù)加密。容量為 512Kbytes(其中有 32bytes 為功能保留位),分為 64 個扇區(qū),每個扇區(qū)為 8KBytes。編程單位為 4Bytes,擦除單位為8KBytes。128bit 寬數(shù)據(jù)讀取。OTP(One Time Program)區(qū)域共 1020Bytes,分為 960Bytes 數(shù)據(jù)區(qū),并配有 60Bytes 的鎖存區(qū)。
3.2.1 寄存器介紹
1)
EFM_FAPRT:訪問 EFM 寄存器保護(hù)寄存器。
2)
EFM_FSTP:FLASH 停止寄存器。
3)
EFM_FRMC:讀模式寄存器??膳渲貌迦氲却芷?,緩存功能、預(yù)取指功能等。
4)
EFM_FWMC:擦寫模式寄存器。配置編程擦除模式。
5)
EFM_FSR:狀態(tài)寄存器。查看 FLASH 狀態(tài),結(jié)束標(biāo)志、錯誤標(biāo)志等。
6)
EFM_FSCLR:狀態(tài)清除寄存器。
7)
EFM_FITE:中斷許可寄存器。配置操作結(jié)束或錯誤中斷許可。
8)
EFM_FSWP:引導(dǎo)交換狀態(tài)寄存器。通過該寄存器可判斷程序復(fù)位后從扇區(qū) 0 還是扇區(qū) 1 啟動。
9) EFM_FPMTSW:FLASH 窗口保護(hù)起始地址寄存器。
10) EFM_FPMTEW:FLASH 窗口保護(hù)結(jié)束地址寄存器。
11) EFM_UQID1~3:Unique ID 寄存器。
3.2.2 工作流程介紹
3.2.2.1 寄存器解除保護(hù)和寫保護(hù)
本模塊的寄存器受 EFM_FAPRT 寄存器保護(hù),當(dāng)處于保護(hù)狀態(tài),屏蔽普通的寫操作。
-
在實際應(yīng)用中,發(fā)現(xiàn)寄存器值未寫入成功,應(yīng)首先檢查 EFM 寄存器訪問保護(hù)是否有效,
保護(hù)有效時,EFM_FAPRT 寄存器值讀出為 0x00000000。
3.2.2.2 扇區(qū)擦除
EFM 提供扇區(qū)擦除和全擦除兩種擦除方式。對 FLASH 進(jìn)行扇區(qū)擦除操作后,該扇區(qū)內(nèi)地址(8Kbytes 空間)數(shù)據(jù)刷新為全 1。
3.2.2.3 全擦除
EFM 提供扇區(qū)擦除和全擦除兩種擦除方式。對 FLASH 進(jìn)行全擦除操作后整個FLASH 區(qū)域素有地址數(shù)據(jù)刷新為全 1。
3.2.2.4 單次編程無回讀
單編程無回讀模式設(shè)定步驟如下:
3.2.2.5 單次編程回讀
單編程回讀模式是指編程結(jié)束后自動讀取編程地址并和寫入數(shù)據(jù)對比,輸出判斷一致標(biāo)志位EFM_FSR.PGMISMTCH。
單編程回讀模式設(shè)定步驟如下:
注意:
- EFM_FSR.PGMISMTCH 為 0,表示編程成功,為 1 表示該 FLASH 地址已遭破壞,永廢棄。
3.2.2.6 連續(xù)編程
當(dāng)連續(xù)對 FLASH 地址進(jìn)行編程時,推薦使用連續(xù)編程模式。連續(xù)編程模式比單編程模式可以節(jié)約時間 50%以上。連續(xù)編程模式時,頻率不能低于 12MHz。
3.2.2.7 總線保持/釋放功能
通過設(shè)定寄存器 EFM_FWMC.BUSHLDCTL 位,可設(shè)定 FLASH 編程、擦除期間,總線處于保持還是釋放狀態(tài)。
FLASH 編程、擦除指令在 FLASH 上執(zhí)行時,該控制位必須設(shè)定為 0。擦除指令在 FLASH 意外空間(例如 RAM)執(zhí)行時,可根據(jù)需求自由設(shè)定。
當(dāng) EFM_FWMC.BUSHLDCTL 為 1(即 FLASH 編程、擦除期間,總線釋放狀態(tài))時,在編程(連續(xù)編程除外)、擦除結(jié)束前(EFM_FSR.RDY=1)對 FLASH 的讀寫訪問將會被保護(hù),標(biāo)志位 EFM_FSR.BUSCOLERR 位置位。
3.2.3 一次性可編程字節(jié)(OTP)
OTP(One Time Program)區(qū)域分為 15 個 64 字節(jié)的數(shù)據(jù)塊,每塊數(shù)據(jù)對應(yīng)一個 4Bytes 的鎖存地址。
鎖存地址用于鎖存對應(yīng)的數(shù)據(jù)塊。鎖存地址數(shù)據(jù)全為 1 時,對應(yīng)的 OTP 區(qū)域數(shù)據(jù)塊可以編程;當(dāng)鎖存地址數(shù)據(jù)全為 0 時,對應(yīng)的 OTP 區(qū)域數(shù)據(jù)不可編程。
所有 OTP 數(shù)據(jù)塊和鎖存地址均無法擦除。OTP 區(qū)域的編程已封裝在 flashloader 中,用戶可以直接操作 otp 對應(yīng)地址。具體樣例請參考EFM 模塊下的 efm_otp 樣例代碼。
3.2.4 引導(dǎo)交換
EFM 提供引導(dǎo)交換功能,用戶在升級引導(dǎo)程序的時候,對扇區(qū) 0(0x00000000~0x00001FFF)進(jìn)行擦寫,如擦寫時遇到不可期的意外(掉電、復(fù)位),有可能會導(dǎo)致整個芯片不能正常啟動。引導(dǎo)交換功能可以避免這種情況。
在對扇區(qū) 0 擦除前預(yù)先把新的引導(dǎo)程序?qū)懭肷葏^(qū) 1(0x00002000~0x00003FFF),然后對 EFM地址 0x0007FFDC 進(jìn)行編程數(shù)據(jù) 0xFFFF4321,通過端子復(fù)位,實現(xiàn) CPU 從扇區(qū) 1 啟動新的引導(dǎo)程序,此時,再對扇區(qū) 0 進(jìn)行擦除,重新編程用戶程序。再次升級啟動引導(dǎo)程序時,由于保存啟動扇區(qū)交換信息的地址 0x0007FFDC 已經(jīng)被編程過了(用戶可以根據(jù)讀 FLASH 地址或者 EFM_FSWP 寄存器判斷是否使用過啟動交換功能,EFM_FSWP.FSWP = 0,表明扇區(qū) 0 和扇區(qū) 1 已經(jīng)交換,復(fù)位后從扇區(qū) 1 啟動),需對扇區(qū) 63 (0x0007E000~0x0007FFFF)進(jìn)行扇區(qū)擦除后再進(jìn)行啟動程序的升級。在對扇區(qū) 0 進(jìn)行擦除前,預(yù)先把新的引導(dǎo)程序?qū)懭肷葏^(qū) 1,然后對扇區(qū) 63 進(jìn)行擦除,通過端子復(fù)位,CPU 就從扇區(qū) 1 啟動新的引導(dǎo)程序,此時再對扇區(qū) 0 進(jìn)行擦除,重新編程新的引導(dǎo)程序。
4
樣例代碼
4.1
代碼介紹
用戶可根據(jù)上述的工作流程編寫自己的代碼來學(xué)習(xí)驗證該模塊,也可以直接通過華大半導(dǎo)體的網(wǎng)站下載到設(shè)備驅(qū)動庫(Device Driver Library, DDL)的樣例代碼并使用其中的 FLASH 的樣例進(jìn)行驗證。
4.2 代碼運行
用戶可以通過華大半導(dǎo)體的網(wǎng)站下載到 HC32F460 的 DDL 的樣例代碼(efm_simple),并配合評估用板(EV-HC32F460-LQFP100-050-V1.1)運行相關(guān)代碼學(xué)習(xí)使用 FLASH 模塊。以下部分主要介紹如何在評估板上運行 FLASH 樣例代碼并觀察結(jié)果:
-
確認(rèn)安裝正確的 IAR EWARM v7.7 工具(請從 IAR 官方網(wǎng)站下載相應(yīng)的安裝包,并參考用戶手冊進(jìn)行安裝)。
-
從華大半導(dǎo)體網(wǎng)站下載 HC32F460 DDL 代碼。
-
下載并運行 efm\ efm_simple\中的工程文件.