nor flash、nand flash、eeprom、fram的读写特性

2023-10-12 00:30

本文主要是介绍nor flash、nand flash、eeprom、fram的读写特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文的目标读者:嵌入式硬件选型、嵌入式软件驱动编写。

1、EEPROM

eeprom容量一般为1k~2M比特,根据容量和品牌不同,价格为几毛~几十,擦写寿命一百万次左右,写入前芯片会自动执行擦除。SPI速度一般为1~20M。

读操作:指定起始地址、字节数,就可以连续读出。起始地址任意,不要求必须从页首开始, 字节数也任意,芯片会自动跨页(page)。读操作的驱动程序是很简单的。

写操作:指定起始地址、字节数,就可以连续写入。起始地址任意(页内的任意地址都可以,不要求必须从页首开始),但是,字节数受限。只能在页内写入。页的大小一般有64字节、128字节、256字节等,取决于具体型号。以一页为256字节为例,那么第0~255字节为第0页,256~511为第1页。如果你指定起始地址为0,要写入257字节,也即出现了跨页操作,那么EEPROM把第0页写满之后,写指针不会跳到第257字节处(也即不会跳到第1页的第0字节处),而是会发生回环,跳回本页的第0字节处,会导致之前写入的数据被覆盖。如果你指定起始地址为500,想写入13个字节,那么当写入到第511地址后,剩余的2个字节会被写入到第256/257地址处,发生了回环,那么此时要想避免发生跨页回环,那么写入字节数必须<=11,等这一页烧写完成不再busy之后,再指定下一页起始地址去写剩余的2个字节。

除了以上缺点以外,第2个缺点就是,每次写入数据后,都需要等几个毫秒(取决于具体型号,一般1~10ms之间),EEPROM才能把数据真正存储完成(这一过程被称为“烧写”或者“编程”)。

根据以上信息就可以知道,EEPROM的大批量写入的驱动程序,是比较麻烦的,必须要根据起始地址和字节数,来判定是否会发生跨页,以及会跨多少页。标准步骤为:
(1)根据起始地址和字节数来判定是否会跨页。
(2)如果不跨页,则直接写,流程结束。
(3)如果会跨页,则由页尾地址 - 起始地址,得到本批次要写入的字节数,把本页写满。
(4)起始地址更新为下一页的页首,重新计算剩余未写入的字节数,返回步骤(1)。

另外,每次写入前,要判定上次写入是否已完成,这一点可通过读状态寄存器的busy位来获得。

为什么EEPROM的写入操作这么复杂?因为EEPROM的写入速度很慢,所以他里面带有一个高速缓存RAM,这个缓存的大小就是page的大小(也即256字节),借助这个缓存,我们就可以通过20M的SPI把数据快速发给EEPROM,然后单片机就可以切换线程,或者切换状态机,让CPU去干别的事情,而不是把CPU都浪费在数据发送和等待上。这个缓存的存在,也就决定了EEPROM无法跨页写入,因为这个缓存全部被用在写当前PAGE上了。但是这个缓存是利大于弊的,如果没有这个缓存,那我们每发一个字节都要等待或切换线程或切换状态机,效率太低。为了解决EEPROM这个麻烦的写入问题,FRAM应运而生。

本文由【暴躁的野生猿】发表于CSDN,如有非法转载,请帮忙举报谢谢。百度搜索【CSDN暴躁的野生猿】可以找到原文。

2、FRAM

FRAM的容量和EEPROM差不多,价格比EEPROM稍贵一点点。但是写入寿命为10~100亿次以上,约等于无限寿命,且写入操作无延迟,不需要等芯片内部烧写。换句话说,它的存储速度>=SPI的速度,SPI把数据发完,他就存好了,这一特性就决定了,芯片内部不需要缓存,也就不存在跨页写入障碍了。SPI读写速度一般可达20M~40M,比EEPROM快。

有趣的是,FRAM的功能可以完全向下兼容EEPROM,所以FRAM可以直接使用eeprom的驱动程序,而不用做任何改动。但是这么做的话,相当于浪费了FRAM的性能,因为FRAM的写入无需等待。因此,FRAM的驱动会变得非常简单。新手就可以轻松搞定。

读写操作都可直接指定字节起始地址+字节数。起始地址和字节数,都没有限制,只要不超过芯片的容量即可。

3、nor flash

容量一般为几百k~几百Mbit,128M bit(16M Byte)价格才几块,很便宜。他的SPI读写速度比FRAM还要快,可达133M以上,而且不仅支持标准SPI,还支持双、四线的SPI,相当于又变相提高了SPI的数据吞吐速度。典型型号W25Q。

读操作:和EEPROM、FRAM一样,所以驱动程序很简单。这也就表明了,nor flash每一个字节都有唯一的地址,这一特性使得他支持XIP功能(eXecute In Place,程序就地执行),STM32的flash单片机就是这种。显然EEPROM和FRAM也具备XIP功能,只是同等容量下,nor价格更低,所以现在的单片机基本都选了nor flash来做存储。

写操作:有一个缺点和EEPROM一样,SPI的读写速度>存储烧写速度,所以,他里面也有一个高速RAM缓冲区,容量一般也是256字节,写操作的回环特性与EEPROM一模一样。数据从256字节缓存烧写进flash,耗时约为0.7~5ms之间。SPI发送完数据以后,必须切换任务、或线程、或状态机,来等待数据真正烧写完成,最终要通过查询状态寄存器的busy标志位来验证。

除了以上烧写延迟之外,他比eeprom还多了一个缺点:就是写入前,必须要通过SPI给芯片发命令,先擦除,擦完以后才能写入。这个缺点是由FLASH的特性决定得,flash在烧写时,二进制位只能由1变0,而不能由0变1,所以由0变1的过程,只能由擦除命令来做。

擦除方式有3种:按扇区擦sector、按块擦block、芯片全擦chip。

 扇区大小一般为4KB,块一般为32K/64K,下图是经典型号W25Q的烧写时间和擦除时间表:

上表中的4种擦除方式,分别对应一个不同的SPI擦除命令。

4、nand flash

不支持就地执行,因为nand里面,没有字节地址,要想执行nand里存储的程序,必须把程序复制到RAM,RAM的每一个字节都有地址,然后CPU就可以从RAM中取指,执行代码了。

nand flash容量都很大,一般为128M~4G,它只有块地址,读写都必须按块进行。所以它适用于大容量存储。

这篇关于nor flash、nand flash、eeprom、fram的读写特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191933

相关文章

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

详解Tomcat 7的七大新特性和新增功能(1)

http://developer.51cto.com/art/201009/228537.htm http://tomcat.apache.org/tomcat-7.0-doc/index.html  Apache发布首个Tomcat 7版本已经发布了有一段时间了,Tomcat 7引入了许多新功能,并对现有功能进行了增强。很多文章列出了Tomcat 7的新功能,但大多数并没有详细解释它们

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

关于使用cspreadsheet读写EXCEL表格数据的问题

前几天项目有读写EXCEL表格的需求,我就找了大概有几种,大致分为:COM方法、ODBC方法、OLE方法、纯底层格式分析方法。由于COM方法要求必须安装有OFFICE的EXCEL组件,纯底层格式分析方法又很多功能需要自行去完善,所有最终选择了数据库的方法,用数据库的方法去存取xls格式的数据。网上有一个高手写的CSpreedSheet,看了一下提供的接口,感觉挺好用的。在使用的过程中发现几个