產(chǎn)品詳情
5 、Flash 存儲(chǔ)器(Flash)
5.1 簡介
Flash 存儲(chǔ)器連接在 AHB 總線上,由 Flash 控制器統(tǒng)一管理,可對存儲(chǔ)器執(zhí)行取指、讀取、編程和擦除操作,并具有安全訪問機(jī)制和讀寫保護(hù)等功能。
5.2 Flash 主要特性
l 高達(dá) 128 KB 的用戶存儲(chǔ)空間
- 塊大小:16 KB
- 頁大?。?12 字節(jié)
l 32-bits 位寬讀取/寫入
l 支持頁擦除、塊擦除、批量擦除
l 可配置 3 種讀出保護(hù)等級(RDP)
l 2 塊可配置的代碼讀出保護(hù)區(qū)域(PCROP)
l 2 塊可配置的寫入保護(hù)區(qū)域(WRP)
l 可配置大小的用戶安全存儲(chǔ)區(qū)域
5.3 Flash 功能描述
5.3.1 Flash 存儲(chǔ)器組成
Flash 存儲(chǔ)器按 32-bits 位寬執(zhí)行讀寫訪問,可存儲(chǔ)指令和數(shù)據(jù)。
Flash 存儲(chǔ)器的組成如下:
l User flash 區(qū):用于存儲(chǔ)用戶程序和數(shù)據(jù),存儲(chǔ)空間為 128KB,分成 8 個(gè)
塊(Block),每個(gè)塊包含 32 個(gè)頁(Page),每頁 512 字節(jié);
l System memory 區(qū):用于存儲(chǔ) Bootloader 和算法 API,存儲(chǔ)空間為14KB;
l Option bytes 區(qū):用于存儲(chǔ)外設(shè)和存儲(chǔ)器保護(hù)配置的選項(xiàng)字節(jié);
l Engineer 區(qū):用于存儲(chǔ) UID、TS/BGR 校準(zhǔn)值;
l OTP 區(qū):一次性可編程區(qū)域,共 512 字節(jié)。
5.3.2 Flash 讀取訪問等待周期
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 讀取訪問等待周期的對應(yīng)關(guān)系見 下表。
為保證 Flash 讀取訪問不出現(xiàn)異?;蝈e(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]位域后,必須對 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]位域后,必須對 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.3 Flash 解鎖
為防止 Flash 被意外修改,增加了保護(hù)措施,必須向特定寄存器寫入密鑰,才能解鎖相關(guān)功能的配置權(quán)限。
5.3.3.1 Flash 控制寄存器解鎖
復(fù)位后,Flash 控制寄存器(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 寄存器已解鎖。解鎖完成后,才能對 FLASH_CR 寄存器進(jìn)行配置。
注意:FLASH_CR 寄存器中與選項(xiàng)字節(jié)相關(guān)的控制位(OBL_LAUNCH 和 OPTSTRT), 必須在 Flash 選項(xiàng)字節(jié)解鎖后才能進(jìn)行配置。 密鑰必須嚴(yán)格按照順序?qū)懭?,如果出現(xiàn)以下情況,將產(chǎn)生總線錯(cuò)誤同時(shí)觸發(fā) HardFault 中斷,直到再次復(fù)位后,才能重新對 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í),對 FLASH_CR 寄存器的寫入將無效,FLASH_SR 寄存器中的 PESERR 標(biāo)志將置 1,Flash 當(dāng)前操作將繼續(xù)正常執(zhí)行。
5.3.3.2 Flash 選項(xiàng)字節(jié)解鎖
復(fù)位后,F(xiàn)lash 選項(xiàng)字節(jié)處于寫保護(hù)鎖定狀態(tài),所有的選項(xiàng)字節(jié)加載寄存器、
FLASH_CR 寄存器中的 OBL_LAUNCH 位和 OPTSTRT 位,都會(huì)被寫保護(hù)。要對選項(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é)已解鎖。解鎖完成后,才能對選項(xiàng)字節(jié)加載寄存器及其控制位(OBL_LAUNCH 和 OPTSTRT)進(jìn)行配置。
密鑰必須嚴(yán)格按照順序?qū)懭耄绻霈F(xiàn)以下情況,將產(chǎn)生總線錯(cuò)誤同時(shí)觸發(fā)
HardFault 中斷,直到再次復(fù)位后,才能重新對 Flash 選項(xiàng)字節(jié)進(jìn)行解鎖:
l 向 FLASH_OPTKEY 寄存器寫入錯(cuò)誤的密鑰值;
l 解鎖順序錯(cuò)誤,先向 FLASH_OPTKEY 寄存器寫入密鑰 2:0x7C31 1F5A;
l 解鎖后繼續(xù)向 FLASH_OPTKEY 寄存器寫入任意值(包括密鑰);
l 在對 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.3 Flash 掉電控制位解鎖
復(fù)位后,Flash 訪問控制寄存器(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 位已解鎖。解鎖完成后,可對 PDEN 位進(jìn)行配置。密鑰必須嚴(yán)格按照順序?qū)懭?,如果出現(xiàn)以下情況,將產(chǎn)生總線錯(cuò)誤同時(shí)觸發(fā) HardFault 中斷,直到再次復(fù)位后,才能重新對 PDEN 位進(jìn)行解鎖操作:
l 向 FLASH_PDKEY 寄存器寫入錯(cuò)誤的密鑰值;
l 解鎖順序錯(cuò)誤,先向 FLASH_PDKEY 寄存器寫入密鑰 2:0x9A2D 827C;
l 解鎖后繼續(xù)向 FLASH_PDKEY 寄存器寫入任意值(包括密鑰);
l 在對 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.4 Flash 功耗管理
為進(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 才允許對 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)上電。
沈陽芯碩科技有限公司是華大電子專業(yè)代理商,有技術(shù)問題可咨詢芯虎論壇