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

day13 flash

1. 存储器的概念

        存储器指的是若干个存储单元的集合,每个存储单元都可以存储若干个二进制数,为了方便的操作存储单元,就为每个存储单元都分配了地址,就可以通过寻址来访问存储单元。

        由于计算机的处理的数据量较大,并且运算速度都很快,就要求存储器的容量更大,并且存取数据的速度更快。

2. 存储器的分类

一般存储器按照功能划分可以分为两种:  只读存储器(ROM)      随机存储器(RAM)

只读存储器(ROM):内容只能读出不能写入
◦ 掩模ROM
◦ 可编程ROM(PROM)
◦ 可擦除PROM(EPROM)
◦ 电可擦除PROM(EEPROM)
◦ 闪存(Flash Memory)

随机存取存储器(RAM):可以随机读写,存取时间与存储位置无关
◦ 静态RAM(SRAM)
◦ 动态RAM(DRAM)

2.1只读存储区

只读存储器也被称为ROM(Read Only Memory),在正常工作时只可以读取数据,不能随意修改ROM中的数据。为了提供工作效率以及降低成本,所以只读存储器也经历几个阶段的发展:ROM ---> PROM--->EPROM--->EEPROM--->Flash

优点:结构简单,并且掉电不丢失                                     缺点:只适用于固定数据的存储

1. 掩模ROM(MASK ROM)

  • 时间:1950年代

  • 特点数据在制造时固化,不可修改,灵活性差。

  • 应用:早期计算机、游戏卡带等固定程序存储15。

2. 可编程ROM(PROM)

  • 时间:1956年(由华裔科学家周文俊发明)

  • 特点允许用户编程一次,但无法擦除,写错则报废。

  • 应用:导弹制导系统、工业控制设备15。

3. 可擦除可编程ROM(EPROM)

  • 时间:1971年(英特尔推出C1702)

  • 特点可通过紫外线擦除并重新编程,但需要专用设备。

  • 应用:早期微控制器、嵌入式系统开发16。

4. 电可擦除可编程ROM(EEPROM)

  • 时间:1972年(日本电工实验室发明)

  • 特点支持电擦除,无需紫外线,可逐字节修改。

  • 应用:BIOS存储、参数配置存储18。

5. 闪存(Flash Memory)

  • 时间:1980年(舛冈富士雄发明)

  • 特点

    • NOR Flash:支持随机访问,适合存储代码(如BIOS)。

    • NAND Flash:高密度、低成本,适用于大容量存储(如SSD、U盘)。

  • 应用:智能手机、固态硬盘、SD卡等18。

2.2随机存储器

        随机存储器也称随机读/写存储器,简称RAM。在RAM工作时可以随时从任何一个指定地址读出数据,也可以随时将数据写人任何一个指定的存储单元中去。它的最大优点是读写方便,使用灵活。但是它也存在数据易失性的缺点(即一旦停电以后所存储的数据将随之丢失)。RAM又分为静态随机存储器SRAM和动态随机存储器DRAM两大类。

3. 内部Flash使用

STM32F407芯片内部的Flash容量具有512KB,必须要了解内部flash内存分布,如下图所示

需要注意:该芯片只有3128KB的扇区可以使用,对扇区进行访问或者擦除时,需要计算出扇区的起始地址以及结束地址。

另外,用户程序一般都是下载到Flash闪存空间中的,一般从Flash闪存的扇区0开始存储

注意,用户在存储自定义数据的时候,尽量先从Flash闪存的后面的扇区进行操作,避免对用户程序造成影响。

4、 内部Flash的流程

如果用户打算对Flash空间进行编程或者擦除,对应的流程可以参考帮助手册以及文件注释

• Flash解锁

• Flash擦除

需要注意,在擦除扇区之前,需要设置编程/擦除的并行位数(字节、字、半字、双字),决定了擦除的时间。

如果在擦除扇区的过程中打算跳转到下一个扇区,需要对扇区号进行计算和偏移(+8)

打算对扇区进行擦除操作,可以调用函数库中提供的函数接口来选择擦除某个扇区或者擦除所有扇区,如下图所示

函数原型

FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange) 函数参数

参数一:FLASH_Sector        需要擦除的扇区号   如 FLASH_Sector_0  ~  FLASH_Sector_11

参数二:VoltageRange        需要擦除的并行位数 如 VoltageRange_3  以字(32bit)为单位

返回值  返回lFlash的操作状态    如  FLASH_COMPLETE  标志操作完成

• Flash写入

需要注意,在写入扇区之前,需要设置编程/擦除的并行位数(字节、字、半字、双字),决定了写入的时间。

Flash闪存往某个扇区写入数据的操作流程如下

打算对扇区进行写入操作,可以调用函数库中提供的函数接口来选择把数据写入某个扇区

函数原型 FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data)

函数参数 参数一: Address        指的是准备写入数据的扇区地址    

参数二: Data        指的是准备写入的数据内容

返回值  返回lFlash的操作状态    如  FLASH_COMPLETE  标志操作完成

• Flash上锁

        如果已经完成Flash扇区的数据写入,为了防止出现意外状况导致扇区数据出现丢失等问题,则需要重新开启Flash寄存器的写保护功能。

• Flash读取

如果已经把数据写入到Flash扇区的某个地址下,则可以通过访问扇区对应的地址空间来读取对应的数据,这里就设计到C语言的地址访问,可以通过指针进行操作。操作如下图所示:

注意:读取扇区地数据的时候扇区地址需要进行偏移,并且要访问符合扇区地址范围的空间。

http://www.xdnf.cn/news/16273.html

相关文章:

  • 根据字符串数组的顺序重新排序 List顺序
  • 基于深度学习的肺癌肿瘤细胞图像识别与分类系统
  • Node.js 版本兼容问题:minimatch@10.0.3和minio@7.0.28 冲突的解决
  • 图机器学习(20)——欺诈交易检测算法
  • 阿里视频直播解决方案VS(MediaMTX + WebRTC) 流媒体解决方案
  • 从零构建:Jenkins与Kubernetes集成的完整指南
  • 10分钟搭建脚手架:Spring Boot 3.2 + Vue3 前后端分离模板
  • 【C# 找最大值、最小值和平均值及大于个数和值】2022-9-23
  • nat. metab.(IF=20.8)|北医三院徐明教授团队:TGR5抑制脂肪酸摄取预防糖尿病性心肌病的机制新解
  • Spark 之 DataFrame
  • GEMINUS 和 Move to Understand a 3D Scene
  • ElasticSearch基础数据查询和管理详解
  • 7月23日华为机考真题第一题100分
  • 实验室信息管理系统的设计与实现/实验室管理系统
  • Prometheus介绍
  • C/C++中的内存管理
  • [Linux入门] Linux 文件系统与日志分析入门指南
  • arm64架构开发板上调用奥比中光深度摄像头用于视觉测距
  • 判断矩形能否放入多边形内——cad c# 二次开发实现
  • 初识opencv02——图像预处理1
  • 软硬件协同仿真和验证的标准接口协议SCE-MI简介
  • Spring语法2
  • HTML5 网页游戏设计开发——1、HTML基础
  • PowerShell自动化核对AD与HR系统账户信息实战指南
  • 趣玩-Ollama-Llm-Chatrbot
  • Flask框架全面详解
  • DeepSeek Janus Pro本地部署与调用
  • 技术速递|使用 Semantic Kernel 与 A2A 协议构建多智能体解决方案
  • 三大论坛联动,2025合成生物学盛会助力生物制造高质量发展
  • AI安全“面壁计划”:我们如何对抗算法时代的“智子”封锁?