HK32F103x/C/D/E是深圳市航順芯片技術(shù)研發(fā)有限公司推出的中大容量的F103系列芯片。作為32位MCU,大多會(huì)內(nèi)置flash以便應(yīng)用程序的存儲(chǔ)及更新,其可靠性及訪問(wèn)速度也遠(yuǎn)遠(yuǎn)優(yōu)于外部flash。
01、Flash閃存主要特性
高達(dá)512 Kbyte Flash存儲(chǔ)器
存儲(chǔ)器結(jié)構(gòu):
◆主閃存模塊:512Kbyte,該存儲(chǔ)塊劃分為256(Page)×2Kbyte
◆選項(xiàng)字節(jié)有256個(gè)字
閃存的接口特征:
◆帶預(yù)取緩沖器的讀接口
◆選擇字節(jié)加載器
◆閃存編程/擦除操作
◆訪問(wèn)/寫保護(hù)
◆低功耗模式
Flash空間由32位寬的存儲(chǔ)單元組成,既可以存代碼又可以存數(shù)據(jù)。主閃存塊有256頁(yè)(每頁(yè)2Kbyte)。模塊如下表所示:

02、Flash寫和擦除操作
Flash擦寫模塊處理Flash的編程和擦除,它包含12個(gè)32位的寄存器。在產(chǎn)品的整個(gè)工作電壓范圍內(nèi)支持執(zhí)行Flash編程和擦除操作。該操作由下列12個(gè)寄存器完成:
●Flash關(guān)鍵字寄存器(FLASH_KEYR)
●Flash選項(xiàng)關(guān)鍵字寄存器(FLASH_OPTKEYR)
●Flash控制寄存器(FLASH_CR)
●Flash狀態(tài)寄存器(FLASH_SR)
●Flash地址寄存器(FLASH_AR)
●Flash選項(xiàng)字節(jié)寄存器(FLASH_OBR)
●Flash寫保護(hù)寄存器(FLASH_WRPR)
●Flash控制寄存器2(FLASH_ECR)
●4個(gè)編程數(shù)據(jù)寄存器(PW0~PW3)
只要CPU不訪問(wèn)Flash空間,正在執(zhí)行的Flash寫操作不會(huì)妨礙CPU的運(yùn)行。即,在執(zhí)行寫/擦除操作的同時(shí),不能對(duì)Flash取指和訪問(wèn)其數(shù)據(jù)。否則,總線訪問(wèn)將暫停。
03、對(duì)Flash空間的解鎖
復(fù)位后,F(xiàn)lash存儲(chǔ)器默認(rèn)處于受保護(hù)狀態(tài),以避免意外擦除。FLASH_CR寄存器的值通常不允許改寫,只有對(duì)FLASH_KEYR寄存器進(jìn)行解鎖操作后,才具有對(duì)FLASH_ CR寄存器的訪問(wèn)權(quán)限。解鎖操作包括以下步驟:
1.向FLASH_KEYR寄存器寫入關(guān)鍵字KEY1=0x45670123。
2.向FLASH_KEYR寄存器寫入關(guān)鍵字KEY2=0xCDEF89AB。
任何錯(cuò)誤的順序?qū)?huì)鎖死FLASH_CR直至下次復(fù)位。當(dāng)發(fā)生關(guān)鍵字錯(cuò)誤時(shí),會(huì)由總線錯(cuò)誤引發(fā)一次硬件錯(cuò)誤中斷。
●如果KEY1出錯(cuò),就會(huì)立即中斷。
●如果KEY1正確但KEY2錯(cuò)誤時(shí),就會(huì)在KEY2錯(cuò)的時(shí)刻觸發(fā)中斷。
可以對(duì)比以下該系列芯片的主要儲(chǔ)存器映射圖:

04、標(biāo)準(zhǔn)編程
Flash 存儲(chǔ)器接口會(huì)預(yù)讀待編程地址的內(nèi)容,然后判斷其是否已經(jīng)被擦除,如果不是,那么編程操作會(huì)自動(dòng)取消,并且在FLASH_SR寄存器的PGERR位上提示編程錯(cuò)誤告警。如果被編程的內(nèi)容為全零,則會(huì)例外,這時(shí)會(huì)正確編程并且不告警。
如果待編程地址所對(duì)應(yīng)的FLASH_WRPR中的寫保護(hù)位有效,同樣也不會(huì)有編程動(dòng)作,同樣也會(huì)產(chǎn)生編程錯(cuò)誤告警。編程動(dòng)作結(jié)束后,F(xiàn)LASH_SR寄存器中的EOP位會(huì)給出提示。
主Flash存儲(chǔ)器標(biāo)準(zhǔn)模式下的編程過(guò)程如下:
●半字、字編程:
1.檢查FLASH_SR中的BSY位,以確認(rèn)上次操作已經(jīng)結(jié)束。
2.置位FLASH_CR寄存器中的PG位或者FLASH_ECR的WPG位。
3.根據(jù)配置,以半字/字為單位向目標(biāo)地址寫入數(shù)據(jù)。
4.等待FLASH_SR寄存器中的 BSY 歸零。
5、讀取編程的值然后驗(yàn)證。
●雙字和四字編程:
1.檢查FLASH_SR中的BSY位,以確認(rèn)上次操作已經(jīng)結(jié)束。
2.置位FLASH_ECR寄存器中的2WPG位或者4WPG位。
3.根據(jù)配置,向PW0~PW1或者PW0~PW4寫入數(shù)據(jù)。
4.向FLASH_AR寫入待編程位置最低位置地址。
5.置位FLASH_CR寄存器中的STRT位為1。
6.等待FLASH_SR寄存器中的BSY歸零。
7.讀取編程的值然后驗(yàn)證。
注意:當(dāng) FLASH_SR中的BSY被置’1’時(shí),寫模式下的寄存器不能被讀。
Flash存儲(chǔ)器擦除
Flash存儲(chǔ)器可以按頁(yè)或半頁(yè)為單位擦除,也可以整片擦除。
頁(yè)擦除
擦除頁(yè)的步驟如下:
1.檢查FLASH_SR中的BSY位,以確認(rèn)上次操作已經(jīng)結(jié)束。
2.將FLASH_CR寄存器中的PER位置為1,以選擇按頁(yè)擦除。
3.寫FLASH_AR寄存器的FAR位,寫入待擦除頁(yè)的地址。
4.將FLASH_CR寄存器中的 STRT 位置為1,以啟動(dòng)擦除操作。
5.等待FLASH_SR中的BSY變?yōu)?,表明擦除操作完成。
6.檢查L(zhǎng)ASH_SR寄存器的EOP標(biāo)志(若Flash擦除成功會(huì)置位EOP),然后軟件清除該標(biāo)志位。
半頁(yè)擦除
Flash的半頁(yè)為1Kbyte,半頁(yè)擦除流程和頁(yè)擦除流程類似,區(qū)別在于把FLASH_ECR中的HPER位置’1’。擦除半頁(yè)的步驟如下:
1.檢查FLASH_SR寄存器中的BSY位,以確認(rèn)上次操作已經(jīng)結(jié)束。
2.將FLASH_CR寄存器中的HPER位置為1,以選擇按半頁(yè)擦除。
3.寫FLASH_AR寄存器的FAR位,寫入待擦除半頁(yè)的地址。
4.將FLASH_CR寄存器中的STRT位置為1,以啟動(dòng)擦除操作。
5.等待FLASH_SR中的BSY變?yōu)?,表明擦除操作完成。
6.檢查L(zhǎng)ASH_SR寄存器的EOP標(biāo)志(若Flash擦除成功會(huì)置位EOP),然后軟件清除該標(biāo)志位。
整片擦除
可以用整片擦除命令一次擦除整個(gè)Flash區(qū),但該命令不會(huì)影響信息塊,具體步驟如下:
1.檢查FLASH_SR寄存器的BS位,以確認(rèn)上次操作已經(jīng)結(jié)束。
2.將FLASH_CR寄存器中的MER位置為1,以選擇整片擦除。
3.將FLASH_CR寄存器中的STRT位置為1,以啟動(dòng)擦除操作。
4.等待FLASH_SR中的BSY位置0,表明整片擦除操作結(jié)束。
5.檢查FLASH_SR寄存器的EOP標(biāo)志位(如果Flash擦除成功會(huì)置位EOP),然后軟件清除該標(biāo)志位。
05、flash在寫及擦除使用過(guò)程中需要注意的地方
問(wèn)題描述:
CACHE打開的情況下,F(xiàn)LASH寫及擦除操作時(shí)產(chǎn)生錯(cuò)誤。
根本原因:設(shè)計(jì)原因。
解決方案:
在寫了FLASH->AR寄存器后,操作FLASH->CR寄存器前執(zhí)行CACHE->CTL|=0x0800指令清一下CACHE。對(duì)于HK32F103xCxDxE,我們已經(jīng)在hk32f10x_flash.c 中已經(jīng)修改。
來(lái)源:航順芯片
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
147文章
19103瀏覽量
403073 -
FlaSh
+關(guān)注
關(guān)注
10文章
1758瀏覽量
155858 -
航順芯片
+關(guān)注
關(guān)注
1文章
113瀏覽量
23695
發(fā)布評(píng)論請(qǐng)先 登錄
HK32MCU應(yīng)用筆記(二十)| HK32F103xC/D/E USB枚舉情況分析(二)
HK32MCU應(yīng)用筆記(十八)| HK32F103xC/D/E-DAC的應(yīng)用及注意事項(xiàng)
HK32MCU應(yīng)用筆記(十六)| HK32F103xC/D/E-Timer的應(yīng)用及注意事項(xiàng)
HK32MCU應(yīng)用筆記(十五)| HK32F103xC/D/E-同步注入模式下,ADC2工作狀態(tài)不能單獨(dú)配置
HK32MCU應(yīng)用筆記(十四)| HK32F103x/C/D/E-TIM1的應(yīng)用及注意事項(xiàng)
HK32MCU應(yīng)用筆記(十三)| HK32F103xC/D/E-ADC的應(yīng)用及注意事項(xiàng)
HK32MCU應(yīng)用筆記(十二)| HK32F103xC/D/E的GPIO的應(yīng)用及注意事項(xiàng)
HK32MCU應(yīng)用筆記(十一)| HK32F103xC/D/E的flash讀保護(hù)應(yīng)用及注意事項(xiàng)
HK32MCU應(yīng)用筆記(十)| HK32F103xC/D/E的ADC常規(guī)和注入通道同時(shí)觸發(fā)時(shí)的處理機(jī)制
HK32MCU應(yīng)用筆記(九)| HK32F103x8xB系列CAN的應(yīng)用解決方案
HK32MCU應(yīng)用筆記(七)| 航順HK32MCU閂鎖效應(yīng)問(wèn)題研究及預(yù)防措施
HK32MCU應(yīng)用筆記(五)| 關(guān)于應(yīng)用HK32F030延時(shí)效率問(wèn)題
HK32MCU應(yīng)用筆記(一)| HK32F030X系列在PH測(cè)量筆的應(yīng)用
HK32MCU應(yīng)用筆記(十七)| HK32F103xC/D/E-flash擦寫應(yīng)用及注意事項(xiàng)
評(píng)論