ATmega128 EEPROM数据存储器

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

ATmega128包含4K字节的EEPROM。它是作为一个独立的数据空间而存在的,可以按字 节读写。EEPROM 的寿命至少为100,000 次(擦除)。EEPROM 的访问由地址寄存器数据寄存器和控制寄存器决定

具体的SPI 和JTAG 下载EEPROM 数据请分别参见P 267“ 存储器编程” 。



EEPROM 读/ 写访问

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

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

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

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



EEPROM 地址寄存器-EEARH 和EEARL

ATmega128 EEPROM 地址寄存器

• Bits 15..12 – Res: 保留
保留位,读操作返回值为零。在写数据时要写入0 以保证与未来产品的兼容。
• Bits 11..0 – EEAR11..0: EEPROM 地址
EEARH 和EEARL 指定了4K 字节的EEPROM 空间。EEPROM 的地址是线性的,从0 到4096。EEAR 的初始值没有定义。在访问EEPROM 之前必须为其赋予正确的数据。



EEPROM 数据寄存器- EEDR

ATmega128 EEPROM 数据寄存器

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



EEPROM 控制寄存器- EECR

ATmega128 EEPROM 控制寄存器

• Bits 7..4 – Res: 保留
保留位,读操作返回值为零。
• Bit 3 – EERIE: EEPROM 就绪中断使能
若SREG 的I 为"1“,则置位EERIE 使能EEPROM 就绪中断。清零EERIE 则禁止此中断。当EEWE 清零时EEPROM 就绪中断即可发生。
• Bit 2 – EEMWE: EEPROM 主机写使能
EEMWE决定设置EEWE为"1“是否可以启动EEPROM写操作。。当EEMWE为"1“时,在4个时钟周期内置位EEWE 将把数据写入EEPROM 的指定地址;若EEMWE 为"0“,则EEWE 不起作用。EEMWE 置位后4 个周期,硬件对其清零。
• Bit 1 – EEWE: EEPROM 写使能
当EEPROM 数据和地址设置好之后,需置位EEWE 以便将数据写入EEPROM。此时EEMWE必须置位,否则EEPROM写操作将不会发生。写时序如下(第3和第4步不是必须的):
1. 等待EEWE 为0。
2. 等待SPMCSR 寄存器的SPMEN 为零。
3. 将新的EEPROM 地址写入EEAR。
4. 将新的EEPROM 数据写入EEDR。
5. 对EECR 寄存器的EEMWE 写"1“,同时清零EEWE。
6. 在置位EEMWE 的4 个周期内,置位EEWE。

在CPU 写Flash 存储器的时候不能对EEPROM 进行编程。在启动EEPROM 写操作之 前软件必须要检查 Flash 写操作是否已经完成。第二步仅在软件包含引导程序,允许CPU 对Flash 进行编程时才有用。如果CPU 永远都不会写Flash,则第二步可以忽略。请参 考P 255“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程 能力” 。

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

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

• Bit 0 – EERE: EEPROM 读使能
当EEPROM 地址设置好之后,需置位EERE 以便将数据读入EEAR。EEPROM 数据的读取只需要一条指令,且无需等待。读取EEPROM 时CPU 要停止4 个时钟周期。

用户在读取EEPROM 时应该检测EEWE。如果一个写操作正在进行,就无法读取 EEPROM,也无法改变寄存器EEAR。

标定振荡器用于EEPROM 访问定时。Table 2 为CPU 访问EEPROM 的典型时间。ATmega128 EEPROM 编程时间
Note: 1. 使用的是1 MHz 的时钟。与熔丝位CKSEL 的设置无关。

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

汇编代码例程EEPROM_write:; 等待上一次写操作结束sbic EECR,EEWErjmp EEPROM_write; 设置地址寄存器 (r18:r17)out EEARH, r18out EEARL, r17; 写数据到数据寄存器(r16)out EEDR,r16; 置位EEMWEsbi EECR,EEMWE; 置位EEWE 以启动写操作sbi EECR,EEWEretC 代码例程void EEPROM_write(unsigned int uiAddress, unsigned char ucData){/* 等待上一次写操作结束 */while(EECR & (1<下一个代码例子说明如何用汇编和C来读取EEPROM在此假设中断不会在执行这些函数 的过程当中发生。

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


掉电休眠模式下EEPROM 的写 入

当EEPROM 执行写操作时进入掉电休眠模式, EEPROM 写操作继续,并在写访问时间 结束前完成。 但写操作结束后,振荡器继续工作,因此器件无法完全进入掉电模式。因此 建议在进入掉电模式前检验EEPROM 写操作是否完成。



防止EEPROM 数据丢失

由于电源电压过低,CPU 和EEPROM 有可能工作不正常,造成EEPROM 数据的毁坏( 丢失)。这种情况在使用独立的EEPROM 器件时也会遇到。

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

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


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

上一篇:ATmega8 外部时钟
下一篇:ATmega128 SRAM数据存储器

推荐阅读最新更新时间:2024-11-12 10:19

FLASH模拟EEPROM实验
FLSH操作总结: 1, 锁定解锁函数 上面讲解到在对FLASH进行写操作前必须先解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2),固件库函数实现: void FLASH_Unlock(void); 同样的道理,在对FLASH写操作完成之后,我们要锁定FLASH void FLASH_Lock(void); 2,写操作函数 固件库提供了三个FLASH写函数: FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); FLASH_Status FLASH_ProgramHalfWord(uint
[单片机]
FLASH模拟<font color='red'>EEPROM</font>实验
JTAG口的配置与使用
ATmega128单片机具有一个符合IEEE 1149.1标准的JTAG接口。JTAG接口实现了三个功能:采用边界扫描功能对芯片进行检测,对芯片内部的非易失性存储器(Flash和E2PROM)、熔丝和锁定位进行编程,以及实现在线调试(On-chip debugging)仿真。 JTAG接口占用了4个AVR单片机的引脚,与组成了JTAG接口,即JTAG术语中的检测访问端口(Test Access Port—TAP)。由于JTAG的4个端口(TDI/PF7、TDO/PF6、TMS/PF5和TCK/PF4)同PF口的高4位占用相同的引脚,因此当JTAG接口处于使能状态时,PF 就不能作为通用I/O口或ADC的输入口使用了。所以用户应
[单片机]
ATmega128 内核介绍
本节从总体上讨论AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因此它必 须能够访问存储器,执行运算,控制外设以及处理中断。 为了得到最大程度的性能以及并行性, AVR 采用了Harvard 结构,具有独立的数据和程 序总线。程序存储器的指令通过一级流水线运行。CPU 在执行一条指令的同时读取下一 条指令( 在本文称为预取)。这个概念实现了指令的单时钟周期运行。程序存储器为可以 在线编程的FLASH。 快速访问寄存器文件包括32个8位通用工作寄存器,而且都可以在一个时钟周期内访问。 从而实现单时钟周期的ALU 操作。在典型的ALU 操作过程中,两个位于寄存器文件中的 操作数同时被访问,然后执行相应的运算,结果
[单片机]
<font color='red'>ATmega128</font> 内核介绍
单片机模拟IIC总线与EEPROM进行数据通信
#include reg52.h #define uchar unsigned char sbit sda=P2^0; sbit scl=P2^1; uchar a; void delay() { ;; } void start() //开始信号 { sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop() //停止 { sda=0; delay(); scl=1; delay(); sda=1; delay(); } void respons() //应答 { uchar i; scl=1; delay(); whil
[单片机]
atmega128 AD 转换
/*********************************包含头文件********************************/ #include iom128v.h #include macros.h /********************************数码管段码表*******************************/ extern const unsigned char tab ={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F}; /****************************
[单片机]
51单片机内部EEPROM的应用
STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次以上,先来介绍下ISP与IAP的区别和特点。 ISP:In System Programable 是指在系统编程,通俗的讲,就是片子已经焊板子上,不用取下,就可以简单而方便地对其进行编程。比如我们通过电脑给STC单片机下载程序,或给AT89S51单片机下载程序,这就是利用了ISP技术。 IAP:In Application Programable 是指在应用编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以
[单片机]
CPU对存储器的读写(二、数据总线、控制总线)
二、数据总线 CPU与内存或其他器件的数据传输是通过数据总线来进行的,CPU数据总线的针脚数决定了一次可传输的位数,因为数据总线连接方式为并口所以8根针脚那么一次可传输8位既1个字节,16根针脚那么CPU是通过16跟导线跟内存相连,可一次性传输16位数既2个字节,如果8位数据总线传输16位数据只能通过发送2次来完成,而16位总线发送一次即可,速度上16位总线传输是8位总线的1倍,比如CPU发送89D8到内存8位和16位总线的发送方式如图所示: 三、控制总线 控制总线也是通过CPU针脚的数量来决定控制命令的多少,越多意味着可以使用的命令越多,其中控制总线有根导线负责对外发送信号称为“读信号输出”,由读信号输出负责CPU
[单片机]
CPU对<font color='red'>存储器</font>的读写(二、<font color='red'>数据</font>总线、控制总线)
基于ATmega128的安全工器具监控系统设计
众所周知,安全是电力企业一个永恒的主题,而安全工器具的好坏,将直接影响着电力企业在生产过程中的人身和设备安全。笔者提出了一种基于AVR单片机的安全工器具监控系统的设计方案,主要是对安全工器具的离就位状态信息、有效使用期限和安全工器具柜内的温湿度状况等进行监控,可以根据实现安全工器具柜内温湿度的自动调节,能够自动记录安全工器具的相关信息。本文首先阐述了系统的总体结构,然后详细论述了系统的硬件设计和软件设计。 1 安全工器具监控系统的总体结构 1.1 系统结构 本文所设计的安全工器具监控系统主要分为下位机数据采集和上位机数据管理两个部分,两者之间通过网络进行通信。 系统首先通过数据采集板对安全工器具柜的相关量进行采集,然后将采
[单片机]
基于<font color='red'>ATmega128</font>的安全工器具监控系统设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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