历史上的今天
返回首页

历史上的今天

今天是:2025年07月09日(星期三)

正在发生

2020年07月09日 | ATtiny13 EEPROM数据存储器

2020-07-09 来源:eefocus

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 电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了 复位,只要电压足够高,写操作仍将正常结束。 


推荐阅读

史海拾趣

Excelics [Excelics Semiconductor, Inc.]公司的发展小趣事

随着环保意识的不断提高,绿色生产成为了电子行业的发展趋势。Excelics Semiconductor积极响应这一趋势,将绿色环保理念融入到了公司的生产和经营中。他们采用了环保材料和清洁能源,减少了生产过程中的污染排放。同时,他们还积极参与环保公益活动,为推动电子行业的绿色发展贡献了自己的力量。

请注意,以上故事均为虚构内容,旨在展示一般电子行业发展过程中可能遇到的情况和挑战。

Cardinal Components公司的发展小趣事

2016年,Taitien收购了Cardinal Components,这一收购为公司带来了新的发展机遇和资源支持。随后,在2021年,Cardinal加入了Pletronics,进一步扩大了其在电子行业的影响力。这些收购与合作不仅为公司带来了更多的业务机会,也促进了其在技术研发和市场拓展方面的进步。

这五个故事只是Cardinal Components在电子行业发展中的一部分缩影。作为一家具有深厚历史底蕴和强大技术实力的公司,Cardinal将继续在电子行业中发挥重要作用,为行业的进步和发展做出更多贡献。

Chemi-Con公司的发展小趣事

随着电子行业的快速发展,Chemi-Con公司不断加大对研发的投入,致力于技术创新和产品升级。公司研发团队在铝电解电容器的基础上,不断推出性能更优、体积更小、寿命更长的产品,满足了市场对于高效、可靠电容器的迫切需求。此外,Chemi-Con还积极拓展产品线,涉足了多层陶瓷电容器、薄膜电容器等多个领域,为客户提供更加丰富的选择。

Emerson Embedded Power公司的发展小趣事

面对日益严峻的环境问题,Emerson Embedded Power积极响应,将环保理念融入产品设计和生产过程中。该公司致力于开发节能、低碳的电源产品,帮助客户降低能源消耗和碳排放。同时,公司还积极推广绿色制造理念,推动整个电子行业的可持续发展。

EM Microelectronic-Marin SA公司的发展小趣事

EM Microelectronic-Marin SA,作为斯沃琪集团公司(The Swatch Group)的一部分,自1971年起便开始了对超低功率集成电路的探索。在当时,电子设备的功耗是一个重要的挑战,尤其是在移动和便携式设备中。EM Microelectronic-Marin凭借其前瞻性的技术视野,投入大量资源进行研发,逐渐在行业内建立了低功耗技术的领先地位。

Aromat Corp公司的发展小趣事

在电子行业快速发展的背景下,Aromat Corp始终坚持创新引领的发展理念。公司不断投入研发资源,推出了一系列具有创新性的电子产品。这些产品不仅满足了市场的多样化需求,还为公司带来了可观的利润增长。同时,Aromat Corp还注重知识产权保护,积极申请专利,保护公司的创新成果。

问答坊 | AI 解惑

外资还是国有?合资或者民营?薪酬福利大揭秘!

不同所有制的企业性质对薪酬福利的影响   根据2007年度中国电子行业薪酬和职业发展调查。   通过对不同所有制性质企业的薪酬调查分析发现,外资企业与合资企业的电子工程师的薪酬收入和奖金收入都明显高于非外资企业(包括:国有企业、民营企 ...…

查看全部问答>

关于USB转红外

如题用USB转红外要怎么样才可以实现了??哪位路过的大侠指点下呀…

查看全部问答>

世贸天阶-全北京向上看!

转自:38度灯光论坛 可能很多朋友都已经知道,北京世贸天阶的超级LED屏幕,号称是世界第二,亚洲第一。 去现场看是比较震撼。找了一个机会和做LED屏幕的朋友。去震撼了一把。如果想具体了解 先看看他们的官方网站吧http://www.theplace.cn/ 让我 ...…

查看全部问答>

单片机内Flash的读写问题

我现在要实现对P89LPC901单片机的读写,采用的是IAP-Lite.程序出现了一些问题,麻烦大家看一下! /****************************************************************** * 文件名:TEST.C * 功能:测试IAP_Lite功能 ************************* ...…

查看全部问答>

招聘 windows ce及windows下的软件开发工程师

现在公司还需要以下岗位的各一位开发人员,请有意的朋友与我联络。 一、招聘 windows下软件开发工程师 主要开发相应平台下的输入法软件。 要求如下: 1. 熟悉windows下的编程; 2. 精通C/C++语言(必须具备); 3. 对UI界面有相当经验 4. 要 ...…

查看全部问答>

EVC懂得多的高手看下吧~~

)   /////调用出错 ??!!??!!??!!??!!??!!??!!??!!??!!??!!??!!??!!??!!? {         float s_sum=0;         int i;         for(i=0;i…

查看全部问答>

谁能提供一个vs2005下控制ARM2440的IO或AD的例子呀?

刚开始学WIN CE的菜鸟。想了解VS 2005下如何控制ARM2440的IO或AD。 哪位老大能给个例子,不胜感激。 只有这么多分啦。…

查看全部问答>

WinCE下SD卡初始化结束后无法在wince目录显示出来

本人的SD卡驱动现已经能加载Sdmemory.dll. 但是在加载完之后还会发CMD17这个命令, 是不是在加载完sdmemory.dll之后。   在wince的目录下面是不是就会显示出一个SD卡的目录来(和U盘一样的那种)? 不过我初始化结束之后。显示不了 ...…

查看全部问答>

【视频分享】电源设计小贴士32和33:注意SEPIC耦合电感回路电流

简介:在本《电源设计小贴士》中,我们将确定 SEPIC 拓扑中耦合电感的一些漏电感要求。在不要求主级电路和次级电路之间电气隔离且输入电压高于或者低于输出电压时,SEPIC 是一种非常有用的拓扑。在要求短路电路保护时,我们可以使用它来代替升压转 ...…

查看全部问答>

msp430f5529 LCD 显示程序

在学开发板,seed-expmsp430f5529实验板,要用lcd显示,但MSPF5529没有LCD的相关寄存器,要采用SPI通信模式去实现,具体的就不会了,请大神指导!!…

查看全部问答>