当前位置: 首页 > news >正文

STM32G473之flash存储结构汇总

      STM32G4系列单片机,为32位的微控制器,理论上其内部寄存器地址最多支持4GB的命名及查找(2的32次方,地址命名为0x00000000至0xFFFFFFFF)。STM32官方对4GB的地址存储进行编号时,又分割成了8个block区域,每个block为512kb的空间,这就是block的概念。如下图block0-7的划分。

一、    Block的概念:


    
block0为作为代码区,存默认的向量表,用于存放下载的代码。系统上电后,将从该部分读取代码;
block1作为SRAM区,用于存放运行代码。系统上电后,将从Flash读取代码,放到SRAM里,CPU再从SRAM读取代码运行;
block2作为片上外设区,用于存放厂商外设寄存器。如USART,I2C等,要操作外设,即修改这里对应的外设寄存器;
        针对block0的空间区域,stm32官方根据功能用途划分出了主存储区(Main memory) 和信息块(information block)两部分。主存储器区域用于存储用户应用程序,也可以保存一些断电需要保存的数据。这个区域也就是我们常说的flash区域。信息块用于存放一些芯片的出厂信息等,一般用不到。


二、    Bank的概念:
        根据STM32官方手册,其blcok0的空间512kb区域,又可以分为2个bank区的工作模式1个bank区的工作模式,这就是bank的来历,两种工作模式读写的宽度不一样。系统可以设置DBANK位来进行工作模式的切换。默认情况下,系统工作在双bank的模式,存储空间被划分为bank1和bank2,每个bank256kb的空间大小。


三、    Page的概念:
        STM32对bank的空间再进行细分,又引入了page的概念,每个page大小为2k个字节大小。为什么要引入page的概念呢?这就涉及到flash的原理,flash存储最小的擦除单位就是页,因此在stm32系统里,针对flash的擦除方式分为页擦除(Page Erase)和Mass擦除(Mass Erase)。其中页擦除是最常用的擦除方式,适用于擦除一个页的内容。页擦除操作会将页内的所有字节清零。而mass擦除是一种擦除整个Flash存储器内容的操作,一般少用。


四、    Flash和Eeprom区别:

        Flash和Eeprom是两种不同掉电存储技术,它们在读取、写入、擦除方式等方面都有所区别。
        写入方式:Flash通常需要page进行写入,而EEPROM可以按字节进行写入。
        擦除方式:Flash一般需要按块进行擦除,而EEPROM可以按字节进行擦除。
        寿命:Flash和EEPROM的寿命取决于使用方式和应用场景。一般来说,EEPROM可以进行单独的字节单位的写入和擦除,而Flash需要进行整个页面或扇区的擦除,因此EEPROM的寿命可能会更长。
          对于stm32而言,其内部只有flash,没有EEPROM。这是其一个缺点,导致我们存储一些掉电数据时,是通过将数据保存在main memory区域,而这个区域又保存了我们程序代码,因此我们在进行掉电保存时,必须要小心,并计算好程序代码占用的空间,把掉电要保存的数据存储在离程序代码远的一些page里面。

相关文章:

  • 工业边缘计算网关在工业中的应用以及其为工业生产带来的效益-天拓四方
  • 【WebJs 爬虫】逆向进阶技术必知必会
  • SpringMVC设置全局异常处理器
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误
  • 蓝桥杯-卡片换位
  • 设计模式学习笔记 - 设计模式与范式 -结构型:7.享元模式(上):享元模式原理和应用
  • Web Components使用(一)
  • 【ZZULIOJ】1014: 求三角形的面积(Java)
  • 网络工程师实验命令(华为数通HCIA)
  • 机器学习_集成学习_梯度提升_回归_决策树_XGBoost相关概念
  • 初识C++之命名空间(namespace)
  • Java中如何恰当的表达“继承”与“扩展”的语义?
  • docker 部署 gitlab-ce 16.9.1
  • vim分屏命令
  • 包子凑数(蓝桥杯,闫氏DP分析法)
  • Android 控件背景颜色处理
  • Angular2开发踩坑系列-生产环境编译
  • angular学习第一篇-----环境搭建
  • Bytom交易说明(账户管理模式)
  • CSS实用技巧
  • ECS应用管理最佳实践
  • Laravel 菜鸟晋级之路
  • mysql_config not found
  • Netty 4.1 源代码学习:线程模型
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 山寨一个 Promise
  • 十年未变!安全,谁之责?(下)
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​香农与信息论三大定律
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 计算机视觉入门
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (day6) 319. 灯泡开关
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (排序详解之 堆排序)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (五)c52学习之旅-静态数码管
  • (循环依赖问题)学习spring的第九天
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)四层和七层负载均衡的区别
  • (转载)Google Chrome调试JS
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 回调、接口回调、 委托
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • :如何用SQL脚本保存存储过程返回的结果集
  • @hook扩展分析
  • @Not - Empty-Null-Blank
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [2010-8-30]
  • [20171102]视图v$session中process字段含义
  • [ai笔记9] openAI Sora技术文档引用文献汇总