打印
[AVR单片机]

紧急求助:ATmega128内部EEPROM数据掉电丢失的问题?

[复制链接]
5261|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanpad|  楼主 | 2013-3-26 20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过串口向ATmega128的EEPROM写入数据:
eprom_write(0x00, 0x0E, data_in);

每次上电时从EEPROM中读出:
eprom_read(0x00, 0x0E, data_out);

可是每次断电重启之后有时会出现读出数据出错的情况

请问该如何解决?

已经尝试了在熔丝位设置时设置Bodlevel启动电压2.7V或4.0V,同时勾选了EEPROM掉电保护。可是不管用

读写程序如下:

/*EEPROM读取函数*/
/*addr:地址;number:长度;p_buff:读出数据存放指针*/
void eprom_read(unsigned int addr, unsigned char number, unsigned char *p_buff) {

        while(EECR & (1 << EEWE));                                                        /* 等待上一次写操作结束 */

        while(number --) {
                EEAR = addr ++;                                                                        /* 设置地址寄存器 */
                EECR |= (1 << EERE);                                                        /* 置位EERE 读使能 */
                *p_buff++ = EEDR;
                }
}

/*EEPROM写入函数*/
/*addr:地址;number:长度;p_buff:写入数据存放指针*/
void eprom_write(unsigned int addr, unsigned char number, unsigned char *p_buff) {

        while(number --) {
                while(EECR & (1 << EEWE));                                                /* 等待上一次写操作结束 */
                EEAR = addr ++;                                                                        /* 设置地址寄存器 */
                EEDR = *p_buff ++;                                                                /* 设置数据寄存器 */
                EECR |= (1 << EEMWE);                                                        /* 置位EEMWE 主机写使能*/
                EECR |= (1 << EEWE);                                                        /* 置位EEWE 写使能*/
                }
}

相关帖子

沙发
yklstudent| | 2013-3-26 20:44 | 只看该作者
软件 硬件都要下手才能保证的

使用特权

评论回复
板凳
lanpad|  楼主 | 2013-3-26 20:49 | 只看该作者
yklstudent 发表于 2013-3-26 20:44
软件 硬件都要下手才能保证的


能有什么办法么?

使用特权

评论回复
地板
jasonell| | 2013-3-26 21:47 | 只看该作者
eeprom 里数据加校验,

使用特权

评论回复
5
huangxz| | 2013-3-27 15:01 | 只看该作者
EEPROM操作好像需要原子操作,亲在进行写入的时候关闭中断。

使用特权

评论回复
6
qin552011373| | 2013-3-27 22:54 | 只看该作者
问题解决了么

使用特权

评论回复
7
dqyubsh| | 2013-3-29 21:35 | 只看该作者
操作EEPROM时,要保证电压稳定,这是出错的根本。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 赞一个!
8
yhhsky| | 2013-3-30 18:45 | 只看该作者

使用特权

评论回复
9
lanpad|  楼主 | 2013-4-1 23:12 | 只看该作者
本帖最后由 lanpad 于 2013-4-1 23:14 编辑

这几天一直在试
出现的几率很小
实验室内几乎无法复现故障
现场还是有问题
说不清楚了现场有大功率微波发射
可能是电磁环境的问题
没做过这种项目,没辙了

使用特权

评论回复
10
qin552011373| | 2013-4-2 21:15 | 只看该作者
lanpad 发表于 2013-4-1 23:12
这几天一直在试
出现的几率很小
实验室内几乎无法复现故障

如果确定是电磁  可以加上屏蔽  没问题就说明是电磁  还有问题就继续找问题

使用特权

评论回复
11
heixuanfengliu| | 2015-11-6 21:39 | 只看该作者
这种问题是不好复现

使用特权

评论回复
12
navy2609| | 2015-11-11 20:39 | 只看该作者
你解决了?

使用特权

评论回复
13
wzr200408| | 2017-9-13 09:07 | 只看该作者
备份三份数据,只要有两个一致就行,两个都错乱了那就要从硬件上处理了。我实际这么处理过,用了很久,没试过丢数据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

25

帖子

0

粉丝