ATmega88 EEPROM数据存储器

发布者:JoyfulSpirit5最新更新时间:2022-01-16 来源: eefocus关键字:ATmega88  EEPROM  数据存储器 手机看文章 扫描二维码
随时随地手机看文章

ATmega88包含512字节的EEPROM数据存储器。它是作为一个独立的数据 EEPROM 的寿命至少为 100,000 次擦除周期。 EEPROM 的访问由地址寄存器数据寄存器和控制寄存器决定。

具体的 SPI 及并行下载 EEPROM 数据请参见 P254“存储器编程”。

EEPROM 读/ 写访问

EEPROM 读/ 写访问EEPROM 的访问寄存器位于I/O 空间。

EEPROM的写访问时间由Table 3给出。自定时功能可以让用户软件监测何时可以开始写下一字节。用户操作EEPROM 需要注意如下问题:在电源滤波时间常数比较大的电路中,上电/ 下电时VCC 上升/ 下降速度会比较慢。此时CPU 可能工作于低于晶振所要求的电源电压。请参见 P20“ 防止EEPROM 数据丢失” 以避免出现EEPROM 数据丢失的问题。

为了防止无意识的EEPROM 写操作,需要执行一个特定的写时序。具体参看EEPROM控制寄存器的内容。

执行EEPROM 读操作时, CPU 会停止工作4 个周期,然后再执行后续指令;执行EEPROM 写操作时, CPU 会停止工作2 个周期,然后再执行后续指令。

EEPROM 地址寄存器- EEARH和EEARL

· Bits 15..9 – Res: 保留
保留位,读操作返回值为零。

· Bits 8..0 – EEAR8..0: EEPROM 地址
EEPROM 地址寄存器 – EEARH和EEARL指定了 512 字节的EEPROM。
EEPROM 地址是线性的,从 0 到 511 。 EEAR 的初始值没有定义。 在访问EEPROM 之前必须为其赋予正确的数据。
EEAR8 在 ATmega48 中为无效位,必须始终将其赋值为 ”0”。

EEPROM 数据寄存器 - EEDR

· Bits 7..0 – EEDR7.0: EEPROM 数据
对于EEPROM 写操作, EEDR 是需要写到EEAR 单元的数据;对于读操作, EEDR 是从地址EEAR 读取的数据。

EEPROM 控制寄存器- EECR

· Bits 7..4 – Res: 保留
保留位,读操作返回值为零。

· Bit 5, 4 – EEPM1 与 EEPM0: EEPROM 编程模式位
EEPROM编程模式位的设置决定对EEPE写入后将触发什么编程方式。EEPROM的编程可以作为一个原子操作来实现擦除老的数据并写入新的数据,也可以将擦除与写操作 分为两步进行。不同编程模式的时序请见 Table2。 EEPE 置位时,对 EEPMn 的任何写操作都将会被忽略。在复位过程中,除非 EEPROM 处于编程状态,EEPMn 位将被设置 为 0b00。

· Bit 3 – EERIE: 使能 EEPROM 准备好中断
若 SREG 的 I 为 "1",则置位 EERIE 使能 EEPROM 准备好中断。清零 EERIE 则禁止此中断。当 EEPE 清零时 EEPROM准备好中断即可发生。

· Bit 2 – EEMPE: EEPROM 写使能
EEMPE决定设置EEPE为"1“是否可以启动EEPROM写操作。当EEMPE为"1“时,在4个时钟周期内置位 EEPE 将把数据写入 EEPROM 的指定地址;若 EEMPE 为 "0“,则EEPE不起作用。EEMPE置位后4个周期,硬件对其清零。见EEPROM写过程对EEPE位的描述。
· Bit 1 – EEPE: EEPROM 写使能
写使能信号 EEPE 是 EEPROM 的写入选通信号。当 EEPROM 数据和地址设置好之后,需置位 EEPE 以便将数据写入 EEPROM。此时 EEMPE 必须置位,否则 EEPROM 写操作将不会发生。写时序如下 ( 第 3 和第 4 步的次序可更改 ):
1. 等待EEPE 位变为零
2. 等待SPMCSR 中的SPMEN 位变为零
3. 将新的EEPROM 地址写入EEAR ( 可选)
4. 将新的EEPROM 数据写入EEDR ( 可选)
5. 对EECR 寄存器的EEMPE 写"1",同时清零EEPE
6. 在置位EEMPE 的4 个周期内,置位EEPE

在 CPU 写 Flash 存储器的时候不能对 EEPROM 进行编程。 在启动 EEPROM写操作之前软件必须要检查Flash写操作是否已经完成。第二步仅在软件包含引导程序,允许CPU对 Flash 进行编程时才有用。如果 CPU 永远都不会写 Flash,则第二步可以忽略。请参考 P240“Boot Loader 支持 RWW 自编程, ATmega88 与 ATmega168”。(注意:ATmega48 无Boot Loader)

注意 : 如有中断发生于步骤 5 和 6 之间将导致写操作失败。 因为此时 EEPROM 写使能操作将超时。如果一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR或EEDR寄存器可能被修改,引起 EEPROM 操作失败。建议此时关闭全局中断标志 I。

经过写访问时间之后,EEPE硬件清零。用户可以凭此位判断写时序是否已经完成。EEPE置位后, CPU 要停止两个时钟周期才会运行下一条指令。

· Bit 0 – EERE: EEPROM 读使能
读使能信号 EERE是 EEPROM的写入选通信号。 当 EEPROM地址设置好之后,需置位EERE以便将数据读入EEAR。EEPROM数据的读取只需要一条指令。读取EEPROM时 CPU 要停止 4 个时钟周期然后才能执行下一条指令。

用户在读取EEPROM 时应该检测EEPE。如果一个写操作正在进行,就无法读取EEPROM,也无法改变寄存器EEAR。 经过校准的片内振荡器用于EEPROM定时。

标定的振荡器用于 EEPROM 访问定时。 Table3 为 CPU 访问 EEPROM的典型时间。

ATmega88 EEPROM编程时间

下面的代码分别用汇编和C函数说明如何实现EEPROM的写操作。在此假设中断不会在执行这些函数的过程当中发生。例子同时还假设软件没有引导程序。若引导程序存在,则 EEPROM 写函数还需要等待正在进行的 SPM 命令的结束。

汇编代码例程
EEPROM_write:
; 等待上一次写操作结束
sbic EECR,EEPE
rjmp EEPROM_write
; 设置地址寄存器 (r18:r17)
out EEARH, r18
out EEARL, r17
; 将数据写入数据寄存器(r16)
out EEDR,r16
; 置位EEMPE
sbi EECR,EEMPE
; 置位EEPE 以启动写操作
sbi EECR,EEPE
ret
C 代码例程
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* 等待上一次写操作结束 */
while(EECR & (1<;
/* 设置地址和数据寄存器*/
EEAR = uiAddress;
EEDR = ucData;
/* 置位EEMPE */
EECR |= (1</* 置位EEPE 以启动写操作*/
EECR |= (1<

下面的例子说明如何用汇编和C 函数来读取EEPROM,在此假设中断不会在执行这些函数的过程当中发生。

汇编代码例程
EEPROM_read:
; 等待上一次写操作结束
sbic EECR,EEPE
rjmp EEPROM_read
; 设置地址寄存器 (r18:r17)
out EEARH, r18
out EEARL, r17
; 设置EERE 以启动读操作
sbi EECR,EERE
; 自数据寄存器读取数据
in r16,EEDR
ret
C 代码例程
unsigned char EEPROM_read(unsigned int uiAddress)
{
/* 等待上一次写操作结束 */
while(EECR & (1<;
/* 设置地址寄存器*/
EEAR = uiAddress;
/* 设置EERE 以启动读操作*/
EECR |= (1</* 自数据寄存器返回数据 */
return EEDR;


在掉电休眠模式下的EEPROM写操作

若程序执行掉电指令时EEPROM的写操作正在进行,EEPROM的写操作将继续,并在指定的写访问时间之前完成。 但写操作结束后,振荡器还将继续运行,单片机并非处于完全的掉电模式。因此在执行掉电指令之前应结束EEPROM 的写操作。

防止EEPROM 数据丢失

若电源电压过低,CPU 和EEPROM 有可能工作不正常,造成EEPROM 数据的毁坏( 丢失)。这种情况在使用独立的EEPROM 器件时也会遇到。因而需要使用相同的保护方案。

由于电压过低造成EEPROM 数据损坏有两种可能:一是电压低于EEPROM 写操作所需要的最低电压;二是CPU 本身已经无法正常工作。

EEPROM 数据损坏的问题可以通过以下方法解决:
当电压过低时保持AVR RESET信号为低。这可以通过使能芯片的掉电检测电路BOD来实现。如果BOD 电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了复位,只要电压足够高,写操作仍将正常结束。


关键字:ATmega88  EEPROM  数据存储器 引用地址:ATmega88 EEPROM数据存储器

上一篇:ATmega88 I/O存储器
下一篇:ATmega88 SRAM数据存储器

推荐阅读最新更新时间:2024-11-17 14:11

以汇编语言完成读写24LCxx系列的EEPROM的实例
;************************************************************************ * ;* 以 PIC16F877A 為I2C Master 模式存取一串列式 EEPROM 的範例程式 * ;* * ;* Written by: Richard Yang * ;* Sr. Corporate Application Engineer * ;* Microchip Technology Inc. * ;* Date: Oct.
[单片机]
【STC单片机学习】第十五课:I2C通信-EEPROM
1.15.1.EEPROM及其背景知识 1.15.1.1、EEPROM (1)一些概念: ROM(只读存储器)、RAM(随机存取存储器)、PROM(可编程ROM)、EPROM(可擦除ROM)、EEPROM(电可擦除ROM) 踩链接简单了解下吧! (2)为什么需要EEPROM? 单片机内部的ROM只能在程序下载时进行擦除和改写,但是程序运行本身是不能改写的。单片机内部的RAM中的数据程序运行时可以改,但是掉电就丢失了。有时候我们有一些数据要存在系统中,要求掉电不丢失,而且程序还要能改。所以内部ROM和RAM都不行。这时候系统中就需要一块EEPROM (3)EEPROM和flash的区别与联系 flash属于广义的EEPR
[单片机]
【STC单片机学习】第十五课:I2C通信-<font color='red'>EEPROM</font>
传西部数据携INCJ欲以2兆日圆收购东芝存储器
eeworld网消息,东芝存储器股权标售案的第二次标案收件,已于5月19日截止,据日本经济新闻(Nikkei)报导,目前投标的有4家厂商:KKR、贝恩(Bain Capital)、鸿海及博通(Broadcom);而西部数据(WD)为特别谈判对象,并未参与第 2 轮竞标,但在 19 日向东芝单独提出新提案。 出售“东芝存储器”是东芝营运重建、解除债务超过局面的关键,因此东芝希望出售额能达 2 兆日圆的规模,不过之前传出西数出示的收购额未达东芝预期,加上西数反对东芝出售半导体事业,并向国际仲裁法庭诉请仲裁,要求东芝停止半导体事业出售手续,让东芝与西数之间的对立情势急速攀升。日经曾报导称,很可能在6月进行第三次投标。 不过最新消
[半导体设计/制造]
STM32模拟I2C时序读写EEPROM精简版
平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线+外部EEPROM(不需要上拉电阻) 工程介绍:主要文件在USER组中,bsp_i2c_ee.c,bsp_i2c_ee.h,bsp_eeprom.c,bsp_eeprom.h和main.c,其中bsp_i2c_ee.c中主要时基本的模拟I2C时序,而bsp_eeprom.c中主要利用前一个文件中定义的基本操作,进行EEPROM的读写操作。其他类似I2C时序的协议,均可以保留bsp_i2c_ee.c的基础上添加新的内容。本文有些内容借鉴了其他网友的总结,在此表示感谢。 1.硬件部分:电路连接较为简单,笔者在淘宝上买的24C02N主要有四根线,两根电
[单片机]
STM32模拟I2C时序读写<font color='red'>EEPROM</font>精简版
STM32L系列单片机内部EEPROM的读写
STM32L系列单片机内部提供了EEPROM存储区域,但实质上,其FLASH也是EEPROM类型,只不过有一块区域被开放出来专门用作EEPROM操作而已。STM32L的EEPROM使用寿命设计为100000次擦写以上,容量为2K-4K,这对于一般设备的参数存储来说是非常理想的。但从EEPROM使用方式看,其不适用于被反复修改的数据存储使用,一般作为配置参数,其修改次数往往是比较少量的。 STM32L的EEPROM和FLASH是统一编址,操作共用同一个读写电路,所以在EEPROM读写的时候STM32L核对于FLASH的一切访问和操作都将暂停,只有当EEPROM的操作完成后,才继续执行后续代码,在这期间只有EEPROM的读写电
[单片机]
ST的新款汽车串行EEPROM采用2x3mm微型封装
中国,2015年4月9日 意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)的汽车质量级串行EEPROM采用2mm x 3mm WFDFPN8微型封装,提供业内最多的可选存储容量。当工程师在设计高集成度车身控制器、网关,以及先进驾驶辅助系统(ADAS, Advanced Driver Assistance System)的雷达和摄像头模块时,这些存储器能够提供最大的设计灵活性。 使用分立串行EEPROM数据参数存储装置有助于简化设计,同时提供最大的升级灵活性。有限的存储器封装和容量选择将会限制解决方案的效果,而无法在空间受限的应用中发挥出应有的表现。为解决这一挑战
[嵌入式]
ST的新款汽车串行<font color='red'>EEPROM</font>采用2x3mm微型封装
STM8L的EEPROM读写原理及例程
STM8L103C6拥有1KB的片上EEPROM,可以用来存储程序需要用到的参数,就不需要额外使用24C02这样的外部存储器了. 同时,和24C02比起来,STM8L的片上EEPROM操作更简单,可以直接对地址进行操作,进行数据读写. 下图是STM8L闪存和EEPROM的地址分配图,可以看到EEPROM的起始地址为0x001000,结束地址为0x0013FF.共1024个地址空间,所以EEPROM的容量为1KB. EEPROM在上电复位后是写保护的,在向其中写入数据时,需要解锁,关闭写保护.解锁流程为: ①第一次向FLASH_DUKR写入密钥0xAE ②第二次向FLASH_DUKR写入密钥0x56 两次都写入正确后,写保护
[单片机]
STM8L的<font color='red'>EEPROM</font>读写原理及例程
Atmel推出全球最具创新性的双引脚自供电串行EEPROM存储器
Atmel推出全球最具创新性的双引脚自供电串行EEPROM存储器,主要面向物联网、电池、耗材和缆线标识市场 在创新寄生供电方案的支持下,新单线系列产品仅需1只数据引脚和1只接地引脚就能工作,无需电源/Vcc引脚,并以即插即用64位序列编号做标识 中国上海,2015年8月10日 全球微控制器(MCU)及触控技术解决方案领域的领导者Atmel公司(NASDAQ代码:ATML)今日发布了业界最具创新性的单线EEPROM产品,这款产品仅需2只引脚,即1只数据引脚和1只接地引脚即可正常工作。本系列产品是物联网(IoT)、可穿戴设备、耗材、电池和缆线标识市场的理想之选。由于新器件产品能够自行供电,它无需使用电源或Vcc引脚,而是通过数
[嵌入式]

推荐帖子

【晒心的】eZ430-chronos上手试用
觊觎430chronos已经很久了,无奈原来价格太贵。element14上要4百多,taobao上少量有货,也是4-500的样子。这次趁着优惠estore用支付宝不到200的包邮价格拿到,还是相当开心的。唯一不爽的是考虑到使用频率问题,选了433,那心率带什么的就没戏了。不过也好,省的折腾啊,哈哈,懒人就是这样的。寄过来还是很快的,拿到就立马带上了,发现没有想象中那么大哦,本人手臂是比较细的,带上去还算协调,哈哈。很低调的一只表哦,拿出去唬同事还蛮管用的,“呀,Ti的手表。。。。”心里是不是嘀
johnrey 微控制器 MCU
亿佰特免费提供蓝牙,4G DTU,WiFi,lora多种模块,想玩的快来!
想要通过使用模块来学习无线知识?蓝牙,4G,WIFI,还是lora?别着急,满足你的需求,现在这里都有。亿佰特免费提供多款蓝牙,4G,WIFI,以及lora的模块,供大家选择。感兴趣的快来申请吧!本次可申请测评试用的型号如下:⑴蓝牙模块①E104-BT05-TB蓝牙模块测试板x5块②E104-BT01SoC射频蓝牙模块x5块⑵WIFI模块③E103-W01-BF测试版x5块④E103-W05无线模块x5块⑶
okhxyyo RF/无线
Linux:多情却被无情恼
Linux:多情却被无情恼昨日,又见某Linux人士以《谁在使用Linux?》为题,声称Linux更加普及了。笔者细细看来,其实就是由Linux基金会对桌面Linux用户一年一次的调查报告(官方的截止日期应是在12月30日)的提要,但其中的有些数据和观点恰恰反映出了目前Linux存在着自身无法克服的问题。首先是从Linux的使用者的属性来看,Linux更多是集中在SOHO(小型办公室/家庭办公室)为68.4%,而到了小型、中型和大型企业的时候,采用的用户比例则骤减至1%、9.7%和
呱呱 Linux与安卓
新手如何快速提高PCB布局布线技巧?
今年刚毕业,学的电子信息,找了份硬件设计的工作,主要工作就是PCB绘制,最近一直在努力学习,希望自己画的板子能早日得到产品应用,请教各位老师,怎样才能尽快掌握PCB布局布线的技巧呢?比如信号线如何走才是好的,元件如何摆放才是合理的,请老师们给个学习的思路吧,如何才能一步一步成为画板高手呢?不胜感激。新手如何快速提高PCB布局布线技巧?刚毕业,也可能在学校做过PCB吧,刚入公司,让画PCB图,其实公司是想锻炼楼主哦,什么“信号线如何走才是好的”,这些不是主要问题,,要抓住锻炼的时机,画P
dongsy2012 PCB设计
在PCB设计中,电源芯片选择DC/DC还是LDO?
在进行PCB设计时,电源芯片设计选择DC/DC还是LDO是要有要求的。一、简单的来说,在升压场合,当然只能用DC/DC,因为LDO是压降型,不能升压。LDO的选择当所设计的电路对分路电源有以下要求1.高的噪音和纹波抑制;2.占用PCB板面积小,如手机等手持电子产品;3.电路电源不允许使用电感器,如手机;4.电源需要具有瞬时校准和输出状态自检功能;5.要求稳压器低压降,自身功耗低;6.要求线路成本低和方案简单;此时,选用LDO是最恰当的选择,同时满足产品设计的各
kdyhdl PCB设计
无线充电之异物检测FOD
无线充电之异物检测FOD无线充电之异物检测FOD
nathanzhang RF/无线
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved