0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_pJlTbmA9 来源:航顺芯片 作者:航顺芯片 2023-09-18 10:58 次阅读

HK32F103x/C/D/E是深圳市航顺芯片威廉希尔官方网站 研发有限公司推出的中大容量的F103系列芯片。作为32位MCU,大多会内置flash以便应用程序的存储及更新,其可靠性及访问速度也远远优于外部flash。

01、Flash闪存主要特性

高达512 Kbyte Flash存储器

存储器结构:

◆主闪存模块:512Kbyte,该存储块划分为256(Page)×2Kbyte

◆选项字节有256个字

闪存的接口特征:

◆带预取缓冲器的读接口

◆选择字节加载器

◆闪存编程/擦除操作

◆访问/写保护

◆低功耗模式

Flash空间由32位宽的存储单元组成,既可以存代码又可以存数据。主闪存块有256页(每页2Kbyte)。模块如下表所示:

wKgaomUD54iAD4qfAAC9ciF-iIA826.png

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错的时刻触发中断。

可以对比以下该系列芯片的主要储存器映射图:

wKgZomUD542AMUD6AAJ9wuZWGHc015.png

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
    mcu
    +关注

    关注

    146

    文章

    17090

    浏览量

    350785
  • FlaSh
    +关注

    关注

    10

    文章

    1629

    浏览量

    147882
  • 航顺芯片
    +关注

    关注

    1

    文章

    105

    浏览量

    22794
收藏 人收藏

    评论

    相关推荐

    HK32MCU用笔记(二十)| HK32F103xC/D/E USB枚举情况分析(二)

    HK32MCU用笔记(二十)| HK32F103xC/D/E USB枚举情况分析(二)
    的头像 发表于 09-18 10:58 563次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(二十)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b> USB枚举情况分析(二)

    HK32MCU用笔记(十九)| HK32F103xC/D/E USB枚举情况分析

    HK32MCU用笔记(十九)| HK32F103xC/D/E USB枚举情况分析
    的头像 发表于 09-18 10:58 797次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十九)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b> USB枚举情况分析

    HK32MCU用笔记(十八)| HK32F103xC/D/E-DAC的应用及注意事项

    HK32MCU用笔记(十八)| HK32F103xC/D/E-DAC的应用及注意事项
    的头像 发表于 09-18 10:58 1053次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十八)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b>-DAC的应用及<b class='flag-5'>注意事项</b>

    HK32MCU用笔记(十六)| HK32F103xC/D/E-Timer的应用及注意事项

    HK32MCU用笔记(十六)| HK32F103xC/D/E-Timer的应用及注意事项
    的头像 发表于 09-18 10:58 756次阅读

    HK32MCU用笔记(十五)| HK32F103xC/D/E-同步注入模式下,ADC2工作状态不能单独配置

    HK32MCU用笔记(十五)| HK32F103xC/D/E-同步注入模式下,ADC2工作状态不能单独配置
    的头像 发表于 09-18 10:58 667次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十五)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b>-同步注入模式下,ADC2工作状态不能单独配置

    HK32MCU用笔记(十四)| HK32F103x/C/D/E-TIM1的应用及注意事项

    HK32MCU用笔记(十四)| HK32F103x/C/D/E-TIM1的应用及注意事项
    的头像 发表于 09-18 10:58 780次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十四)| <b class='flag-5'>HK32F103</b>x/C/<b class='flag-5'>D</b>/<b class='flag-5'>E</b>-TIM1的应用及<b class='flag-5'>注意事项</b>

    HK32MCU用笔记(十三)| HK32F103xC/D/E-ADC的应用及注意事项

    HK32MCU用笔记(十三)| HK32F103xC/D/E-ADC的应用及注意事项
    的头像 发表于 09-18 10:58 1098次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十三)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b>-ADC的应用及<b class='flag-5'>注意事项</b>

    HK32MCU用笔记(十二)| HK32F103xC/D/E的GPIO的应用及注意事项

    HK32MCU用笔记(十二)| HK32F103xC/D/E的GPIO的应用及注意事项
    的头像 发表于 09-18 10:58 911次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十二)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b>的GPIO的应用及<b class='flag-5'>注意事项</b>

    HK32MCU用笔记(十一)| HK32F103xC/D/Eflash读保护应用及注意事项

    HK32MCU用笔记(十一)| HK32F103xC/D/Eflash读保护应用及
    的头像 发表于 09-18 10:58 966次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十一)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b>的<b class='flag-5'>flash</b>读保护应用及<b class='flag-5'>注意事项</b>

    HK32MCU用笔记(十)| HK32F103xC/D/E的ADC常规和注入通道同时触发时的处理机制

    HK32MCU用笔记(十)| HK32F103xC/D/E的ADC常规和注入通道同时触发时的处理机制
    的头像 发表于 09-18 10:58 699次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(十)| <b class='flag-5'>HK32F103xC</b>/<b class='flag-5'>D</b>/<b class='flag-5'>E</b>的ADC常规和注入通道同时触发时的处理机制

    HK32MCU用笔记(九)| HK32F103x8xB系列CAN的应用解决方案

    HK32MCU用笔记(九)| HK32F103x8xB系列CAN的应用解决方案
    的头像 发表于 09-18 10:59 683次阅读

    HK32MCU用笔记(六)| HK32MCU芯片调试心得

    HK32MCU用笔记(六)| HK32MCU芯片调试心得
    的头像 发表于 09-18 10:59 776次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(六)| <b class='flag-5'>HK32MCU</b>芯片调试心得

    HK32MCU用笔记(五)| 关于应用HK32F030延时效率问题

    HK32MCU用笔记(五)| 关于应用HK32F030延时效率问题
    的头像 发表于 09-18 11:00 667次阅读

    HK32MCU用笔记(四)| 关于老版本HK32F103串口USART偶尔出现数据错误

    HK32MCU用笔记(四)| 关于老版本HK32F103串口USART偶尔出现数据错误
    的头像 发表于 09-18 11:00 1070次阅读

    HK32MCU用笔记(一)| HK32F030X系列在PH测量笔的应用

    HK32MCU用笔记(一)| HK32F030X系列在PH测量笔的应用
    的头像 发表于 09-18 11:00 1187次阅读
    <b class='flag-5'>HK32MCU</b>应<b class='flag-5'>用笔记</b>(一)| <b class='flag-5'>HK32F</b>030X系列在PH测量笔的应用