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

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

3天内不再提示

结合F4系列描述关于FLASH的相关内容

strongerHuang 来源:AI电堂 作者:AI电堂 2021-03-12 17:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

FLASH,指Flash Memory,是一种非易失性存储器(闪存),掉电能正常保存数据。

STM32的存储器通常包含内部SRAM、内部FLASH,部分系列还包含EEPROM。其中FLASH通常用于存储代码或数据,可被读写访问。

1

STM32 FLASH 基础内容

STM32的FLASH组织结构,可能因不同系列、型号略有不同。比如大家熟悉的STM32F1中小容量一页大小只有1K,而F1大容量一页有2K。

还比如有些系列以扇区为最小单元,有的扇区最小16K,有的128K不等。

本文主要结合F4系列来描述关于FLASH的相关内容。

1.Flash 结构

通常Flash包含几大块,这里以F40x为例:

主存储器:用来存放用户代码或数据。

系统存储器:用来存放出厂程序,一般是启动程序代码

OTP 区域:一小段一次性可编程区域,供用户存放特定的数据。

选项字节:存放与芯片资源或属性相关的配置信息。

ac77421a-82f6-11eb-8b86-12bb97331649.jpg

2.Flash 常规操作

Flash 读、写(编程)、擦除:

128 位宽数据读取

字节、半字、字和双字数据写入

扇区擦除与全部擦除

(提示:不同系列可能存在差异,比如还有字节读取,页擦除等)

Flash 读、写保护:通过配置选项字节实现。

3.Flash 容量

STM32的Flash容量出厂已经决定,可根据型号得知容量大小。

4.存储器端格式

目前STM32存储器组织结构默认为小端格式:数据的低字节保存在内存的低地址。

更多内容请查阅芯片对应的参考手册。

2

FLASH 选项字节

STM32内部Flash具有读写保护功能,想要对Flash进行读写操作,首先要去除读写保护,读写保护通过配置选项字节完成。

配置选项字节,常见两种方式:1.软件编码;2.编程工具;

1.软件编码

比如STM32F4系列标准外设库库提供函数:

void FLASH_OB_Unlock(void);void FLASH_OB_Lock(void);void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState);void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState);void FLASH_OB_PCROPSelectionConfig(uint8_t OB_PcROP);void FLASH_OB_PCROPConfig(uint32_t OB_PCROP, FunctionalState NewState);void FLASH_OB_PCROP1Config(uint32_t OB_PCROP, FunctionalState NewState);void FLASH_OB_RDPConfig(uint8_t OB_RDP);void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY);void FLASH_OB_BORConfig(uint8_t OB_BOR);void FLASH_OB_BootConfig(uint8_t OB_BOOT);FLASH_Status FLASH_OB_Launch(void);uint8_t FLASH_OB_GetUser(void);uint16_t FLASH_OB_GetWRP(void);uint16_t FLASH_OB_GetWRP1(void);uint16_t FLASH_OB_GetPCROP(void);uint16_t FLASH_OB_GetPCROP1(void);FlagStatus FLASH_OB_GetRDP(void);uint8_t FLASH_OB_GetBOR(void);

软件编码通过调用这些函数接口就可以配置选项字节。

2.编程工具

比如STM32CubeProg编程工具:

配置STM32选项字节,还可通过ST-LINK Utility、STVP等类似工具进行配置。

提示:不同型号的STM32选项字节可能略有差异。

3

FLASH 读写擦除操作

STM32内部Flash和其他外部Flash类似,支持读、写、擦除等常规操作。对内部Flash操作之前通常需要解锁、去保护等操作。

比如:

FLASH_OB_Lock();FLASH_OB_WRPConfig(OB_WRP_Sector_All, ENABLE);FLASH_OB_PCROPConfig(OB_PCROP_Sector_All, ENABLE);

1.读数据

读取内部Flash数据通常有两种方式:

通过程序(编码)读取

通过外部(编程)工具读取

程序(编码)读取:

uint32_t uwData32 = 0;uint32_t uwAddress = 0x08001000;uwData32 = *(__IO uint32_t*)uwAddress;

外部编程工具读取:读取前提:没有读保护,设置好读取地址,长度、数据宽度等。

2.写数据

往STM32内部Flash写数据和读数据类似,但写数据地址不能有数据,也就是写之前要擦除数据。

所以,相对读数据,通常写之前需要一些额外操作,比如:

FLASH_Unlock();FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);

通过工具写数据,就是我们量产时说的下载数据,正式一点说法叫编程。

3.擦除数据

擦除数据通常分擦除页、扇区、整块,擦除时间也因型号不同、速度不同有差异。

提示:该部分内容建议参考官方提供的Demo(标准外设库和HAL都有基本例程)

4

FLASH 常见问题

STM32内部Flash主要用途是存储程序代码和数据。操作内部Flash要慎重,一旦操作不当就有可能会破坏整个程序。

问题一:编程(写数据)地址非对齐

写数据时,我们要指定写入的地址,如果写入地址为非对齐,则会出现编程对齐错误。

比如:

遵循32位(4字节)地址对齐,你的地址只能是4的倍数。0x08001000正确,0x08001001错误。

提示:不同型号对齐宽度可能不同,有的32位、有的128位等。

解决办法:通过“取余”判断地址。

问题二:编程地址数据未擦除

写数据之前需要擦除对应地址数据才能正常写入,否则会出现失败。

我们擦除数据通常是页,或扇区,写入某个地址数据,就可能影响其他地址的数据,如果直接覆盖就会出现问题。

解决办法:通常的做法是读出整页(或扇区)数据并缓存,再擦除整页,再写入。

问题三:擦除时读取数据

STM32内部Flash在进行写或擦除操作时,总线处于阻塞状态,此时读取Flash数据就会出现失败。【双BANK模式除外】

解决办法:通过标志判断写/擦除操作是否完成。

问题四:电压不稳定写入失败

处于外界干扰较大的环境,供电就有暂降的可能,而对STM32内部Flash进行操作时,如果低于特定电压就会出现编程失败。

操作Flash的最低电压既与工作频率有关,也与STM32型号有关(具体需要看数据手册)。

解决办法:通过完善硬件电路保证电压稳定。电源电压不够或不稳导致隐患往往不易觉察!!

复盘一下▼FLASH 基础内容:结构、常规操作、容量、大小端格式;▼FLASH 选项字节:通过软件编码和编程工具配置;▼FLASH 读写擦除操作:常规程序读写操作、工具的读写操作;▼FLASH 常见问题:编程地址非对齐、数据未擦除、擦除同时读取数据、电压不稳定写入失败。

原文标题:STM32学习笔记 | 片内FLASH读写失败问题分析

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1715

    浏览量

    154701
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371138

原文标题:STM32学习笔记 | 片内FLASH读写失败问题分析

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    广州唯创电子WT588F02系列Flash语音芯片:可重复擦写与高效能音频解决方案

    让智能设备拥有“可定制的声音”,Flash存储技术实现语音内容自由更换在智能设备功能日益丰富的今天,语音交互已成为提升用户体验的关键要素。广州唯创电子推出的WT588F02系列
    的头像 发表于 09-28 08:05 243次阅读
    广州唯创电子WT588<b class='flag-5'>F</b>02<b class='flag-5'>系列</b><b class='flag-5'>Flash</b>语音芯片:可重复擦写与高效能音频解决方案

    TSV制造技术里的关键界面材料与工艺

    在TSV制造技术中,既包含TSV制造技术中通孔刻蚀与绝缘层的相关内容
    的头像 发表于 08-01 09:24 1584次阅读
    TSV制造技术里的关键界面材料与工艺

    STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4编程手册

    电子发烧友网站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L
    发表于 06-06 17:06 9次下载

    兆易创新推出GD5F1GM9系列高速QSPI NAND Flash

    中国北京(2025 年4 月15 日) —— 业界领先的半导体器件供应商 兆易创新 GigaDevice (股票代码 603986)宣布推出GD5F1GM9系列高速QSPI NAND Flas
    发表于 04-22 10:23 1455次阅读
     兆易创新推出GD5<b class='flag-5'>F</b>1GM9<b class='flag-5'>系列</b>高速QSPI NAND <b class='flag-5'>Flash</b>

    兆易创新推出GD5F1GM9系列高速QSPI NAND Flash

    今日,兆易创新宣布推出GD5F1GM9系列高速QSPI NAND Flash,该系列以其突破性的读取速度和创新的坏块管理(BBM)功能,可有效解决传统SPI NAND
    的头像 发表于 04-16 13:50 1057次阅读

    请问STM32G473是否支持硬件AES?

    STM32G473参考手册及数据手册中含有硬件AES相关内容及寄存器相关描述。但STM32G473xx.h中并无AES相关寄存器,pack版本已更新为最新。以地址方式直接赋值,Keil
    发表于 03-12 06:38

    使用STM32F4的ADC的时候,发现测量结果不准确,是什么原因导致的?

    请教各位大佬一个问题,我在使用STM32F4的ADC的时候,发现测量结果不准确。上网查看教程,发现F1系列有自动校准的函数,但是F4没有校准相关
    发表于 03-11 06:29

    求助,为什么ETH配置中没有Advanced Parameters?

    我观察了CubeMX12.0.1和Cube IDE1.16.1,发现在ETH中都没有Advanced Parameters选项卡,为什么?那我又该怎么设计相关内容
    发表于 03-11 06:15

    STM32H7和F4做永磁同步电机FOC控制如何选型,哪个开发更好呢?

    ,以及部分PLC的下沉功能。但是我不太了解现场总线和PLC,不知道需要预估FLASH,RAM和引脚数目多少的较为合适。请问按照这个需求,有没有工程师在H7或F4系列种有推荐的呢? 以及不知道H7是否支持STM32的电机库例程呢?
    发表于 03-07 07:21

    DLPR150PROM-2.3.1版本的固件是否包含图像信息,如何切换图像?

    DLPR150PROM-2.3.1版本的固件是否包含图像信息,如何切换图像?DLPC150 Programmer’s Guide文档没有相关内容
    发表于 02-21 06:53

    海康机器人F4系列:搬运多面手,拓宽应用场景

    海康机器人F4系列叉取机器人以其卓越的性能,成功突破了传统叉车在搬运物料上的局限性,大幅拓宽了搬运对象与场景覆盖范围。 这款叉取机器人能够应对多种高度、形态各异的物料搬运需求。无论是圆形物料、超宽
    的头像 发表于 02-19 15:23 1035次阅读

    请问DLPC FW9.0.1与FW8.0.1的差异是什么?

    。 Release Notes中,没有相关内容描述,不知道可否告知,写入到Flash内容有哪些变更,方便这边正确的修改API 我们自己的应用层,想通过版本号来兼容8.0.1与9.0
    发表于 02-18 06:50

    【新品介绍】F4系列 国产640PIN高密便携式连接器

    F4系列是腾方中科自主研发设计生产的一款小型化连接解决方案。是基于F2的基础上,增加了更多信号通道的连接,可安装4个模块,最大支持640个信号点,支持I/O混合通道模块。以及其便携式的
    的头像 发表于 02-06 09:15 1115次阅读
    【新品介绍】<b class='flag-5'>F4</b><b class='flag-5'>系列</b> 国产640PIN高密便携式连接器

    THS8200输出1080P50/60格式YPbPr视频时无信号是怎么回事?

    输入是16位YCbCr 4:2:2格式的信号,EAV/SAV同步,所有I2C配置按照参考脚本slec026a和slec026b的相关内容来设置的。 现在如果输入格式是1080P25和P30时,可以
    发表于 01-22 07:05

    晶体生长相关内容——晶型控制与衬底缺陷

    晶体生长在分析晶体生长时,我们需要考虑多个关键因素,这些因素共同影响着晶体生长的质量和进程。本文介绍了晶体生长相关内容,包括:杂对晶格硬度变化影响、碳化硅晶型控制、衬底缺陷控制和电气特性控制
    的头像 发表于 12-30 11:40 1218次阅读