HK32MCU应用笔记(十七)| HK32F103xC/D/E-flash擦写应用及注意事项

hk32f103x/c/d/e是深圳市航顺芯片技术研发有限公司推出的中大容量的f103系列芯片。作为32位mcu,大多会内置flash以便应用程序的存储及更新,其可靠性及访问速度也远远优于外部flash。
01、flash闪存主要特性
高达512 kbyte flash存储器
存储器结构:
◆主闪存模块:512kbyte,该存储块划分为256(page)×2kbyte
◆选项字节有256个字
闪存的接口特征:
◆带预取缓冲器的读接口
◆选择字节加载器
◆闪存编程/擦除操作
◆访问/写保护
◆低功耗模式
flash空间由32位宽的存储单元组成,既可以存代码又可以存数据。主闪存块有256页(每页2kbyte)。模块如下表所示:
02、flash写和擦除操作
flash擦写模块处理flash的编程和擦除,它包含12个32位的寄存器。在产品的整个工作电压范围内支持执行flash编程和擦除操作。该操作由下列12个寄存器完成:
●flash关键字寄存器(flash_keyr)
●flash选项关键字寄存器(flash_optkeyr)
●flash控制寄存器(flash_cr)
●flash状态寄存器(flash_sr)
●flash地址寄存器(flash_ar)
●flash选项字节寄存器(flash_obr)
●flash写保护寄存器(flash_wrpr)
●flash控制寄存器2(flash_ecr)
●4个编程数据寄存器(pw0~pw3)
只要cpu不访问flash空间,正在执行的flash写操作不会妨碍cpu的运行。即,在执行写/擦除操作的同时,不能对flash取指和访问其数据。否则,总线访问将暂停。
03、对flash空间的解锁
复位后,flash存储器默认处于受保护状态,以避免意外擦除。flash_cr寄存器的值通常不允许改写,只有对flash_keyr寄存器进行解锁操作后,才具有对flash_ cr寄存器的访问权限。解锁操作包括以下步骤:
1.向flash_keyr寄存器写入关键字key1=0x45670123。
2.向flash_keyr寄存器写入关键字key2=0xcdef89ab。
任何错误的顺序将会锁死flash_cr直至下次复位。当发生关键字错误时,会由总线错误引发一次硬件错误中断。
●如果key1出错,就会立即中断。
●如果key1正确但key2错误时,就会在key2错的时刻触发中断。
可以对比以下该系列芯片的主要储存器映射图:
04、标准编程
flash 存储器接口会预读待编程地址的内容,然后判断其是否已经被擦除,如果不是,那么编程操作会自动取消,并且在flash_sr寄存器的pgerr位上提示编程错误告警。如果被编程的内容为全零,则会例外,这时会正确编程并且不告警。
如果待编程地址所对应的flash_wrpr中的写保护位有效,同样也不会有编程动作,同样也会产生编程错误告警。编程动作结束后,flash_sr寄存器中的eop位会给出提示。
主flash存储器标准模式下的编程过程如下:
●半字、字编程:
1.检查flash_sr中的bsy位,以确认上次操作已经结束。
2.置位flash_cr寄存器中的pg位或者flash_ecr的wpg位。
3.根据配置,以半字/字为单位向目标地址写入数据。
4.等待flash_sr寄存器中的 bsy 归零。
5、读取编程的值然后验证。
●双字和四字编程:
1.检查flash_sr中的bsy位,以确认上次操作已经结束。
2.置位flash_ecr寄存器中的2wpg位或者4wpg位。
3.根据配置,向pw0~pw1或者pw0~pw4写入数据。
4.向flash_ar写入待编程位置最低位置地址。
5.置位flash_cr寄存器中的strt位为1。
6.等待flash_sr寄存器中的bsy归零。
7.读取编程的值然后验证。
注意:当 flash_sr中的bsy被置’1’时,写模式下的寄存器不能被读。
flash存储器擦除
flash存储器可以按页或半页为单位擦除,也可以整片擦除。
页擦除
擦除页的步骤如下:
1.检查flash_sr中的bsy位,以确认上次操作已经结束。
2.将flash_cr寄存器中的per位置为1,以选择按页擦除。
3.写flash_ar寄存器的far位,写入待擦除页的地址。
4.将flash_cr寄存器中的 strt 位置为1,以启动擦除操作。
5.等待flash_sr中的bsy变为0,表明擦除操作完成。
6.检查lash_sr寄存器的eop标志(若flash擦除成功会置位eop),然后软件清除该标志位。
半页擦除
flash的半页为1kbyte,半页擦除流程和页擦除流程类似,区别在于把flash_ecr中的hper位置’1’。擦除半页的步骤如下:
1.检查flash_sr寄存器中的bsy位,以确认上次操作已经结束。
2.将flash_cr寄存器中的hper位置为1,以选择按半页擦除。
3.写flash_ar寄存器的far位,写入待擦除半页的地址。
4.将flash_cr寄存器中的strt位置为1,以启动擦除操作。
5.等待flash_sr中的bsy变为0,表明擦除操作完成。
6.检查lash_sr寄存器的eop标志(若flash擦除成功会置位eop),然后软件清除该标志位。
整片擦除
可以用整片擦除命令一次擦除整个flash区,但该命令不会影响信息块,具体步骤如下:
1.检查flash_sr寄存器的bs位,以确认上次操作已经结束。
2.将flash_cr寄存器中的mer位置为1,以选择整片擦除。
3.将flash_cr寄存器中的strt位置为1,以启动擦除操作。
4.等待flash_sr中的bsy位置0,表明整片擦除操作结束。
5.检查flash_sr寄存器的eop标志位(如果flash擦除成功会置位eop),然后软件清除该标志位。
05、flash在写及擦除使用过程中需要注意的地方
问题描述:
cache打开的情况下,flash写及擦除操作时产生错误。
根本原因:设计原因。
解决方案:
在写了flash->ar寄存器后,操作flash->cr寄存器前执行cache->ctl|=0x0800指令清一下cache。对于hk32f103xcxdxe,我们已经在hk32f10x_flash.c 中已经修改。
来源:航顺芯片


国民技术通用MCU用“芯”赋能智能扫地机,室内垃圾一扫光!
中芯国际透露重要信息,又一芯片难题或被解决
西门子博途:INT(整数)
开关量输入计数器数据采集WiFi模块 网页在线显示
苹果新机人脸识别iPhoneX发布会解锁失败蜜汁尴尬,屏下指纹解锁才是正解?
HK32MCU应用笔记(十七)| HK32F103xC/D/E-flash擦写应用及注意事项
现代汽车将在2024年开始为苹果生产汽车
200KV直流高压发生器技术详情
脑机接口真的能否实现?
2021年半导体行业的涨价浪潮不可避免
集线器的类型
氧指数测定仪介绍
S-MOS单元技术提高了SiC MOSFET的效率
实序列的z变换为什么会出现一对相互共轭的复数零点?
IGBT改电压法的工作原理和控制方法
二氧化硫测定仪的应用、功能及参数
ST推出STA321MP系列音频IC产品,可直接连接最新的微型麦克风
长城哈弗m6什么时候上市?哈弗m6悬浮式车顶设计,售价预计在8-12万元左右
浅谈从机械感转换到电气感的线控技术
信号完整性的定义、干扰因素及解决方法详解