历史上的今天
今天是:2025年01月15日(星期三)
2020年01月15日 | 基于AVR单片机中的EEPROM和FLASH的区别及使用方法解析
2020-01-15 来源:eefocus
1.EEPROM介绍
Electrically Erasable Programmable Read Only Memory电气可拭除可编程只读存储器
发展过程:ROM – 》 PROM –》 EPROM –》 EEPROM
2.EEPROM和FLASH的区别
2.1 使用上的区别
FLASH用于存放程序,在程序运行过程中不能更改。我们编写的程序是烧录到FLASH中的;
RAM用作程序运行时的数据存储器;
EEPROM用于存放数据,是用来保存掉电后用户不希望丢的数据,开机时用到的参数。运行过程中可以改变。
FLASH是用于存储程序代码的,有些场合也可能用它来保存数据,当然前提是该单片机的FLASH工艺是可以自写的(运行中可擦写),但要注意FLASH的擦写次数通常小于一万次,而且通常FLASH只能按块擦除。EEPROM不能用来存程序,通常单片机的指令寻址不能到这个区域。EEPROM的擦写次数应有百万次,而且可以按字节擦写。EEPROM在一个PAGE内是可以任意写的,FLSAH则必须先擦除成BLANK,然后再写入,而一般没有单字节擦除的功能,至少一个扇区擦除。

2.2 结构上的区别
EEPROM和FLASH都是非易失性存储器。
FLASH的全称是FLASH EEPROM,但跟常规EEPROM的操作方法不同。
FLASH 和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有 FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。
3.EEPROM的使用方法
AVRGCC里面自带有EEPROM读写函数。
使用时需包含头文件#include ,部分读写函数如下:
#define eeprom_is_ready() bit_is_clear(EECR, EEWE)//检测EEPROM是否准备好。OK返回1(返回EEWE位)
#define eeprom_busy_wait() do {} while (!eeprom_is_ready())//等待EEPROM操作完成
extern uint8_t eeprom_read_byte (const uint8_t *addr);//读取指定地址的一个字节8bit的EEPROM数据
extern uint16_t eeprom_read_word (const uint16_t *addr);//读取指定地址的一个字16bit的EEPROM数据
extern void eeprom_read_block (void *buf, const void *addr, size_t n);//读取由指定地址开始的指定长度的EEPROM数据
extern void eeprom_write_byte (uint8_t *addr, uint8_t val);//向指定地址写入一个字节8bit的EEPROM数据
extern void eeprom_write_word (uint16_t *addr, uint16_t val);//向指定地址写入一个字16bit的EEPROM数据
通过串口向单片机发送配置命令,单片机收到指令后,利用函数write_EEPROM_config()将相应的配置信息存放于EEPROM中。系统初始化时,利用函数read_EEPROM_config()从EEPROM中取出相应的数据,用于系统的初始化。
史海拾趣
|
经过与各方的沟通,我的理解: (1) 中国在选择3G技术的原则:实用,不贵,等待; (2) 中国不是在刻意等待TD-SCDMA的成熟:已经有了CDMA2000技术,导致在选择WCDMA时非常犹豫,因为要和欧洲搞好关系。 (3) 我们国家差的不仅是3G,还有别的很多方 ...… 查看全部问答> |
|
UltraEdit里unicode编码格式的代码用arm-elf-gcc编译的问题,求镞 问题比较复杂,只好从头说起。 我们希望在LCD上能显示日文,韩文字符,所以要用unicode编码,我们现用的开发工具是MDK(Keil3)+arm-elf-gcc,但MDK不支持unicode编码,还好我们找到好几款能编辑unicode编码的编辑器,我们打算选用 ...… 查看全部问答> |
|
单片机型号是AT89LS52 串口中断优先级最高,即IP寄存器中的串口位置为1,其他位置为0. 请问当计时器0的中断服务函数运行时(中断优先级低于串口),来了一个串口中断请求,这时候高优先级的串口中断是否可以打断正在执行的计时器0的中断服务函数 ...… 查看全部问答> |
|
1. 如何修改 systick 的优先级2. 我使用的中断group 2. Io中断 先占优先级 2 从优先级 1 如何屏蔽比他低的优先级. &nbs ...… 查看全部问答> |
|
今天再做一个BCD码转GRAY码的实验时,用ModelSim-Altera仿真时,出现了如下图所示的现象: 一:想请教大家图中红色标记类似于“毛刺”(不知道这样叫合不合适)的东东是怎么产生的?是不是我的逻辑设计有误?如何解决该问题呢? ...… 查看全部问答> |




