5.3.5 User flash 區(qū)擦除操作
User flash 區(qū)支持以下擦除方式:
l 頁擦除(512 字節(jié))
l 塊擦除(16KB)
l 批量擦除(128KB)
Flash 存儲(chǔ)器在執(zhí)行擦除操作時(shí),不能同時(shí)進(jìn)行讀取操作,需要等待存儲(chǔ)器完成 擦除操作后,讀取操作才能正常進(jìn)行,擦除完成后的 Flash 數(shù)據(jù)為全 1。
5.3.5.1 User flash 區(qū)頁擦除步驟
對(duì) User flash 區(qū)進(jìn)行頁擦除操作(512 字節(jié)),可遵循以下步驟:
1) 檢查 Flash 狀態(tài)寄存器(FLASH_SR)中的 BSY 標(biāo)志,以確認(rèn)當(dāng)前沒有正在執(zhí)行的 Flash 操作;
2) 檢查 FLASH_SR 寄存器,確認(rèn)錯(cuò)誤標(biāo)志均已清除;
3) 解鎖 Flash 控制寄存器(FLASH_CR),使 LOCK 位清 0;(詳見:Flash 控 制寄存器解鎖)
4) 配置 FLASH_CR寄存器中的 ER_MODE[1:0]位域?yàn)?01,進(jìn)入頁擦除模式;
5) 配置 FLASH_CR 寄存器中的 PNB[7:0]位域,選擇待擦除區(qū)域的頁號(hào);
6) 配置 FLASH_CR 寄存器中的 ERASE 位置 1,啟動(dòng) Flash 擦除,同時(shí) BSY 標(biāo)志將自動(dòng)置 1;
7) 查詢并等待 BSY 標(biāo)志清 0,表明擦除操作已完成,此時(shí) ERASE 位也將自 動(dòng)清 0;
8) 如果要對(duì)多個(gè)頁執(zhí)行擦除操作,可重復(fù)執(zhí)行步驟 5 到 7;
9) 配置 FLASH_CR 寄存器中的 ER_MODE[1:0]位域?yàn)?00,退出擦除模式;
10) 配置 FLASH_CR 寄存器中的 LOCK 位置 1,恢復(fù) FLASH_CR 寄存器的寫保護(hù)鎖定狀態(tài)。
5.3.5.2 User flash 區(qū)塊擦除步驟
對(duì) User flash 區(qū)進(jìn)行塊擦除操作(16KB),可遵循以下步驟:
1) 檢查 Flash 狀態(tài)寄存器(FLASH_SR)中的 BSY 標(biāo)志,以確認(rèn)當(dāng)前沒有正在執(zhí)行的 Flash 操作;
2) 檢查 FLASH_SR 寄存器,確認(rèn)錯(cuò)誤標(biāo)志均已清除;
3) 解鎖 Flash 控制寄存器(FLASH_CR),使 LOCK 位清 0;(詳見:Flash 控制寄存器解鎖);
4) 配置 FLASH_CR寄存器中的 ER_MODE[1:0]位域?yàn)?10,進(jìn)入塊擦除模式;
5) 配置 FLASH_CR 寄存器中的 PNB[2:0]位域,選擇待擦除區(qū)域的塊號(hào);
6) 配置 FLASH_CR 寄存器中的 ERASE 位置 1,啟動(dòng) Flash 擦除,同時(shí) BSY 標(biāo)志將自動(dòng)置 1;7) 查詢并等待 BSY 標(biāo)志清 0,表明擦除操作已完成,此時(shí) ERASE 位也將自動(dòng)清 0;
8) 如果要對(duì)多個(gè)塊執(zhí)行擦除,可重復(fù)執(zhí)行步驟 5 到 7;
9) 配置 FLASH_CR 寄存器中的 ER_MODE[1:0]位域?yàn)?00,退出擦除模式;
10) 配置 FLASH_CR 寄存器中的 LOCK 位置 1,恢復(fù) FLASH_CR 寄存器的寫保護(hù)鎖定狀態(tài)。
5.3.5.3 User flash 區(qū)批量擦除步驟
批量擦除用于擦除整個(gè) User flash 區(qū)域(128KB),可遵循以下步驟:
1) 檢查 Flash 狀態(tài)寄存器(FLASH_SR)中的 BSY 標(biāo)志,以確認(rèn)當(dāng)前沒有正在執(zhí)行的 Flash 操作;
2) 檢查 FLASH_SR 寄存器,確認(rèn)錯(cuò)誤標(biāo)志均已清除;
3) 解鎖 Flash 控制寄存器(FLASH_CR),使 LOCK 位清 0(詳見:Flash 控制寄存器解鎖);
4) 配置 FLASH_CR 寄存器中的 ER_MODE[1:0]位域?yàn)?11,進(jìn)入批量擦除模式;
5) 配置 FLASH_CR 寄存器中的 ERASE 位置 1,啟動(dòng) Flash 擦除,同時(shí) BSY標(biāo)志將自動(dòng)置 1;
6) 查詢并等待 BSY 標(biāo)志清 0,表明擦除操作已完成,此時(shí) ERASE 位也將自動(dòng)清 0;
7) 配置 FLASH_CR 寄存器中的 ER_MODE[1:0]位域?yàn)?00,退出擦除模式;
8) 配置 FLASH_CR 寄存器中的 LOCK 位置 1,恢復(fù) FLASH_CR 寄存器的寫保護(hù)鎖定狀態(tài)。
5.3.5.4 User flash 區(qū)擦除錯(cuò)誤
在對(duì) User flash 區(qū)執(zhí)行擦除操作的過程中,可能會(huì)出現(xiàn)以下錯(cuò)誤標(biāo)志:
l Flash 操作序列錯(cuò)誤標(biāo)志 PESERR:
- 在 ERASE 位被置 1 的同時(shí),如果 ER_MODE[1:0] 位域?yàn)?00,則不會(huì)
啟動(dòng)擦除操作,錯(cuò)誤標(biāo)志 PESERR 將置 1;
- 在 ERASE 位被置 1 的同時(shí),如果待擦除的區(qū)域(PNB[7:0])超出了
Flash 的有效空間,則不會(huì)啟動(dòng)擦除操作,錯(cuò)誤標(biāo)志 PESERR 將置 1;
- 當(dāng)有錯(cuò)誤標(biāo)志(PESERR、PROGERR、SIZERR、PGAERR、WRPERR)
未被清除時(shí),配置 ERASE 位置 1,則不會(huì)啟動(dòng)擦除操作,錯(cuò)誤標(biāo)志PESERR 將置 1;
- ERASE、OPTSTRT、OBL_LAUNCH 中任意 2 個(gè)以上控制位同時(shí)置 1,
則不會(huì)啟動(dòng)對(duì)應(yīng)的操作,錯(cuò)誤標(biāo)志 PESERR 將置 1。
l 寫保護(hù)錯(cuò)誤標(biāo)志 WRPERR:
- 如果要擦除的區(qū)域受到安全保護(hù)機(jī)制的影響,包含有受保護(hù)的區(qū)域,
則不會(huì)啟動(dòng)擦除操作,F(xiàn)LASH_SR 寄存器中的 WRPERR 標(biāo)志將置 1。
5.3.6 User flash 區(qū)編程操作
對(duì) Flash 存儲(chǔ)器執(zhí)行編程操作,每次能寫入的數(shù)據(jù)長度固定為 32bits(字),不支持其他長度的數(shù)據(jù)寫入。
FLASH 存儲(chǔ)器在執(zhí)行編程操作時(shí),不能同時(shí)進(jìn)行讀取操作,需要等待存儲(chǔ)器完成編程操作后,讀取操作才能正常進(jìn)行。
與 Flash 擦除操作類似,編程操作也會(huì)受到安全保護(hù)機(jī)制的影響:
5.3.6.1 User flash 區(qū)編程操作步驟
對(duì) User flash 區(qū)進(jìn)行編程操作,可遵循以下步驟:
1) 檢查 Flash 狀態(tài)寄存器(FLASH_SR)中的 BSY 標(biāo)志,以確認(rèn)當(dāng)前沒有正在執(zhí)行的 Flash 操作;
2) 檢查 FLASH_SR 寄存器,確認(rèn)錯(cuò)誤標(biāo)志均已清除;
3) 解鎖 Flash 控制寄存器(FLASH_CR),使 LOCK 位清 0(詳見:Flash 控制寄存器解鎖);
4) 配置 FLASH_CR 寄存器中的 PG_MODE 為 1,進(jìn)入 Flash 編程模式;
5) 向 Flash 目標(biāo)地址寫入 32bits 數(shù)據(jù),寫入后 BSY 標(biāo)志將自動(dòng)置 1;
6) 查詢并等待 BSY 標(biāo)志清 0,表明編程操作已完成;7) 如果要對(duì)多個(gè)地址進(jìn)行編程,可重復(fù)步驟 5 和 6;
8) 配置 FLASH_CR 寄存器中的 PG_MODE 位為 0,退出 Flash 編程模式;
9) 配置 FLASH_CR 寄存器中的 LOCK 位置 1,恢復(fù) FLASH_CR 寄存器的寫保護(hù)鎖定狀態(tài)。
沈陽芯碩科技有限公司是華大電子專業(yè)代理商,有技術(shù)問題可咨詢芯虎論壇.