立即注册 找回密码

微雪课堂

搜索
微雪课堂 AVR AVR单片机内核剖析 ATmega128 查看内容

ATmega128 EEPROM数据存储器

2015-5-27 14:03| 发布者: waveshare-admin| 查看: 2448| 评论: 0

摘要: EEPROM 数据存储器ATmega128包含4K字节的EEPROM。它是作为一个独立的数据空间而存在的,可以按字 节读写。EEPROM 的寿命至少为100,000 次(擦除)。EEPROM 的访问由地址寄存器, 数据寄存器和控制寄存器决定具体的SP ...
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,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<<EEWE))
;
/* 设置地址和数据寄存器 */
EEAR = uiAddress;
EEDR = ucData;
/* 置位EEMWE */
EECR |= (1<<EEMWE);
/* 置位EEWE 以启动写操作E */
EECR |= (1<<EEWE);
}

下一个代码例子说明如何用汇编和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<<EEWE))
;
/* 设置地址寄存器 */
EEAR = uiAddress;
/* 设置EERE 以启动读操作 */
EECR |= (1<<EERE);
/* 自数据寄存器返回数据 */
return EEDR;
}
  
掉电休眠模式下EEPROM 的写 入

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

  
防止EEPROM 数据丢失

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

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

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

以上资料参考马潮老师的中文手册,由微雪电子整理并发布,转载请注明出处:www.waveshare.net,否则追究相应责任!


285

顶一下

刚表态过的朋友 (285 人)

最新评论

所有教程
    01ATmega128 简介
    ATmega128为基于AVR RISC结构的8位低功耗CMOS微处理器。由于其先进的指令集以 及单周
    02ATmega128 引脚功能
    引脚名称引脚功能说明VCC数字电路的电源。GND地。端口A(PA7..PA0)端口A 为8 位双向I/O
    03ATmega128 内核介绍
    本节从总体上讨论AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因此它必 须
    04ATmega128 ALU
    ATmega128 ALU 与32 个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数
    05ATmega128 状态寄存器
    状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以 实
    06ATmega128 通用寄存器
    (点击图片放大)寄存器文件针对AVR 增强型 RISC 指令集做了优化。为了获得需要的性能和
    07ATmega128 堆栈指针
    堆栈指针主要用来保存临时数据,局部变量和中断/ 自程序的返回地址。堆栈指针总是指
    08ATmega128 指令执行时序
    这一节介绍指令执行和内存访问时序。AVR CPU 由系统时钟clkCPU 驱动。此时钟由外部 晶
    09ATmega128 复位与中断处理
    AVR有不同的中断源。每个中断和复位在程序空间都有一个独立的中断向量。所有的中断 事
    010ATmega128 Flash程序存储器
    系统内可编程的Flash 程序存储器ATmega128具有128K字节的在线编程Flash。因为所有的AV
    011ATmega128 SRAM数据存储器
    SRAM 数据存储器ATmega128 支持两种不同的SRAM 配置,如Table 1 所示。Figure 9 说明
    012ATmega128 EEPROM数据存储器
    EEPROM 数据存储器ATmega128包含4K字节的EEPROM。它是作为一个独立的数据空间而存在的
    013ATmega128 I/O存储器
    ATmega128 的I/O 空间定义见P 342“ 寄存器概述” 。ATmega128 的所有I/O 和外设都被
    014ATmega128 外部存储器接口
    由于外部存储器接口所提供的特性,此接口非常适合于与存储器器件互连,如外部SRAM和Fl
    015ATmega128 时钟系统及其分布
    时钟系统及其分布Figure 18为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。
    016ATmega128 时钟源
    时钟源ATmega128 芯片有如下几种通过熔丝位选择的时钟源。时钟输入到AVR 时钟发生器,
    017ATmega128 晶体振荡器
    XTAL1 和XTAL2 分别为用作片内振荡器的反向放大器的输入和输出,如Figure 19 所示。
    018ATmega128 低频晶体振荡器
    为了使用32.768 kHz 钟表晶体作为器件的时钟源,必须将熔丝位CKSEL 设置为“1001” 以
    019ATmega128 外部RC振荡器
    对于时间不敏感的应用可以使用Figure 20 的外部RC 振荡器。频率可以通过方程f = 1/(3R
    020ATmega128 标定的片内RC振荡器
    标定的片内RC 振荡器提供了固定的1.0、2.0、4.0 或8.0 MHz 的时钟。这些频率都是 5V、
    021ATmega128 外部时钟
    为了从外部时钟源驱动芯片, XTAL1 必须如 Figure 21 所示的进行连接。同时,熔丝位 C
    022ATmega128 定时器/计时器振荡器
    对于拥有定时器/ 振荡器引脚(TOSC1 和TOSC2) 的AVR 微处理器,晶体可以直接与这 两个
    023ATmega128 MCU控制寄存器MCUCR
    MCU 控制寄存器包含了电源管理的控制位。• Bit 5 – SE: 睡眠使能为了使MCU 在执行SL
    024ATmega128 空闲模式
    当SM2..0 为000 时, SLEEP 指令将使MCU 进入空闲模式。在此模式下,CPU 停止运 行,
    025ATmega128 ADC噪声抑制模式
    当SM2..0 为001 时, SLEEP 指令将使MCU 进入噪声抑制模式。在此模式下,CPU 停 止运
    026ATmega128 掉电模式
    当SM2..0 为010 时, SLEEP 指令将使MCU 进入掉电模式。在此模式下,外部晶体停 振,
    027ATmega128 省电模式
    当SM2..0 为011 时, SLEEP 指令将使MCU 进入省电模式。这一模式与掉电模式只有 一点
    028ATmega128 Standby 模式
    当SM2..0 为110 时, SLEEP 指令将使MCU 进入Standby 模式。这一模式与掉电模式唯一的
    029ATmega128 减少功耗的方法
    试图降低AVR 控制系统的功耗时需要考虑几个问题。一般来说,要尽可能利用睡眠模式,
    030ATmega128 复位源
    复位AVR复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。复位向
    031ATmega128 上电复位
    上电复位(POR) 脉冲由片内检测电路产生。检测电平列于Table 19。POR 在VCC低于 检测电
    032ATmega128 外部复位
    外部复位由外加于RESET引脚的低电平产生。当复位低电平持续时间大于最小脉冲宽度 时(
    033ATmega128 掉电检测复位
    ATmega128 具有片内BOD(Brown-out Detection) 电路,通过与固定的触发电平的对比来检
    034ATmega128 看门狗复位
    看门狗定时器溢出时将产生持续时间为1 个CK 周期的复位脉冲。在脉冲的下降沿,延时 定
    035ATmega128 MCU 控制和状态寄存器-MCUCSR
    MCU 控制和状态寄存器提供了有关引起MCU 复位的复位源的信息。在ATmega103 兼容模式下
    036ATmega128 基准电压使能信号和启动时间
    ATmega128 具有片内能隙基准源,用于掉电检测,或者是作为模拟比较器或ADC 的输入。AD
    037ATmega128 看门狗定时器
    看门狗定时器看门狗定时器由独立的1 Mhz 片内振荡器驱动。这是VCC= 5V 时的典型值。请
    038ATmega128 中断向量
    本节说明ATmega128 的中断处理。更一般的AVR 中断处理请参见 P 12“ 复位和中断处理”
内核剖析
    01Atmega16
    深入剖析Atmega16芯片内核
    02Atmega48
    深入剖析Atmega48芯片内核
    03ATmega8
    深入剖析ATmega8芯片内核
    04ATmega128
    深入剖析ATmega128芯片内核
    05ATmega64
    深入剖析ATmega64芯片内核
    06ATmega32
    深入剖析ATmega32芯片内核
    07ATmega168
    深入剖析ATmega168芯片内核
    08ATtiny13
    深入剖析ATtiny13芯片内核
    09ATmega88
    深入剖析ATmega88芯片内核
    010ATtiny2313
    深入剖析ATtiny2313芯片内核
AVR

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2024-4-25 19:05 , Processed in 0.031348 second(s), 20 queries .

返回顶部