目录

在ram中运行程序

存储数据思路及实现

如何判断哪个数据是有可用的?


配套开发板请移步博主小店: 
​​​​​​​https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111debhMzSwz&ft=t&id=660179379335

在一些应用中,经常需要存储一些信息,掉电后可以保存。当然,可以外挂eeprom,flash也可以。不过呢,占用空间,资源,增加成本,设计上的难度也会增加(况且,460的flash这么大,分出来一点作为数据存储)。更具hc32f460的资料,有如下信息:

1 flash擦除的最小单元为8K bytes,最小编程单元4 bytes;

2 flash在擦除和编程期间,从flash读取的数值是不确定的(很关键)。

根据这些信息,设计思路如下:

1 选择16K的flash空间作为数据存储,两个扇区轮流使用,在擦除一个扇区完成时,数据没有写入成功,即使断电还有最近一次的数据,避免数据测地丢失的状况;

2 执行写入和擦除操作时,不能从flash执行程序,因此需要将部分程序在ram中运行,还必须关中断(自己想吧)。

下面介绍实现的具体方法(Keil开发环境):

在ram中运行程序

首先必须要解决如何在ram中运行代码,在keil中使编译的代码在ram中执行。

第一步:制作scatter文件

下面是我是用的,*(.RAM_CODE)这一句是重点,后面用到。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************LR_IROM1 0x00000000 0x00080000  {    ; load region size_regionER_IROM1 0x00000000 0x00080000  {  ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO)}RW_IRAM1 0x1FFF8000 0x0002F000  {  ; RW data*(.RAM_CODE).ANY (+RW +ZI)}
}

第二步:使用预处理指令#pragma,使代码在ram中运行。

华大直接把flash相关的函数都封装好了,但是需要修改hc32f460_efm.c,使其能在ram运行。

将需要在ram中运行的程序开始和结束的部分加上两句话,如下:

这样,函数EFM_ErasePgmCmd就会在ram中运行了。要把所有擦除和编程时调用的函数都这样处理。

当然,也可以直接把文件hc32f460_efm.c开始和结束加上这两句话,不用麻烦了,就是多占用了ram。根据自己的情况决定。

如何擦除一个扇区和编程,自己看看就行了,华大把函数都写好了。

存储数据思路及实现

储存数据的flash地址,自己定义,一定要8K对齐,假设每次存储的数据为0x100个数据。轮流写入,例如0x08100,0x08200,0x08300....当两个扇区都用完了,需要擦除上一个扇区,以此类推。

存储为0x100个数据,建议包含这些信息:校验[推荐crc16/32],存储序号[每次+1],数据有效标识等。

如何判断哪个数据是有可用的?

1 根据数据的有效标识,以及校验,判断数据是否正确;

2 根据存储序号的大小,选择序号最大的记录作为最后的记录。同时,如果需要更新,从此开始。

如果正在写入,突然断电,那么上次记录还在;如果正在擦除完一个扇区,又断电了,上次的数据还在。(杠精,怎么总是在关键时停电?)

这样是不是很安全了?

手把手教程9-2: 460使用Flash模拟EEPROM相关推荐

  1. STM32F407 内部自带FLASH 模拟 EEPROM

    STM32F407 内部自带FLASH 模拟 EEPROM 一.STM32F407自带FLASH STM32F4 本身没有自带 EEPROM,但是 STM32F4 具有 IAP(在应用编程)功能,所以 ...

  2. STM32F10x Flash 模拟 EEPROM

    STM32F10x芯片本身没有集成EEPROM,替代方案是用片上Flash来模拟EEPROM.Flash与EEPROM的区别主要是:一.EEPROM可以按位擦写,而Flash只能按块(页)擦除:二.F ...

  3. STM32CubeIDE用Flash模拟Eeprom

    目录 一.简介 1.1.开发环境 1.2.实现功能 二.擦除Flash页 三.写字节到Flash 四.从Flash读字节 一.简介 1.1.开发环境 STM32CubeIDE V1.9. 1.2.实现 ...

  4. FLASH模拟EEPROM编程

    单片机内存FLASH模拟EEPROM编程 一,简述 很多单片机本身是没有自带EEPROM,但是一般具有在应用编程(IAP:In Application Programming)功能,可以把它的内存FL ...

  5. 小猫爪:这些年遇过的Bug1-KW36 FLASH模拟EEPROM读写错误

    小猫爪:这些年遇过的Bug1-KW36 FLASH模拟EEPROM读写错误 1 背景 2 场景描述 3 分析原因 4 解决方案 1 背景 芯片型号:MKW36A512VFT4(NXP) 操作系统:Fr ...

  6. 【正点原子STM32连载】 第四十五章 FLASH模拟EEPROM实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    第四十五章 FLASH模拟EEPROM实验 STM32本身没有自带EEPROM,但是STM32具有IAP(在应用编程)功能,所以我们可以把它的FLASH当成EEPROM来使用.本章,我们将利用STM3 ...

  7. FLASH 模拟 EEPROM

    FLASH 模拟 EEPROM 一.STM32 FLASH 简介   STM32F4 的闪存模块由主存储器.系统存储器.OPT 区域和选项字节等 4 部分组成.   主存储器,该部分用来存放代码和数据 ...

  8. 【正点原子STM32连载】第四十二章 FLASH模拟EEPROM实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  9. FLASH模拟EEPROM的方法

    工业中经常使用EEPROM(电可擦除可编程存储器)来存储更新数据,为降低成本,可以使用FLASH代替. EEPROM 仿真可以通过多种方式实现,但要注意 Flash 限制和产品要求.下面详述的方法要求 ...

最新文章

  1. MySQL的datetime日期格式化,和Oracle的datetime日期格式化
  2. Vue.js组件中v-model的使用
  3. 我国5G有望引领全球 2020年前将商用
  4. css笔记——css 实现自定义按钮
  5. Python面试题大全(二):python高级语法
  6. python 工具ScreenShoot
  7. CSS基础-定位-李南江(修)
  8. jquery获取元素颜色css('color')的值返回RGB
  9. ORACLE多表关联的update语句
  10. iOS正确获取时间戳的代码
  11. VB连接ACCESS数据库
  12. 线性代数学习指导与MATLAB编程实践,线性代数学习指导与MATLAB编程实践(邵建峰)...
  13. java 实现热搜_搜索推荐系统根据用户搜索频率(热搜)排序
  14. lan和adsl是什么信号_路由器上的adsl是什么意思【图】
  15. JedisNoReachableClusterNodeException: No reachable node in cluster
  16. (轉貼)《程序员》推荐C++ 图书三人谈 (C/C++)
  17. 人机对话的梦想与AI智能音箱
  18. 电力负荷预测三篇综述总结
  19. 湮没在先秦的【文士道】精神
  20. QTableWidget中如何清空行,并保持行仍可再写入数据

热门文章

  1. 关于最新版go-cqhttp无法登录qq
  2. 三星java游戏打雪仗下载_三星拱照之驸马镇邪
  3. OSChina 周日乱弹 —— 进入读图时代
  4. python中文件的导入与导出
  5. java 返回类对象_JAVA如何实现返回不同类型的对象
  6. CentOS7安装mysql5.7.19的手顺,步骤(非常详细)
  7. vue Elementui 引入第三方icon(阿里矢量库)
  8. 2020年中国球墨铸管行业发展背景、竞争格局及政策环境分析,城市管道建设带来行业增量,新兴铸管是行业龙头「图」
  9. matlab中利用快速傅里叶变换对股票价格进行频域分析
  10. 视频怎么变成gif?快速巧妙生成动图的方法介绍