历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2021年10月11日 | ATmega16 EEPROM数据存储器

发布者:Zhenai5201314 来源: eefocus关键字:ATmega16  EEPROM  数据存储器 手机看文章 扫描二维码
随时随地手机看文章

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


通过SPI和JTAG及并行电缆下载EEPROM数据的操作请分别参见 P260、 P265及P250。

EEPROM 读/ 写访问

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

EEPROM的写访问时间由Table 1给出。自定时功能可以让用户软件监测何时可以开始写下一字节。用户操作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 之前必须为其赋予正确的数据。

EEPROM 数据寄存器 - EEDR

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

EEPROM 控制寄存器- EECR

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

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

· Bit 2 – EEMWE: EEPROM 主机写使能
EEMWE决定了EEWE置位是否可以启动EEPROM写操作。当EEMWE为"1"时,在4个时钟周期内置位EEWE 将把数据写入EEPROM 的指定地址;若EEMWE 为"0“,则操作EEWE 不起作用。EEMWE 置位后4 个周期,硬件对其清零。见EEPROM 写过程中对EEWE 位的描述。

· Bit 1 – EEWE: EEPROM 写使能
EEWE 为EEPROM 写操作的使能信号。当EEPROM 数据和地址设置好之后,需置位EEWE以便将数据写入EEPROM。此时EEMWE必须置位,否则EEPROM写操作将不会发生。写时序如下( 第3 步和第4 步的次序并不重要):
1. 等待EEWE 位变为零
2. 等待SPMCSR 中的SPMEN 位变为零
3. 将新的EEPROM 地址写入EEAR( 可选)
4. 将新的EEPROM 数据写入EEDR( 可选)
5. 对EECR 寄存器的EEMWE 写"1",同时清零EEWE
6. 在置位EEMWE 的4 个周期内,置位EEWE

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

注意:如果在步骤5 和6 之间发生了中断,写操作将失败。因为此时EEPROM 写使能操作将超时。如果一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR 或EEDR寄存器可能被修改,引起EEPROM 操作失败。建议此时关闭全局中断标志I。经过写访问时间之后,EEWE 硬件清零。用户可以凭借这一位判断写时序是否已经完成。EEWE 置位后, CPU 要停止两个时钟周期才会运行下一条指令。

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

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

Table 1 为CPU访问EEPROM的典型时间。

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

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

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

汇编代码例程
EEPROM_read:
; 等待上一次写操作结束
sbic EECR,EEWE
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 电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了复位,只要电压足够高,写操作仍将正常结束


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

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

推荐阅读

王振铎所复原的地动仪模型原理2017年秋天投入使用的统编本初中历史教科书七年级上册中,关于张衡和候风地动仪的内容,被删除。那个被印在教材上影响了几代中国人、由王振铎复原、以“直立杆”为理论基础制作的地动仪模型,开始淡出当代青少年的视野。实际上,近年来,王振铎所造的地动仪模型一直非议不断。为复原出更具科学性、更接近史籍记载中的候风地动...
日前据外媒报道,有消息曝出特斯拉申请了一项配有全息玻璃的无边框显示屏专利。据悉,该玻璃可以“减少或消除系统显示部分和非显示部分之间边界的可见性”。在2009年特斯拉推出Model S(参数|询价)时,Model S(参数|询价)已经开启了“大屏时代”,利用中控屏代替了大部分物理按键;不可否认,这在汽车行业掀起了一波浪潮。目前很多手机厂商推出“全面屏”...
近日,91mobiles报道,OPPO将于下周在印度推出A51智能手机。目前,该媒体已经知晓了该机的主要规格信息。曝光的配置信息显示,OPPO A15将是一款入门级智能手机。根据爆料,OPPO A15将搭载联发科Helio P35处理器,辅以3GB+32GB内存组合,支持通过microSD卡将存储进一步扩展到256GB,可以在基于Android 10的ColorOS 7.2版本上运行。手机配备了4230mAh电...
自去年下半年以来,芯片短缺成了困扰所有车企的最大问题,不少企业因此下调交付预期,延长交付时间,包括这几年销量火热的电动汽车新势力。10月9日,据第一财经援引知情人士信息报道称,因受到“缺芯”影响交付量下降的理想汽车,近日在黑市中以高价采购了数千片电子驻车(EPB)芯片,单片采购价达到5000元每片,而EPB芯片的正常价格约为6元/片,黑市价远...

史海拾趣

问答坊 | AI 解惑

8051单片机C语言控制与应用.zip .zip

8051单片机C语言控制与应用.zip…

查看全部问答∨

路由器包处理器芯片设计

随着带宽不断提高, 规模不断扩大, 网络结构越来越复杂, 对组建大型复杂的计算机网络所依赖的关键技术———网络互联技术和路由器技术也提出了更高的要求。尤其在 中, 路由器起着十分重要的作用, 组网和应用服务在很大程度上都依赖于高性能的路 ...…

查看全部问答∨

关于在wince中安装.cab文件

    我用ActiveSync将sqlce20.dev.ppc.wce4.armv4.CAB和sqlce20.ppc.wce4.armv4.CAB拷贝到GEC2410中,双击后,提示不是有效的windows ce安装文件,高手们请帮帮忙,这是怎么回事啊?.cab不就是wince的安装文件格式吗…

查看全部问答∨

Windows CE下做导航器,用什么电子地图比较好

Windows CE下做导航器,用什么电子地图比较好??? 想知道各种电子地图的性价比啊?? 谢谢了!…

查看全部问答∨

windows ce编程CommandBar_InsertMenubar 问题

流驱动程序,用的是微软网页上的例子 在VS2005下 unresolved external symbol CommandBar_InsertMenubar referenced in function "long __cdecl 什么原因啊?…

查看全部问答∨

开关电源资料

本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 供大家分享。  …

查看全部问答∨

这是什么IC,高人请进

有请德高望重、见多识广的朋友帮忙看一下附图里的两个G2、G4是什么型号的IC,听说是双三极管,但没有具体型号,无法查到其资料,若诸位能查到它们的资料,有劳告知小弟,不甚感激。谢谢!…

查看全部问答∨

MSP430编程问题

我MSP430编程时,自己做了个H文件,工程文件找不到H文件,路径怎么设呀?谁能帮我分析与下?谢了!…

查看全部问答∨

SSD1963 7寸屏显示图片的颜色不自然

群创AT070TN92,SSD1963-7寸屏,800X480. 存在问题,初始化后闪屏,显示取模图片的颜色不自然,就像油画一样,好难看,大家板我分析一下是啥原因。   unsigned int  HDP=799;  //HS_Display_Areaunsigned int  HT =1200;& ...…

查看全部问答∨

又是一年了,2013 LED照明方案四个趋势你来看!

2012年即将过去,这一年对于LED业者来说可谓喜忧参半,虽然包括中国在内的许多国家已经开始禁止销售白炽灯,但是LED灯具销售并没有如期爆发,反而出现了很多灯具厂商倒闭的连锁风暴,不过,也有厂商笑逐颜开,赚了盆满钵满,总体来看,今年LED市场 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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