AVR单片机中的EEPROM

来源:本站
导读:目前正在解读《AVR单片机中的EEPROM》的相关信息,《AVR单片机中的EEPROM》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《AVR单片机中的EEPROM》的详细说明。
简介:EEPROM在一个PAGE内是可以任意写的,FLSAH则必须先擦除成BLANK,然后再写入,而一般没有单字节擦除的功能,至少一个扇区擦除。

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 <avr/eeprom.h>,部分读写函数如下:

#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数据

使用示例:

/*----------------------------------------------------------------------------- *  从EEPROM中读取配置信息 *----------------------------------------------------------------------------*/uint8_t read_EEPROM_config(void){    factory_mode               = eeprom_read_byte ( (uint8_t  *)0x10 );    short_address              = eeprom_read_word ( (uint16_t *)0x11 );    transmit_power_DBM_uin     = eeprom_read_byte ( (uint8_t  *)0x13 );    pan_id                     = eeprom_read_word ( (uint16_t *)0x14 );    channel_page               = eeprom_read_byte ( (uint8_t  *)0x16 );    channel                    = eeprom_read_byte ( (uint8_t  *)0x17 );    return 1;}/*------------------------------------------------------------------------------ * 将从串口读出的配置信息存放于EEPROM中 *-----------------------------------------------------------------------------*/uint8_t write_EEPROM_config(void){    eeprom_write_byte ( (uint8_t  *)0x10,factory_mode );    eeprom_write_word ( (uint16_t *)0x11,short_address );    eeprom_write_byte ( (uint8_t  *)0x13,transmit_power_DBM_uin );    eeprom_write_word ( (uint16_t *)0x14,pan_id );    eeprom_write_byte ( (uint8_t  *)0x16,channel_page );    eeprom_write_byte ( (uint8_t  *)0x17,channel );    return 1;}

通过串口向单片机发送配置命令,单片机收到指令后,利用函数write_EEPROM_config()将相应的配置信息存放于EEPROM中。系统初始化时,利用函数read_EEPROM_config()从EEPROM中取出相应的数据,用于系统的初始化。

提醒:《AVR单片机中的EEPROM》最后刷新时间 2024-03-14 01:08:21,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《AVR单片机中的EEPROM》该内容的真实性请自行鉴别。