FLASH和EEROM使用【转】

最近在看代码的时候,遇到了一个使用FLASH模拟EEPROM的情况,看到这个我当时是一脸蒙蔽啊,对于一个有时候连FLASH和EEPROM都分不清的人来说,怎么可能读懂用FLASH来模拟EEPROM呢?这段程序看的真是如浏览天书一般。上网一查,原来这个作用还挺常用的。于是痛下决心,一定要搞懂这两个纸老虎。

EEPROM

1、FLASH是什么?EEPROM又是什么?

 EEPROM的全称是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable Read-Only Memory。好了,说人话,EEPROM就是一个能用来存放程序和数据的存储器。一开始并没有这种EEPROM,刚开始用的是他的太爷爷——ROM,但是ROM不能编程,出厂的时候是什么内容就永远是什么内容,不灵活。后来出现了pROM,可以自己写入一次,但是要是写错了,只能换一片,所以当时程序员要是发现自己忘写了一个分号的话......。随着科技的进步,社会主义的发展,终于出现了一种可多次擦写的epROM,但是得把芯片拿到紫外线下照一下,要是编写代码的错误率像我这么高的话,估计紫外线灯都能给他照毁了,所以还是不方便。最终终于出现了EEPROM,拯救了大批的程序员,终于可以方便的修改ROM中的程序了,妈妈再也不用担心我的学习了!现在说的EEPROM都是狭义上的EEPROM,这种ROM的特点是可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1。这是最传统的一种EEPROM,掉电后数据不丢失,可以保存100年,可以擦写100w次。具有较高的可靠性,但是电路复杂/成本也高。因此目前的EEPROM都是几十千字节到几百千字节的,绝少有超过512K的。

我们说的FLASH属于广义上的EEPROM,原来他俩是一家的啊,因为他也是电可擦除的ROM。为了区别一般的按字节为单位的擦写EEPROM,我们都叫他FLASH。

2、但是既然是一家人为什么要分开呢?仅仅是为了区别擦写方式吗?

通常,单片机里的FLASH都用于存放运行代码,在运行过程中不能改;EEPROM是用来保存用户数据,运行过程中可以改变,比如一个时钟的闹铃时间初始化设定为12:00,后来在运行中改为6:00,这是保存在EEPROM里,不怕掉电,就算重新上电也不需要重新调整到6:00。

但最大区别是其实是:FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有 FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。在芯片的内电路中,FLASH和EEPROM不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。技术上,程序存储器和非易失数据存储器都可以只用FALSH结构或EEPROM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。

3、为什么用FLASH模拟EEPROM

在许多应用场合下需要用EEPROM保存非易失性的数据,但是意法半导体为了控制成本,没有在STM32F10X系列芯片中集成EEPROM,所以我们就需要用其内部集成的FLASH通过软件模拟EEPROM来达到同样的效果。这是在别人博客里借用的一句话,其实一开始我是拒绝的,但是事实就是这样。说实话我很不喜欢他们用一些听不懂的术语。什么叫非易失性数据?能不能说人话?还得我们这些入门小白再查一遍。当计算机突然断电或意外关闭时数据不会意外丢失叫做非易失性数据!

总结 一下,EEPROM和FLASH都属于ROM,后来由于用途不同而分开,FLASH储存用户代码,EEPROM用于存放用户数据。有些芯片内部集成了FLASH和EEPROM,但是有的并没有集成EEPROM,需要片外连接,为了节省成本,有时会采用用FLASH模拟EEPROM的方法。用空间换时间。

stm32的FLASH分为主存储块和信息块。主存储块用于保存具体的程序代码和用户数据,信息块用于负责由stm32出厂是放置2KB的启动程序(Bootloader)和512B的用户配置信息区。主存储块是以页为单位划分的,一页大小为1KB。范围为从地址0x08000000开始的128KB内。

当我们选择单片机的时候,单片机的片内flash容量是一个经常提到的参数,但是我们该如何判断自己写的程序是否符合单片机的flash容量呢?上网查了一下,当我们使用keil5编写程序时,运行编译完毕后在build output框内可以看到如下信息:

Code:表示程序所占用 FLASH 的大小(FLASH)。 
RO-data:即 Read Only-data,表示程序定义的常量,如 const 类型(FLASH)。 
RW-data:即 Read Write-data,表示已被初始化的全局变量(SRAM) 
ZI-data:即 Zero Init-data,表示未被初始化的全局变量(SRAM) 
有了这个就可以知道你当前使用的 flash 和 sram 大小了,所以,一定要注意的是程序的大 小不是.hex 文件的大小,而是编译后的 Code 和 RO-data 之和。 单位:bit。所以我们这个程序的大小是

34074+798 = 34872bit = 34.1kb

原文地址:https://www.cnblogs.com/zhangbing12304/p/9855519.html

时间: 2024-10-13 01:04:11

FLASH和EEROM使用【转】的相关文章

固件空中升级(OTA)与固件二次引导的原理和设计

蓝牙固件空中升级(OTA)涉及到蓝牙无线通信.固件外存分布.固件内存分布(定制链接脚本).固件二次引导等技术,须要开发者深入理解蓝牙单芯片的存储架构.启动引导流程.外存设备驱动和产品电路设计等领域知识.完整和完美地设计和实现OTA,是一名嵌入式物联网软件project师最好的技术体现. 本文以Dialog公司研发的号称全球最低功耗蓝牙单芯片DA14580平台为基础进行分析和设计,但设计思想能够推广到其它蓝牙单芯片平台,甚至也适用于wifi固件空中升级. 一.OTA意义 固件空中升级是如此重要,在

服务器中加速BIOS启动的方法

对于用于一线的主服务器而言,年均宕机时间是衡量其稳定性的重要指标.因此,系统出现故障后,能够尽快恢复尤其重要.在现在的高端服务器中,CPU有多个,内存容量日益增加,有的多达512G甚至达到数T容量,接入的PCIE板卡也越来越多,这极大地增加了BIOS系统自检和设备扫描的时间.此外,由于传统BIOS的设计,冷启动比热启动本身就需要多耗费几倍的时间.例如,本人在一款最新的基于Intel E5双CPU的服务器上的测试表明,冷启动到GRUB需要195秒,而热启动只需要52秒.为什么冷启动比热启动需要耗费

使用华邦的SPI FLASH作为EPCS时固化NIOS II软件报错及解决方案

Altera器件有EPCS系列配置器件,其实,这些配置器件就是我们平时通用的SPIFlash,据AlteraFAE描述:"EPCS器件也是选用某家公司的SPIFlash,只是中间经过Altera公司的严格测试,所以稳定性及耐用性都超过通用的SPIFlash".就本人看来,半导体的稳定性问题绝大部分都是由本身设计缺陷造成的,而成熟的制造工艺不会造成产品的不稳定:并且,现在Altera的器件在读入配置数据发生错误时,可以重新读取SPIFlash里面的数据,所以在工艺的稳定性以及设计的可靠性

Install Adobe Flash Player 11.2 on CentOS/RHEL 7/6/5, Fedora 20/19

Adobe Flash Player are very useful for watching videos in web browser online. Without flash player most of the videos will not play in your browser. This article will help you to install Adobe flash player plugin for your browsers in CentOS 6/5, Redh

CentOS 7 Install Adobe Flash Player

From Officail Adobe Flash Site don't down (YUM )adobe-release-x86_64-1.0-1.noarch.rpm,but to download RPM(flash-plugin-11.2.202.621-release.x86_64.rpm) If you use SELinux, you will get a warn.Following the warn do the suggestion steps.It's OK! SELinu

(转)RAM、ROM、SRAM、DRAM、SSRAM、SDRAM、FLASH、EEPROM的区别

RAM(Random Access Memory) 随机存储器.存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器.这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序. 按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM). ROM(Read-Only Memory)只读存储器,是一种只能读出事先所存数据的固态半导体存储器.其特性是一旦储存资料就无法再将之改变或删除.通常

企业形象网站-------------flash全站系统

该网站使用Photoshop与Illustrator进行页面设计,使用Dreamweaver进行网页制作,使用3dsmax与 AfterEffects进行三维动画制作,使用Flash进行全部交互功能制作.

MFC里创建FLASH控件,并从内存流中载入SWF

#include <atlbase.h> extern CComModule _Module;      #include <atlcom.h> #include <oleacc.h> #include <comdef.h> #pragma comment(lib,"atl") #pragma comment(lib,"User32.lib") #import "c:\WINDOWS\system32\Mac

Flash的选择

算起来自己接触Flash接近4年了. 最开始的2.0,做按钮,做动画,做导航. 后来用3.0做动画,做相册,做毕业设计,做课件. 然后到公司做2.0的动画,模板开发,效果设计. 似乎又回到了原点. 个人是喜欢做flash相关的东西的,就像我一样喜欢设计创意. 而看到别人用上自己的作品,心中是很高兴与自豪的. 这个行业都在不停的交融淘汰. 我得找到新的方向. 选择一:游戏 选择二:3D特效. 选择三:人物动画. 对游戏开发不太感冒,故而选择3D. 加油. 版权声明:本文为博主原创文章,未经博主允许