历史上的今天
今天是:2024年11月12日(星期二)
2021年11月12日 | ATmega64 EEPROM数据存储器
2021-11-12 来源:eefocus
| EEPROM 数据存储器 | ATmega64 包含2K 字节的 EEPROM 数据存储器。它是作为一个独立的数据空间而存在 的,可以按字节读写。EEPROM 的寿命至少为100,000 次擦除周期。EEPROM 的访问 由地址寄存器、数据寄存器和控制寄存器决定。 P281“ 存储器编程” 包含使用SPI、JTAG 或并行编程模式对EEPROM 编程。 |
| EEPROM 读/ 写访问 | EEPROM 的访问寄存器位于I/O 空间。 EEPROM 的写访问时间由 Table 2 给出。自定时功能可以让用户软件监测何时可以开始 写下一字节。用户操作EEPROM 需要注意如下问题:在电源滤波时间常数比较大的电路 中,上电/ 下电时VCC 上升/ 下降速度会比较慢。此时CPU 可能工作于低于晶振所要求 的电源电压。请参见 P23 “ 防止EEPROM 数据丢失” 以避免出现EEPROM 数据丢失的 问题。 为了防止无意识的EEPROM 写操作,需要执行一个特定的写时序。具体参看EEPROM 控制寄存器的内容。 执行EEPROM 读操作时, CPU 会停止工作4 个周期,然后再执行后续指令;执行 EEPROM 写操作时, CPU 会停止工作2 个周期,然后再执行后续指令。 |
| EEPROM 地址寄存器-EEARH 和EEARL |
• Bits 15..11 – Res: 保留 |
| EEPROM 数据寄存器- EEDR |
• Bits 7..0 – EEDR7.0: EEPROM 数据 |
| EEPROM 控制寄存器- EECR |
• Bits 7..4 – Res: 保留 在CPU 写Flash 存储器的时候不能对EEPROM 进行编程。在启动EEPROM 写操作之 前软件必须检查 Flash 写操作是否已经完成。步骤(2) 仅在软件包含引导程序并允许CPU 对Flash 进行编程时才有用。如果CPU 永远都不会写Flash,步骤(2) 可省略。请参见 P268“支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write)的自我编程能力 ” 。 注意:如果在步骤5 和6 之间发生了中断,写操作将失败。因为此时EEPROM 写使能操 作将超时。如果一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR 或EEDR 寄存器可能被修改,引起EEPROM 操作失败。建议此时关闭全局中断标志I。 经过写访问时间之后,EEWE 硬件清零。用户可以凭借这一位判断写时序是否已经完成。 EEWE 置位后, CPU 要停止两个时钟周期才会运行下一条指令。 • Bit 0 – EERE: EEPROM 读使能 用户在读取EEPROM 时应该检测EEWE。如果一个写操作正在进行,就无法读取 EEPROM,也无法改变寄存器EEAR。 经过校准的片内振荡器用于EEPROM定时。 Table 2为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< 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 数据损坏的问题可以通过以下方法解决: |
上一篇:ATmega64 I/O存储器
史海拾趣
|
今天终于可以上网了(无线的)发帖庆祝一下 上星期用了半天的时间重新编写了以前的LCD12864液晶屏的驱动程序 又把PCF8563移植成功 用MEGA16驱动 做了一个简单的时钟 在ICC 环境下 以下是源代码 又把LCD12864移植到 GCC 成功了 下面 ...… 查看全部问答> |
|
IAI 产品(芯片) 1. IA 4220 / 4221 / 4222 无线发射芯片 TSOP16 2. IA 4320/ 4322 无线接收芯片 TSOP16 3. IA 4420 / 4421 无线收发芯片 TSOP16 外围器件很少,只要两三颗小电容和一个10M Cystal, 对其精度无特殊要求,总成本低 (具备自动频 ...… 查看全部问答> |
|
老师要我们用单片机制作一个电子时钟,主要器件有AT89C51 、AT24C02、DS1B20、LCD1602、蜂鸣器、三极管等等 主要实现的功能有|: 1、时间设定(LCD1602实现时、分、秒,24小时显示),按照时间更新 2、可用3-4个按键调节时、分、秒 3、能多段闹 ...… 查看全部问答> |
|
哪位大侠能提供下其全集? 我在ASM-51宏汇编使用手册中看到下面的东东,它们是伪指令还是ASM-51宏汇编所特有的某种东东?为什么我没见到有人用过(比如可以代替“EQU”的“=”不是很方便么,怎么大家都用EQU呢)? 运 算& ...… 查看全部问答> |
|
工程师=扫地的×2。这个等号划起来比较沉重。常来逛网的兄弟姐妹多半是比老夫小的年轻人,按说老夫不该写这篇文章,老夫也本不想写这篇文章来扫兴,但老夫最终还是写了这篇文章,为什么?郁闷呐,不吐不快呀,前车之鉴呀。 文章这东西是表达思想的 ...… 查看全部问答> |
|
一、焊膏的成份和特性 焊膏主要有金属粉末、助焊剂、溶剂和胶凝剂或悬浮剂等均匀混合组成。根据用途的不同,金属粉末通常由锡、铅、铟、银、金等两种或两种以上金属组成的混合物,金属粉末的细度通常在25~75微米之间。金属粉末是焊膏中的主 ...… 查看全部问答> |
|
32位mcu,除了cortex m3,pic32的价格也不错啊.PIC32MX320F032H 官方千片价格23元主频 40MHz性能 1.56 DMIPS/MHz32k flash8k ram16*10bit adc5个16位,1个32位定时器5捕获,5 pwm2 -UART2  ...… 查看全部问答> |








