立即注册 找回密码

微雪课堂

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

ATtiny13 EEPROM数据存储器

2015-5-28 00:23| 发布者: kaloha| 查看: 3110| 评论: 0

摘要: ATtiny13包含64字节的EEPROM数据存储器。它是作为一个独立的数据 可以按字节读写。EEPROM的寿命至少为 100,000 次擦除周期。EEPROM 的访问由地 址寄存器、数据寄存器和控制寄存器决定。详见 P100 中 EEPROM的串行数 ...

ATtiny13包含64字节的EEPROM数据存储器。它是作为一个独立的数据 可以按字节读写。EEPROM的寿命至少为 100,000 次擦除周期。EEPROM 的访问由地 址寄存器、数据寄存器和控制寄存器决定。详见 P100 中 EEPROM的串行数据下载。

EEPROM 读/ 写访问

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

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

为了防止无意识的 EEPROM 写操作,需要执行一个特定的写时序。具体参看 P15“ 基本 字节编程 ” 及 P16“分离字节编程 ” 。

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

EEPROM 地址寄存器- EEARH和EEARL

ATtiny13 EEARL 地址寄存器

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

· Bits 5..0 – EEAR5..0: EEPROM 地址
EEPROM地址寄存器EEARL指定了64字节的EEPROM EEPROM地址是线性的, 从 0 到 63。EEAR 的初始值没有定义。在访问 EEPROM 之前必须为其赋予正确的数据。

EEPROM 数据寄存器 - EEDR

ATtiny13 EEDR 数据存储器

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

EEPROM 控制寄存器- EECR

ATtiny13 EECR 控制存储器

· Bits 7 – Res: 保留
保留位,读操作返回值为零。读完后,屏蔽该位。

· Bit 6 – Res: 保留
保留位,读操作返回值为零。

· Bit 5,4 – EEPM1与 EEPM0: EEPROM编程模式位
设置编程模式位定义当对EEPE写入时触发哪种编程方式。可能在一个时钟周期中数据编 程 (擦除旧值写入新值) 或将擦除与写操作分为两步。不同模式的编程时间见 Table 1。当 EEPE 置位,对 EEPMn 的写操作将忽略。复位时,除非 EEPROM 处于编程状态,否则 EEPMn 位将复位为 0b00。

ATtiny13 EEPROM 模式位


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

· Bit 2 – EEMPE: EEPROM 主机编程使能
EEMPE 位决定 EEPE 写入 "1” 是否有效。当 EEMPE为 "1" 时,在四个时钟周期内设置 EEPE 将会在 EEPROM 指定的位置编程;若 EEMPE为 "0“,设置 EEPE 无效。当 EEMPE 由软件写入 "1”,则在四个时钟周期后由硬件清零。 

· Bit 1 – EEPE: EEPROM 编程使能
EEPE 为 EEPROM 的编程使能信号。当 EEPE 为 "1",通过 EEPMn 位的设置,将会对 EEPROM编程。在EEPE写入逻辑"1"前,EEMPE位必须写入"1",否则不会出现EEPROM 写操作。当写访问时间结束,EEPE 位由硬件清零。当 EEPE 置位, CPU 在执行指令前 终止两个时钟周期。

· Bit 0 – EERE: EEPROM读使能
EERE为EEPROM读操作的使能信号。当EEPROM地址设置好之后,需置位EERE以便将 数据读入 EEARL。EEPROM 数据的读取只需要一条指令,且无需等待。读取 EEPROM 后 CPU 要停止 4 个时钟周期才可以执行下一条指令。用户在读取 EEPROM 时应该检测 EEPE。如果一个写操作正在进行,就无法读取 EEPROM,也无法改变寄存器 EEARL。

基本字节编程

使用基本字节编程是最简单的模式。当对 EEPROM 写入一个字节,用户必须将地址写入 EEARL寄存器,将数据写入EEDR寄存器。若EEPMn位为零,对 EEPE的写操作 (在对 EEMPE写完后的四个时钟周期内)将触发擦除/写入操作。擦除与写入操作在一个时钟周 期内完成,整个编程时间见 Table 1。 EEPE 位会保持置位,直到擦除与写入操作完成。 而当芯片处于编程状态时,不会进行其他 EEPROM操作。

分离字节编程

可以将擦除与写入操作分为两个周期。若系统需要对一些有限的时间缩短访问时间 ( 尤其 若电源电压下降 ) 该方式有效。使用该方式时,必须在写入操作前先进行擦除操作。但由 于擦除与写入操作是分离的,有可能当系统允许进行时间临界操作时 ( 尤其在掉电后 ) 进 行擦除操作。

擦除

擦除一个字节,地址必须写入EEARL。若EEPMn为0b01,对EEPE写入 (在对EEMPE 写完后的四个时钟周期内 ) 将只触发擦除操作 ( 编程时间见 Table 1)。EEPE 位会保持到 擦除操作完成。而当芯片处于编程状态时,不会进行其他 EEPROM操作。

写入

写入时,用户必须将地址写入EEARL,将数据写入EEDR。若 EEPMn为0b10,对EEPE 写入 (在对EEMPE写完后的四个时钟周期内)将只触发写入操作(编程时间见Table 1)。 EEPE 位会保持到擦除操作完成。若在写入前数据没有擦除,则认为写入数据丢失。当ATtiny13处于编程状态时,不会进行其他 EEPROM操作。
EEPROM访问使用标定振荡器定时。振荡器频率见P22“振荡器标定寄存器 – OSCCAL”。

下面ATtiny13的代码分别用汇编和 C 函数说明如何实现 EEPROM 的擦除、写入或基本写入。在此假设中断不会在执行这些函数的过程当中发生。

汇编代码例程
EEPROM_write:
; 等待上一次写操作结束
sbic EECR,EEPE
rjmp EEPROM_write
; 设置编程模式
ldi r16, (0 << EEPM1)|(0 << EEPM0)
out EECR, r16 
; 设置地址寄存器 r17
out EEARL, r17
; 将数据写入数据寄存器 (r16)
out EEDR,r16
; 置位 EEMWE
sbi EECR,EEMWE
; 置位 EEWE以启动写操作
sbi EECR,EEWE
ret

C 代码例程
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{
/* 等待上一次写操作结束 */
while(EECR & (1 << EEPE ))
;
/* 设置编程模式 */
EECR = (0 << EEPM1 )|(0 >> EEPM0 )
/* 设置地址与数据寄存器 */
EEARL = ucAddress;
EEDR = ucData;
/* 置位 EEMWE */
EECR |= ( 1 << EEMWE );
/* 置位 EEWE以启动写操作 */
EECR |= ( 1 << EEWE );
}

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

EEPROM_read:
; 等待上一次写操作结束
sbic EECR,EEPE
rjmp EEPROM_read
; 设置地址寄存器 r17
out EEARL, r17
; 设置 EERE以启动读操作
sbi EECR,EERE
; 自数据寄存器读取数据
in r16,EEDR
ret

C 代码例程
unsigned char EEPROM_read(unsigned char ucAddress)
{
/* 等待上一次写操作结束 */
while(EECR & (1<< EEPE))
;
/* 设置地址寄存器 */
EEARL = ucAddress;
/* 设置 EERE以启动读操作 */
EECR |= (1<< EERE);
/* 自数据寄存器返回数据 */
return EEDR;


防止EEPROM数据丢失

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

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

EEPROM 数据损坏的问题可以通过以下方法解决: 

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

249

顶一下

刚表态过的朋友 (249 人)

最新评论

所有教程
    01ATtiny13 片上调试系统
    特性* 完全的程序流控制* 仿真芯片上所有的模拟和数字功能,除了RESET引脚* 实时操作*
    02ATtiny13 中断向量
    本节描述ATtiny13的中断处理。更一般的AVR中断处理请参见P9“复位与中断处理” 。如果
    03ATtiny13 看门狗定时器
    ATtiny13 有一个增强型的看门狗定时器 (WDT),其主要特征为:* 独立的片上振荡器提供
    04ATtiny13 基准电压使能信号和启动时间
    ATtiny13 具有片内能隙基准源,用于掉电检测,或者是作为模拟比较器或ADC的输入。电压
    05ATtiny13 控制和状态寄存器MCUCSR
    AVR 控制和状态寄存器提供了有关引起AVR复位的复位源的信息。· Bit 7..4 –Res:保留
    06ATtiny13 看门狗复位
    ATtiny13看门狗定时器溢出时将产生持续时间为1 个CK 周期的复位脉冲。在脉冲的下降沿
    07ATtiny13 掉电检测
    ATtiny13 具有片内BOD(Brown-out Detection) 电路,通过与固定的触发电平的对比来检测
    08ATtiny13 外部复位
    外部复位由外加于RESET 引脚的低电平产生。当复位低电平持续时间大于最小脉冲宽度时(
    09ATtiny13 上电复位
    上电复位(POR) 脉冲由片内检测电路产生。检测电平请参见 Table 12。 无论何时VCC 低于
    010ATtiny13 复位源
    复位AVRATtiny13复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行
    011ATtiny13 减少功耗的方法
    试图降低AVR 控制系统的功耗时需要考虑几个问题。一般来说,要尽可能利用睡眠模式,并
    012ATtiny13 掉电模式
    当 SM1..0 为 10 时,SLEEP 指令将使 MCU 进入掉电模式。在此模式下,外部晶体停振,
    013ATtiny13 ADC噪声抑制模式
    当SM1..0 为01 时, SLEEP 指令将使MCU 进入噪声抑制模式。在此模式下,ATtiny13 CPU
    014ATtiny13 空闲模式
    当SM1..0 为00 时,SLEEP 指令将使MCU 进入空闲模式。在此模式下,ATtiny13 CPU 停止
    015ATtiny13 MCU控制寄存器MCUCR
    MCU 控制寄存器包含了电源管理的控制位。· Bit 5–SE: 休眠使能为了使 MCU 在执行 SL
    016ATtiny13 系统时钟预分频器
    ATtiny13 系统时钟可通过设置时钟预分频寄存器 CLKPR 来分频。该特性可用来降低功 耗
    017ATtiny13 128kHz片内振荡器
    ATtiny13 128 kHz片内振荡器为提供时钟频率为128 kHz的低功耗振荡器。该频率为在3V、
    018ATtiny13 外部时钟
    为了从外部时钟源驱动芯片, CLKI 必须如 Figure 12 所示的进行连接。同时,ATtiny13
    019ATtiny13 标定的片内RC振荡器
    标定的片内 RC 振荡器提供了固定的 9.6 MHz 或 4.8 MHz 的时钟。 这些频率都是 3V、 2
    020ATtiny13 时钟源
    ATtiny13芯片有如下几种通过Flash熔丝位进行选择的时钟源。时钟输入到AVR时钟发生器,
    021ATtiny13 时钟系统及其分布
    时钟系统及其分布Figure 11为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。
    022ATtiny13 I/O存储器
    ATtiny13的 I/O P150“ 寄存器概述 ” 。ATtiny13所有的I/O及外设都被放置于I/O I/O位
    023ATtiny13 EEPROM数据存储器
    ATtiny13包含64字节的EEPROM数据存储器。它是作为一个独立的数据 可以按字节读写。EEP
    024ATtiny13 SRAM数据存储器
    SRAM数据存储器Figure 9 给出了ATtiny13 SRAM 空间的组织结构。前 160 个数据存储器包
    025ATtiny13 Flash程序存储器
    系统内可编程的Flash 程序存储器ATtiny13具有1K字节的在线编程Flash,用于存放程序指
    026ATtiny13 复位与中断处理
    AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件 都
    027ATtiny13 指令执行时序
    这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟clkCPU 驱动。此时钟直接来
    028ATtiny13 堆栈指针
    堆栈指针主要用来保存临时数据、局部变量和中断 子程序的返回地址。堆栈指针总是指 向
    029ATtiny13 通用寄存器
    寄存器文件针对AVR增强型RISC指令集做了优化。为了获得需要的性能和灵活性,寄存器文
    030ATtiny13 状态寄存器
    状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以实现
    031ATtiny13 ALU
    ALU- 算术逻辑单元AVR ALU 与32 个通用工作寄存器直接相连。寄存器与寄存器之间、寄存
    032ATtiny13 内核介绍
    本节从总体上讨论ATtiny13 AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因
    033ATtiny13 引脚功能
    引脚名称引脚功能说明VCC数字电路的电源GND地端口B(PB5..PB0)端口 B 为 6 位双向 I/O
    034ATtiny13 简介
    ATtiny13是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及
内核剖析
    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-11-22 14:40 , Processed in 0.019752 second(s), 20 queries .

返回顶部