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

    文章

    1573

    浏览量

    147010
  • STM32
    +关注

    关注

    2250

    文章

    10727

    浏览量

    350441

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

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

收藏 人收藏

    评论

    相关推荐

    请问F4中配备以太网/SDRAM/硬件加密选哪款最划算?

    F4中配备以太网/SDRAM/硬件加密选哪款最划算?
    发表于 05-13 08:22

    keil5去下了官方stm32f0、f1、f4的DFP_pack,f1包里面自带stdperiph_driver,f4包里面自带HAL_driver,f0包里面为什么不带库文件?

    rt:keil5去下了官方stm32f0、f1、f4的DFP_pack,f1包里面自带stdperiph_driver,f4包里面自带HAL
    发表于 05-10 06:56

    关于STM32G473程序运行于Flash和Ram速度的疑问求解

    关于STM32G473程序运行于Flash和Ram速度问题,向大家请教一下。之前用的是F4系列的程序(没有指定ram区),移植到G473里运行后发现速度变慢了接近20us;然后尝试指定
    发表于 04-12 07:18

    STM32F4使用了rt Thread创建了F4的工程,测试过程中出现死机情况怎么解决?

    前段时间工作中,使用了rt Thread创建了F4的工程,待所有板级驱动和业务写完后开始测试产品。其中F4芯片一路串口接GPS模块,进行7*24h长期测试,测试过程中出现死机情况。再次测试仍会复现。
    发表于 04-02 06:26

    pcb翘曲的原因分析

    PCB电路板的翘曲是指在制造过程或使用中,电路板出现弯曲、扭曲或变形的现象。小编就给大家带来关于PCB翘板的相关内容
    的头像 发表于 11-21 16:21 1021次阅读

    一文了解Python的Pytest架构及相关内容

    我们首先需要知道测试一般分为四个方面的测试: 单元测试:称模块测试,针对软件设计中的最小单位——程序模块,进行正确性检查的测试工作 集成测试:称组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增测试,重点测试不同模块的接口部分 系统测试:将整个软件系统看成一个整体进行测试,包括对功能、性能以及软件所运行的软硬件环境进行测试
    的头像 发表于 11-15 10:12 386次阅读

    一文解读SCI通信的相关内容

    SCI:串行通信接口,串行通信技术的一种总称;
    的头像 发表于 11-08 10:34 3377次阅读
    一文解读SCI通信的<b class='flag-5'>相关内容</b>

    TMS320F28335学习之中断和定时器的相关内容

    本次总结为中断和定时器的相关内容。除了基本的寄存器配置,初始化,中断主要是掌握三级中断制,定时器主要关注定时器的工作原理和中断时间的设置。
    的头像 发表于 11-08 10:17 1433次阅读
    TMS320F28335学习之中断和定时器的<b class='flag-5'>相关内容</b>

    LDO相关内容介绍

    在电压转换电路中,LDO和DC-DC电路是最常用的两种方式,本篇主要介绍LDO相关内容。 LDO是线性电源的一种,它可以实现电源电压的转换,不过主要用在降压领域。它的全称是Low Dropout
    的头像 发表于 11-06 11:09 392次阅读
    LDO<b class='flag-5'>相关内容</b>介绍

    AT32F4系列FLASH擦写操作的地址偏移说明

    AT32F4系列FLASH擦写操作的地址偏移说明擦除或者编程flash 时,如果操作地址不在flash 绝对地址范围内,则操作会失败?
    发表于 10-23 08:24

    STM32的G4F4有哪些区别?

    STM32的G4F4有哪些区别
    发表于 09-25 07:38

    STM32F4简介

    产品系列概述  F1/F2/F4特征比较  突出显示的功能  引导和重映射功能  RTC校准和同步  复位和调节器功能  I2S新功能 
    发表于 09-12 07:44

    将STM32F2/F4设备系列包1.x迁移到2.x应用说明

    Keil Middleware版本6.0依赖于CMSIS驱动程序API 2.0。 您需要升级到STM32F2或F4 Device Family Pack(DFPS)版本2.x或更高版本。 这些DFP
    发表于 09-04 07:33

    STM32F407+CUBEMX+DP83848K,LED_speed黄灯上电常亮,LED_Link绿灯一直不亮是为什么?

    如题,用CUBEMX配置好RCC,ETH,LWIP相关内容后,直接生成代码编译下载,LED_Link绿灯一直不亮,MAC端网口也显示未连接
    发表于 08-08 07:53

    在 I/O 看未来 | 多设备相关内容三大更新

    作者 / 开发者关系工程师 Sara Hamilton 您是否错过了今年 Google I/O 大会上多设备相关内容的最新动态?别担心,我们将在本文为您介绍作为开发者不容错过的 Android
    的头像 发表于 07-12 17:40 297次阅读
    在 I/O 看未来 | 多设备<b class='flag-5'>相关内容</b>三大更新