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

Flash模拟EEPROM原理浅析

        根据ST的手册,我们可以看到,外挂EEPROM和Dflash模拟EEPROM,区别如下:

        很明显,模拟EEprom的写入速度要远远快于外挂eeprom(有数据传输机制);

        其次,外挂EEPROM不需要擦除即可实现写入数据;而模拟EEProm需要写之前擦除,由于Flash编程和擦除操作是相当长的时间,电源故障和其他可能中断擦除过程的异常事件(如重置)需要在设计Flash内存管理软件时考虑。

1.模拟EEPROM实现原理

        模拟EEPROM需要考虑产品要求和Flash IP特性;ST提出了一种方法,需要NVM中两组Flash page。

        第一组page在最初已经被擦除了,用于存储新的数据,Flash编程操作按照地址递增进行;一旦第一组page被数据填充满,该page就需要进行数据垃圾回收(即擦除);

        第二组page仅用于收集第一组page中的有效数据,并且剩余的区域可以用于存储新的数据;一旦第一组的有效数据传给了第二组,第一组page就可以被擦除了。

        注意,每一组page都可以由多个flash page构成。每个page的前32byte(64byte)用于存储当前page状态;状态共有5种,如下:

状态

描述

备注

ERASED

该page为空,没有存储数据

RECEIVE

当前page从其他已满的page中接收数据

ACTIVE

当前page用于存储新数据

VALID

Page已满;该状态会一直持续到有效数据传递给接收page完成

ERASING

有效数据已经传完,当前page准备擦除

以下图为例,

        初始时刻,第一组page中page0,page1状态分别为ACTIVE(没有满,可以继续存储新数据),ERASED(空状态),第二组page中page2、3为ERASED;

        当写入一个完整page+1大小数据时,Page0状态变为VALID(已经满了,该写page1了),page状态变为ACTIVE,为什么page0状态没有变为ERASING?原因在于第一组page还没有满,相当于逻辑的page没有满(用户可见),实际的page满了(flash的物理page存满了);因为第一组page没有满,所以第二组page还是ERASED状态;

        当page1也写满时,第一组page全部写满,那么此时第二组page中的page2状态变为RECEIVE(正在接收有效数据)(这里有效数据如何定义),数据是按flash地址排列,因此最开始page3状态不变(因为page2还没有写满);

        如果有效数据超过1个page(物理),那么page2状态会变为VALID,page3变为ACTIVE;

        当擦除完成后,软件得到flash 擦除完成标志位,第一组page状态均变为ERASED。

上图为状态迁移流程图。

2.Page和存储数据格式

        根据STM32描述,大部分的最小写入位宽为64bit(128bit for STM32U5),且因为表示状态的HEADER为4个double words(32bytes=4*8byte )(STM为8个word),因此如果一个芯片物理page大小为2K,那么可以写入252个元素(252*8 = 2*1024 - 32)数据,相当于一个元素就占用了8个byte,为什么要这样设计?参见下文的CRC

        Page状态通过如下格式来定义(以4个word为例)

状态

ERASED

0x FFFF FFFF FFFF FFFF

RECEIVE

0x xxxx FFFF FFFF FFFF

ACTIVE

0x FFFF yyyy FFFF FFFF

VALID

0x FFFF FFFF zzzz  FFFF

ERASING

0x FFFF FFFF FFFF aaaa

        每个变量元素都由一个虚拟地址和一个存储在Flash中的数据值定义,以供后续检索或更新。在实际使用中,有可能虚拟地址为16bit,数据长度8bit、16bit或者32bit。当数据被修改时,与同一虚拟地址相关联的修改后的数据被存储在一个新的flash位置中。数据检索返回最新的数据值。数据格式如下:

3.Demo

现有如下变量需要存储到flash中,

        很明显,现只需要两个page即可完成模拟。

        数据读访问是从ACTIVE或者VALID page从高地址向低地址开始读取。

        如果数据是在给定的虚拟地址上最新写入的数据,并且使用CRC的完整性检查通过,则认为数据有效。还要注意,在数据传输机制中只复制有效数据。

4.数据粒度管理

        需要存储到模拟EEPROM的数据通常应用需求决定,例如传感器、通信接口数据;

        常见的数据粒度有:byte、half-word、word。

        这里可以思考Fee如何实现数据空间位置优化?

5.磨损均衡算法和Flash page 分配

        磨损均衡算法监控以及平均分配了flash page写和擦除操作的使用频率;

        没有磨损均衡算法之前,page使用频率不会相同;例如有些数据会经常更新(例如DTC),而一些数据则不会频繁更新(例如VIN码等),很明显、存DTC的Flash会经常擦写、而存VIN这些DID的会很久或者几乎不会修改。那么磨损均衡算法就是来解决这种矛盾,保证flash所有page的所有可用擦写次数都得到利用。

        所有在3Demo章节中,采用了按照地址递增的方式进行数据存储,不管用户存的变量是什么,当一个page满了之后,再保存有效数据到下个page,擦除当前页;

        可以这么理解,现在要存3个DTC和1个DID,磨损均衡算法都首先用active的page进行存储,DID存放之后不怎么变化,但是DTC每次上下电都有可能存储,因此会继续沿着当前page地址递增存储DTC,直到该page存满。

        磨损均衡算法提高模拟EEPROM使用寿命,

        在知道了模拟EEPROM的要求大小和目标使用次数,就有可能计算出用于该目的的Flash大小。

6.计算所需要的模拟EEPROM内存空间大小

        那么如何计算,参考如下公式

        假设现在要存放4000个独立byte,已知当前flash endurance = 10kcycles,目标为100kcycle,每一个page可以存储252个8byte的元素;

        故需要4000/252≈16个page;因此一组page个数为32,再加上需要100kcycle的耐久度,所以还需要乘以10,故总共需要的size为32*10=320个page;

        注:这里的page为实际的物理sector。

        如果是按CS的DFLASH来算,一个sector(page)=1K。一个page可以存124个元素;故存4000个独立byte,需要4000/124 = 33个sector,那么要实现模拟EEPROM,就至少需要66*10=660个sector;我们的DFLASH大小明显不符合要求;故需要重新设计存储数据格式。

相关文章:

Flash模拟EEPROM原理浅析

根据ST的手册,我们可以看到,外挂EEPROM和Dflash模拟EEPROM,区别如下: 很明显,模拟EEprom的写入速度要远远快于外挂eeprom(有数据传输机制); 其次,外挂EEPROM不需要擦除即可实现写入数据&#xf…...

Typora 最新激活方法

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,其目标是实现易读易写。而Typora则是一个非常不错的Markdown编辑器,它的界面非常的简洁直观,并且功能各…...

jenkins如何安装?

docker pull jenkins/jenkins:lts-centos7-jdk8 2.docker-compose.yml version: 3 services:jenkins:image: jenkins/jenkins:lts-centos7-jdk8container_name: my-jenkinsports:- "8080:8080" # 映射 Jenkins Web 界面端口volumes:- jenkins_home:/var/jenkins_h…...

从零开始的LINUX(三)

bc:进行浮点数运算 uname:查看当前的操作系统 ctrlc:中止当前正在执行的程序 ctrld:退出xshell shutdown:关机 reboot:重启 shell外壳: 作用:1、命令解释(将输入的程序…...

CleanMyMac2024永久免费版Mac系统磁盘清理工具

Cleanmymac对很多用户来说已经非常熟悉了,因为在网上如果你搜寻有关清理mac系统方面的软件时,占比非常多的会是cleanmymac的相关消息。许多刚从Windows系统转向Mac系统怀抱的用户,一开始难免不习惯,因为Mac系统没有像Windows一样的…...

HashSet 元素不重复

HashSet通过底层使用HashMap来保证元素不重复。具体来说,HashSet内部维护一个HashMap,其中元素存储在HashMap的key上,而所有的value都指向同一个共享的内部对象。在存储元素时,HashSet会根据元素的hashCode值来确定其在HashMap中的…...

基于SpringBoot的二手车交易系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 商家管理 公告信息管理 论坛管理 商家功能实现 汽车管理 汽车留言管理 论坛管理 用户功能实现 汽车信息 在线论坛 公告信息 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 如今社会上各行…...

最短路径:迪杰斯特拉算法

简介 英文名Dijkstra 作用&#xff1a;找到路中指定起点到指定终点的带权最短路径 核心步骤 1&#xff09;确定起点&#xff0c;终点 2&#xff09;从未走过的点中选取从起点到权值最小点作为中心点 3&#xff09;如果满足 起点到中心点权值 中心点到指定其他点的权值 < 起…...

基于UDP/TCP的网络通信编程实现

小王学习录 今日鸡汤Socket套接字基于UDP来实现一个网络通信程序DatagramSocket类DatagramPacket类基于UDP的服务器端代码基于UDP的客户端代码基于TCP来实现一个网络通信程序ServerSocket类Socket类基于TCP的服务器端代码基于TCP的客户端代码优化之后的服务器端代码补充TCP长短…...

springboot启动报错

...

Python中的split()函数

函数&#xff1a;split() Python中有split()和os.path.split()两个函数&#xff0c;具体作用如下&#xff1a; split()&#xff1a;拆分字符串。通过指定分隔符对字符串进行切片&#xff0c;并返回分割后的字符串列表&#xff08;list&#xff09; os.path.split()&#xff1a…...

大数据-玩转数据-Python Sftp Mysql 数据

一、需求描述 1、从Mysql数据库表下载数据到服务器&#xff1b; 2、将数据已csv文件格式存储并对数据格式进行处理&#xff08;添加表头&#xff0c;表头和数据均用竖线分隔符隔开&#xff0c;末尾也加分割符&#xff09;&#xff1b; 3、文件路径文件夹以天为单位&#xff0c…...

Selenium3-当元素通过@FindBy获取时,返回元素为null

报错: 在获取元素的js属性时一直获取不到&#xff0c;报空指针&#xff0c;定位到元素时&#xff0c;发现是FindBy的元素没有找到 解决方法: 在page类的构造函数中加上了 界面初始化&#xff0c;让元素先隐式加载&#xff0c;这样就不会出现返回元素为空的情况辣 PageFactory…...

JWT详解解读读

&#x1f4d1;前言 本文主要是jwt解读文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&#xff1a;努力一点&#…...

一文详解如何从 Oracle 迁移数据到 DolphinDB

Oracle 是一个广泛使用的关系型数据库管理系统&#xff0c;它支持 ACID 事务处理&#xff0c;具有强大的安全性和可靠性&#xff0c;因此被广泛应用于各种企业级应用程序。但是&#xff0c;随着数据规模的增加和业务需求的变化&#xff0c;Oracle 的一些限制和缺点也逐渐暴露出…...

负载均衡--Haproxy

haproxy 他也是常用的负载均衡软件 nginx 支持四层转发&#xff0c;七层转发 haproxy也可以四层和七层转发 haproxy&#xff1a;法国人开发的威利塔罗在2000年基于C语言开发的一个开源软件 可以支持一万以上的并发请求 高性能的tcp和http负载均衡2.4 1.5.9 haproxy&#…...

股票价格预测 | 融合CNN和Transformer以提升股票趋势预测准确度

一 本文摘要 股票价格往往很难预测,因为我们很难准确建模数据点之间的短期和长期时间关系。卷积神经网络(CNN)擅长找出用于建模短期关系的局部模式。然而,由于其有限的观察范围,CNN无法捕捉到长期关系。相比之下,Transformer可以学习全局上下文和长期关系。本文提出了一…...

QMI8658A_QMC5883L(9轴)-EVB 评估板

1. 描述 QMI8658A_QMC5883L(9轴)-EVB 评估板是一款功能强大的9轴IMU传感器&#xff0c;它利用了QMA8658A 内置的3轴加速度计和3轴陀螺仪&#xff0c;同时结合QMC5883L的3轴地磁数据&#xff0c;来测量物体在三维空间中的角速度和加速度&#xff08;严格意义上的IMU只为用户提供…...

vue2+antd——实现动态菜单路由功能——基础积累

vue2antd——实现动态菜单路由功能——基础积累 实现的需求&#xff1a;效果图&#xff1a;登录接口处添加以下代码loadRoutes方法内容如下&#xff1a; 最近在写后台管理系统&#xff0c;遇到一个需求就是要将之前的静态路由改为动态路由&#xff0c;使用的后台框架是&#xf…...

代码随想录算法训练营第三十八天丨 动态规划part01

动态规划理论基础 动态规划刷题大纲 什么是动态规划 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&a…...

Agent工作流卡顿、循环、幻觉频发?Lindy官方未公开的3层诊断协议首次披露

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Agent工作流卡顿、循环、幻觉频发&#xff1f;Lindy官方未公开的3层诊断协议首次披露 当Agent在真实业务链路中反复重试同一动作、陷入状态闭环&#xff0c;或输出与上下文明显矛盾的“幻觉响应”&…...

福特技术复兴:用户体验整合如何重塑汽车行业竞争格局

1. 福特的技术复兴之路&#xff1a;一次深度拆解十年前&#xff0c;当大多数传统汽车制造商还在为金融危机后的生存而挣扎时&#xff0c;福特汽车做出了一个在当时看来颇具前瞻性的决定&#xff1a;将技术&#xff0c;而非仅仅是马力或造型&#xff0c;作为品牌复兴的核心驱动力…...

OpenClawWatch:本地优先的AI智能体监控工具,实现成本、安全与行为全链路追踪

1. 项目概述&#xff1a;为什么我们需要一个“本地优先”的AI智能体监控工具&#xff1f;如果你正在开发或运行能够自主执行任务的AI智能体&#xff0c;比如自动处理邮件、调用API、操作文件&#xff0c;甚至进行线上交易&#xff0c;那么你肯定经历过这样的焦虑时刻&#xff1…...

luci-app-aliddns:5分钟搞定动态IP远程访问,让家庭网络永不掉线

luci-app-aliddns&#xff1a;5分钟搞定动态IP远程访问&#xff0c;让家庭网络永不掉线 【免费下载链接】luci-app-aliddns OpenWrt/LEDE LuCI for AliDDNS 项目地址: https://gitcode.com/gh_mirrors/lu/luci-app-aliddns 你是否曾经因为家庭宽带的动态IP地址而无法稳定…...

小满nestjs(第八章 控制器参数解析实战:从装饰器到业务应用)

1. 控制器参数装饰器基础入门 刚开始接触NestJS时&#xff0c;最让我困惑的就是如何优雅地获取前端传递的参数。传统Express开发中我们需要手动从req对象里提取数据&#xff0c;而NestJS提供的一系列参数装饰器简直就像开了外挂。记得我第一次用Query()直接拿到URL参数时&#…...

Book118文档下载器:3步免费获取完整PDF文档的终极指南

Book118文档下载器&#xff1a;3步免费获取完整PDF文档的终极指南 【免费下载链接】book118-downloader 基于java的book118文档下载器 项目地址: https://gitcode.com/gh_mirrors/bo/book118-downloader 你是否曾在Book118网站上找到急需的学习资料&#xff0c;却发现需…...

深度解析20辆电动汽车29个月真实充电数据:电池容量衰减评估与健康监测关键技术

深度解析20辆电动汽车29个月真实充电数据&#xff1a;电池容量衰减评估与健康监测关键技术 【免费下载链接】battery-charging-data-of-on-road-electric-vehicles This repository is transfered from the personal account of Dr. Zhognwei Deng (Michael Teng) 项目地址: …...

蓝桥杯嵌入式备赛:手把手教你用STM32G4的ADC读取光敏电阻(国信长天扩展板)

蓝桥杯嵌入式竞赛实战&#xff1a;STM32G4光敏电阻精准采集与优化策略 在蓝桥杯嵌入式竞赛中&#xff0c;环境光检测是高频考点之一。国信长天扩展板上的光敏电阻模块看似简单&#xff0c;但要在竞赛中稳定发挥&#xff0c;需要深入理解硬件电路设计原理、掌握ADC采集的优化技巧…...

长期使用Taotoken Token Plan套餐在项目开发中的成本控制体会

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken Token Plan套餐在项目开发中的成本控制体会 在中长期AI项目的开发实践中&#xff0c;成本的可预测性与可控性是团…...

如何高效为离线音乐库批量下载同步歌词:LRCGET工具全解析

如何高效为离线音乐库批量下载同步歌词&#xff1a;LRCGET工具全解析 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否拥有大量本地音乐文件却苦于…...