5、Flash存儲(chǔ)器(Flash)
5.1簡(jiǎn)介
Flash存儲(chǔ)器連接在AHB總線上,由Flash控制器統(tǒng)一管理,可對(duì)存儲(chǔ)器執(zhí)行取指、讀取、編程和擦除操作,并具有安全訪問機(jī)制和讀寫保護(hù)等功能。
沈陽(yáng)芯碩科技有限公司是華大電子代理商,有技術(shù)問題可咨詢我們。
5.2Flash主要特性
l高達(dá)128 KB的用戶存儲(chǔ)空間
-塊大?。?6 KB
-頁(yè)大小:512字節(jié)
l32-bits位寬讀取/寫入
l支持頁(yè)擦除、塊擦除、批量擦除
l可配置3種讀出保護(hù)等級(jí)(RDP)
l2塊可配置的代碼讀出保護(hù)區(qū)域(PCROP)
l2塊可配置的寫入保護(hù)區(qū)域(WRP)
l可配置大小的用戶安全存儲(chǔ)區(qū)域
5.3Flash功能描述
5.3.1Flash存儲(chǔ)器組成
Flash存儲(chǔ)器按32-bits位寬執(zhí)行讀寫訪問,可存儲(chǔ)指令和數(shù)據(jù)。
Flash存儲(chǔ)器的組成如下:
lUser flash區(qū):用于存儲(chǔ)用戶程序和數(shù)據(jù),存儲(chǔ)空間為 128KB,分成8個(gè)
塊(Block),每個(gè)塊包含32個(gè)頁(yè)(Page),每頁(yè)512字節(jié);
lSystem memory區(qū):用于存儲(chǔ) Bootloader和算法API,存儲(chǔ)空間為14KB;
lOption bytes區(qū):用于存儲(chǔ)外設(shè)和存儲(chǔ)器保護(hù)配置的選項(xiàng)字節(jié);
lEngineer區(qū):用于存儲(chǔ)UID、TS/BGR校準(zhǔn)值;
lOTP區(qū):一次性可編程區(qū)域,共512字節(jié)。
5.3.2Flash讀取訪問等待周期
Flash存儲(chǔ)器連接在AHB總線上,讀取Flash時(shí)使用HCLK時(shí)鐘。當(dāng)HCLK的 時(shí)鐘頻率超出Flash存儲(chǔ)器的工作頻率時(shí),就會(huì)造成數(shù)據(jù)讀取錯(cuò)誤,此時(shí)需要插入等待周期。 Flash訪問控制寄存器(FLASH_ACR)中的LATENCY[1:0]位域,用于配置Flash讀取訪問的等待周期,HCLK時(shí)鐘頻率與Flash讀取訪問等待周期的對(duì)應(yīng)關(guān)系見 下表。
為保證Flash讀取訪問不出現(xiàn)異常或錯(cuò)誤,當(dāng)要改變HCLK的時(shí)鐘頻率時(shí),必須按照特定步驟進(jìn)行配置。
l提高HCLK頻率的配置步驟:
1) 通過配置FLASH_ACR寄存器中的LATENCY[1:0]位域,增大Flash
讀取訪問的等待周期;
2) 讀取LATENCY[1:0]位域,檢查等待周期已配置成功;
3) 提高HCLK頻率,可通過配置RCC時(shí)鐘配置寄存器(RCC_CFG)
中的SYSW[2:0]位域,切換更高頻率的時(shí)鐘源,或通過配置HPRE[2:0]
位域,減小系統(tǒng)時(shí)鐘的分頻值;
4) 配置SYSW[2:0]位域后,必須對(duì)RCC_CFG寄存器中的SYSWS[2:0]
位域進(jìn)行檢查,確認(rèn)系統(tǒng)時(shí)鐘已切換完成。
l降低HCLK頻率的配置步驟:
1) 降低HCLK頻率,可通過配置RCC時(shí)鐘配置寄存器(RCC_CFG)
中的SYSW[2:0]位域,切換更低頻率的時(shí)鐘源,或通過配置HPRE[2:0]
位域,增大系統(tǒng)時(shí)鐘的分頻值;
2) 配置SYSW[2:0]位域后,必須對(duì)RCC_CFG寄存器中的SYSWS[2:0]
位域進(jìn)行檢查,確認(rèn)系統(tǒng)時(shí)鐘已切換完成;
3) 通過FLASH_ACR寄存器中的LATENCY[1:0]位域,減小Flash讀取
訪問的等待周期;
4) 讀取LATENCY[1:0]位域,檢查等待周期已配置成功。
5.3.3Flash解鎖
為防止Flash被意外修改,增加了保護(hù)措施,必須向特定寄存器寫入密鑰,才能解鎖相關(guān)功能的配置權(quán)限。
5.3.3.1Flash控制寄存器解鎖
復(fù)位后,F(xiàn)lash控制寄存器(FLASH_CR)將處于寫保護(hù)鎖定狀態(tài)。要配置
FLASH_CR寄存器,需首先進(jìn)行解鎖操作。
FLASH_CR寄存器的解鎖操作,必須嚴(yán)格按照以下步驟順序執(zhí)行:
1) 向FLASH_CRKEY寄存器寫入密鑰 1:0xE57A 1A85;
2) 向FLASH_CRKEY寄存器寫入密鑰 2:0x7C6E 8391;
3) 檢查FLASH_CR寄存器中的LOCK位,當(dāng)該位清0時(shí),表明FLASH_CR寄存器已解鎖。解鎖完成后,才能對(duì)FLASH_CR寄存器進(jìn)行配置。
注意:FLASH_CR寄存器中與選項(xiàng)字節(jié)相關(guān)的控制位(OBL_LAUNCH和OPTSTRT), 必須在 Flash選項(xiàng)字節(jié)解鎖后才能進(jìn)行配置。密鑰必須嚴(yán)格按照順序?qū)懭耄绻霈F(xiàn)以下情況,將產(chǎn)生總線錯(cuò)誤同時(shí)觸發(fā) HardFault中斷,直到再次復(fù)位后,才能重新對(duì)FLASH_CR寄存器進(jìn)行解鎖:
l向FLASH_CRKEY寄存器寫入錯(cuò)誤的密鑰值;
l解鎖順序錯(cuò)誤,先向FLASH_CRKEY寄存器寫入密鑰2:0x7C6E 8391;
l解鎖后繼續(xù)向FLASH_CRKEY寄存器寫入任意值(包括密鑰)。
將FLASH_CR寄存器中的LOCK位重新置1,能恢復(fù)FLASH_CR寄存器的寫 保護(hù)鎖定狀態(tài)。通過復(fù)位,也能使FLASH_CR寄存器恢復(fù)成寫保護(hù)鎖定狀態(tài)。
注意:當(dāng)FLASH_SR寄存器中的BSY位為1時(shí),對(duì)FLASH_CR寄存器的寫入將無(wú)效,F(xiàn)LASH_SR寄存器中的PESERR標(biāo)志將置1,F(xiàn)lash當(dāng)前操作將繼續(xù)正常執(zhí)行。
5.3.3.2Flash選項(xiàng)字節(jié)解鎖
復(fù)位后,F(xiàn)lash選項(xiàng)字節(jié)處于寫保護(hù)鎖定狀態(tài),所有的選項(xiàng)字節(jié)加載寄存器、
FLASH_CR寄存器中的OBL_LAUNCH位和OPTSTRT位,都會(huì)被寫保護(hù)。要對(duì)選項(xiàng)字節(jié)進(jìn)行更新,就先要進(jìn)行解鎖操作。
Flash選項(xiàng)字節(jié)的解鎖操作,必須嚴(yán)格按照以下步驟順序執(zhí)行:
1) 先解鎖Flash控制寄存器FLASH_CR(詳見:Flash控制寄存器解鎖);
2) 向FLASH_OPTKEY寄存器寫入密鑰 1:0x6A89 4D7B;
3) 向FLASH_OPTKEY寄存器寫入密鑰 2:0x7C31 1F5A;
4) 檢查FLASH_CR寄存器中的OPTLOCK位,當(dāng)該位清0時(shí),表明Flash選項(xiàng)字節(jié)已解鎖。解鎖完成后,才能對(duì)選項(xiàng)字節(jié)加載寄存器及其控制位(OBL_LAUNCH和OPTSTRT)進(jìn)行配置。
密鑰必須嚴(yán)格按照順序?qū)懭耄绻霈F(xiàn)以下情況,將產(chǎn)生總線錯(cuò)誤同時(shí)觸發(fā)
HardFault中斷,直到再次復(fù)位后,才能重新對(duì)Flash選項(xiàng)字節(jié)進(jìn)行解鎖:
l向FLASH_OPTKEY寄存器寫入錯(cuò)誤的密鑰值;
l解鎖順序錯(cuò)誤,先向FLASH_OPTKEY寄存器寫入密鑰2:0x7C31 1F5A;
l解鎖后繼續(xù)向FLASH_OPTKEY寄存器寫入任意值(包括密鑰);
l在對(duì)FLASH_CR寄存器解鎖前,向FLASH_OPTKEY寄存器寫入任意值
(包括密鑰)。 將FLASH_CR寄存器中的OPTLOCK位重新置1,能恢復(fù)Flash選項(xiàng)字節(jié)的寫保護(hù)鎖定狀態(tài)。通過復(fù)位,也能使Flash選項(xiàng)字節(jié)恢復(fù)成寫保護(hù)鎖定狀態(tài)。當(dāng) FLASH_CR寄存器恢復(fù)成寫保護(hù)鎖定狀態(tài)時(shí)(LOCK位置1),F(xiàn)lash選項(xiàng)字節(jié)也會(huì)被恢復(fù)成寫保護(hù)鎖定狀態(tài),OPTLOCK位將自動(dòng)置1。
5.3.3.3Flash掉電控制位解鎖
復(fù)位后,F(xiàn)lash訪問控制寄存器(FLASH_ACR)中的PDEN位將處于寫保護(hù)鎖定狀態(tài),該位用于控制Flash的掉電。要配置 PDEN位,就要先進(jìn)行解鎖操作。PDEN位的解鎖操作,必須嚴(yán)格按照以下步驟順序執(zhí)行:
1) 先解鎖FLASH控制寄存器FLASH_CR(詳見:Flash控制寄存器解鎖);
2) 向FLASH_PDKEY寄存器寫入密鑰 1:0x57D9 3AB6;
3) 向FLASH_PDKEY寄存器寫入密鑰 2:0x9A2D 827C;
4) 檢查FLASH_CR寄存器中的PDLOCK位,當(dāng)該位清0時(shí),表明PDEN位已解鎖。解鎖完成后,可對(duì)PDEN位進(jìn)行配置。密鑰必須嚴(yán)格按照順序?qū)懭?,如果出現(xiàn)以下情況,將產(chǎn)生總線錯(cuò)誤同時(shí)觸發(fā) HardFault中斷,直到再次復(fù)位后,才能重新對(duì)PDEN位進(jìn)行解鎖操作:
l向FLASH_PDKEY寄存器寫入錯(cuò)誤的密鑰值;
l解鎖順序錯(cuò)誤,先向FLASH_PDKEY寄存器寫入密鑰2:0x9A2D 827C;
l解鎖后繼續(xù)向FLASH_PDKEY寄存器寫入任意值(包括密鑰);
l在對(duì)FLASH_CR寄存器解鎖前,向FLASH_PDKEY寄存器寫入任意值(包括密鑰)。 將FLASH_CR寄存器中的PDLOCK位重新置1,能恢復(fù)PDEN位的寫保護(hù)鎖定狀態(tài)。另外通過復(fù)位,也能使 PDEN位恢復(fù)成寫保護(hù)鎖定狀態(tài)。當(dāng)FLASH_CR寄存器恢復(fù)成寫保護(hù)鎖定狀態(tài)時(shí)(LOCK位置1),PDEN位也會(huì)被恢復(fù)成寫保護(hù)鎖定狀態(tài),PDLOCK位將自動(dòng)置1。
5.3.4Flash功耗管理
為進(jìn)一步降低系統(tǒng)功耗,當(dāng)程序僅在SRAM中運(yùn)行時(shí),通過將 Flash訪問控制 寄存器(FLASH_ACR)中的PDEN位置1,能使Flash進(jìn)入Power Down狀態(tài)。在配置PDEN位前,要先進(jìn)行解鎖操作,解鎖步驟詳見:Flash掉電控制位解鎖。Flash處于Power Down狀態(tài)時(shí),可通過配置PDEN位清0,使Flash從Power Down狀態(tài)恢復(fù)成上電狀態(tài)。
注意: Flash恢復(fù)成上電狀態(tài)后,需等待 10μs才允許對(duì)Flash進(jìn)行操作。
當(dāng)進(jìn)入Stop或Standby模式時(shí),F(xiàn)lash將自動(dòng)進(jìn)入Power Down狀態(tài)。如果在進(jìn)入低功耗模式前,F(xiàn)lash處于上電狀態(tài),則在喚醒后 Flash將自動(dòng)上電。
審核編輯黃宇
-
mcu
+關(guān)注
關(guān)注
146文章
17148瀏覽量
351212 -
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120373 -
FlaSh
+關(guān)注
關(guān)注
10文章
1635瀏覽量
148031 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163842
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論