历史上的今天
今天是:2024年10月26日(星期六)
2021年10月26日 | ATmega8 EEPROM数据存储器
2021-10-26 来源:eefocus
| EEPROM 数据存储器 | ATmega8 包含512 字节的EEPROM 数据存储器。它是作为一个独立的数据空间而存在的,可以按字节读写。EEPROM 的寿命至少为100,000 次擦除周期。EEPROM 的访问由地址寄存器、数据寄存器和控制寄存器决定。 P 209“ 存储器编程” 包含使用SPI 或并行编程模式对EEPROM 编程。 |
| EEPROM 读/ 写访问 | EEPROM 的访问寄存器位于I/O 空间。 EEPROM的写访问时间由Table 1给出。自定时功能可以让用户软件监测何时可以开始写 下一字节。用户操作EEPROM 需要注意如下问题:在电源滤波时间常数比较大的电路 中,上电/ 下电时VCC 上升/ 下降速度会比较慢。此时CPU 可能工作于低于晶振所要求 的电源电压。请参见P 20 “ 防止EEPROM 数据丢失” 以避免出现EEPROM 数据丢失的 问题。 为了防止无意间对EEPROM的写操作,需要执行一个特定的写时序。具体参看EEPROM 控制寄存器的内容。 执行EEPROM 读操作时, CPU 会停止工作4 个周期,然后再执行后续指令;执行 EEPROM 写操作时, CPU 会停止工作2 个周期,然后再执行后续指令。 |
| EEPROM 地址寄存器- EEARH和EEARL |
• Bits 15..9 – 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) 可省略。请参见P 196“ 支持引导装入程序 -在写的同时可以读(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 1 为CPU访问EEPROM的典型时间。 下面的代码分别用汇编和C 函数说明如何实现EEPROM 的写操作。在此假设中断不会在 执行这些函数的过程当中发生。同时还假设软件没有Boot Loader。若Boot Loader 存在, 则EEPROM 写函数还需要等待正在运行的SPM 命令的结束。 汇编代码例程EEPROM_write:; 等待上一次写操作结束sbic EECR,EEWErjmp EEPROM_write; 设置地址寄存器 (r18:r17)out EEARH, r18out EEARL, r17; 将数据写入数据寄存器(r16)out EEDR,r16; 置位EEMWEsbi EECR,EEMWE; 置位EEWE 以启动写操作sbi EECR,EEWEretC 代码例程void EEPROM_write(unsigned int uiAddress, unsigned char ucData){/* 等待上一次写操作结束 */while(EECR & (1< |
| 在掉电休眠模式下的EEPROM写操作 | 若程序执行掉电指令时EEPROM 的写操作正在进行, EEPROM 的写操作将继续,并在指定的写访问时间之前完成。但写操作结束后,振荡器还将继续运行,芯片并非处于完全的掉电模式。因此在执行掉电指令之前应结束EEPROM 的写操作。 |
| 防止EEPROM 数据丢失 | 若电源电压过低,CPU 和EEPROM 有可能工作不正常,造成EEPROM 数据的毁坏( 丢失)。这种情况在使用独立的EEPROM 器件时也会遇到。因而需要使用相同的保护方案。 由于电压过低造成EEPROM 数据损坏有两种可能:一是电压低于EEPROM 写操作所需 要的最低电压;二是CPU 本身已经无法正常工作。 EEPROM 数据损坏的问题可以通过以下方法解决: |
上一篇:ATmega8 I/O存储器
史海拾趣
|
比如把我的gprs modem 和开发版接起来,在开发版上进行ppp拨号,这时候建立ppp的两端是指 “开发版 和 基站” 还是 “开发版 和 猫” 或者 “猫 &nb ...… 查看全部问答> |
|
烧写片外flash,用Jlink还是ulink??笔记本开发Embed 最近在家用笔记本移植uclinux,在公司都是用通过 H-JTAG把bin文件烧写到片外Nor Flash了,直接用HJTAG的HFlasher工具 很方便。用自己做的HJTAG的wingger小板,现在在家用笔记本,没有并口,大概了解要使用jlink、或ulink,在HJTAG的 ...… 查看全部问答> |
|
我配置S3C2410的LCD控制器,点亮了LCD屏,但是画面存在错位。我的屏是320*240,TFT 屏的偏左侧有一道1.5cm宽的黑色条块,然后才是WinCE的桌面,然后屏的最左侧是原本应该在最右侧的图像。大概和下面的标注一样: 12 ...… 查看全部问答> |
|
wince下用c#开发pda里的mp3播放程序,代码是怎么写的,好象没有winmm.dll是吧。 wince下好象是没有winmm.dll的是吧。 谁知道哪里有这些资料的,谢谢了。会及时揭贴的。希望发一些好的资料给我参考下。 以前没怎么做过pda下的程序。… 查看全部问答> |
|
OPT这条伪指令的功能对源码设置列表输出选择,包括强制换页,强制行号变为零等, 1、设置后代码列表是在哪生成的? 2、OPT在实际应用中起到一个什么作用? 3、常应用于什么场合?… 查看全部问答> |
|
我有一个evc工程,以前编译,连接是通过的,现在我换了一个sdk,然后就报unresolved external symbol _X509_LOOKUP_ctrl referenced in function in function \"int __cdecl pkcs11_verify_prepare(struct x509_store_ ...… 查看全部问答> |
|
请问使用合众达的例子,合众达下的codec文件夹下的videnc_copy.c中XDAS_Int32 VIDENCCOPY_TI_process(IVIDENC_Handle h, XDM_BufDesc *inBufs, XDM_BufDesc *outBufs, IVIDENC_InArgs *inArgs, IVIDENC_OutArgs *outArgs){ &nbs ...… 查看全部问答> |








