打印
[AVR单片机]

mega64的EEPROM

[复制链接]
4682|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jetyou|  楼主 | 2008-8-30 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的问题是:
现象:我用MEGA64的系统, 反复上电,就是偶尔会掉某个地址数据. 
分析:上电后把所有EEPROM的数据都读出来,放在RAM上面,程序只有在设置参数的时候,才保存到EEPROM,程序平时运行绝对不可能涉及到EEPROM。我以前用外挂的EEPROM,产品出了近上万套,也没出现这个问题.我反复看程序,看不出问题。保存EEPROM起始地址也改了,电源纹波也控制200MV以内(刚开始怀疑是电源的问题),后来偶尔发现,如果示波器的表笔搭了一下晶振,程序就跑飞了,我的串口,另外有些控制端口的状态都不对了。MEGA64就是没复位,我已经使能看门狗了。(我现在还没搞清楚,MEGA64的什么时候会咬人),我测试时人为进入死等,狗是可以工作的,这样的狗,我现在认为是只中看不中用的宠物狗。跑题了,狗先丢一边,说回EEPROM。我再重新上电,系统自检完成后,EEPROM出现问题的几率就大了(50%以上);当然不是所有的EEPROM数据都被改写,只有其中的某个地址(随机)上被改写。于是,我反复搭,它反复丢,我搭,他丢。。。
各位兄弟姐妹如何办办啊?

相关帖子

沙发
yewuyi| | 2008-8-30 15:21 | 只看该作者

避开EEPROM的0x00地址和0x01地址不要用

另外你的BOD开了没有?尽量把BOD开得高一点,好象最好是4.2V把。

EEPROM的0x00地址和0x01地址不要用,以前就有人反映这两个地址有问题,不知道MEGA64怎么样,但MEGA8经过我的证实,在一定的电源冲击下,确实有一定的概率出问题。

以前有人向ATMEL提过这个问题(印象中老斑竹晓奇也曾经提过),不知道是ATMEL不想正视这个问题呢,还是不清楚这个问题,反正到现在也没给出解释。

使用特权

评论回复
板凳
jetyou|  楼主 | 2008-8-30 15:23 | 只看该作者

我从0X100开始存储的.

使用特权

评论回复
地板
yewuyi| | 2008-8-30 15:31 | 只看该作者

还有一个可能

就是你那段写EEPROM的代码,PC乱了后进入写EEPROM那段代码,如果这段代码内没有合理的防错措施,并且你的PCB布的实在比较‘烂’(可不是攻击,只是说明问题),导致你的MEGA64很容易被干扰跑飞,那随机出现问题的概率就出现了。。。


情况不是明了,你应该把你的设计继续详细的描述,这样大家才能帮你找问题,可别想当然的一出问题就推说CHIP质量不好,呵呵,即使那个0x00,0x01地址的问题也是很难出现的,在一般用户的使用中出现的几率极小,只有特殊的针对性重复测试才可能发现。

你这个问题应该和你的设计本身不够扎实有关。。。

使用特权

评论回复
5
jetyou|  楼主 | 2008-9-1 10:03 | 只看该作者

BOD我到没有使能4.2V.

我始终没有怀疑IC厂家会出什么大的问题,关键是我觉得很难用好它。甚至有点脆弱,如果一个芯片本身对PCB,电源等环境有都有很高的要求,那他本身是否够健壮,也是值得怀疑。我这个板子有3个版本,8位51单片机,32位ARM,现在这个MEGA64版本,市场定位不一样的,另外的两个版本每天都在出货,就这个版本快弄死我了。针对MEGA64我已经调整电源,重做了PCB了。

使用特权

评论回复
6
jetyou|  楼主 | 2008-9-1 10:24 | 只看该作者

在这里先谢yewuyi的热心肠.

我的习惯不好,自己设计的板子我都喜欢通电时手摸来摸去,所以在某一天让我摸到晶振,程序死机,再上电发现EEPROM丢数据,后来我用示波器表笔不断的试也是这个现象,对于yewuyi说程序跑飞我是比较赞同的。我打算在保存那里再加个判断,如果是程序跑飞就死等看门狗咬人。

使用特权

评论回复
7
dai_weis| | 2008-9-1 10:30 | 只看该作者

你的RST引脚怎么处理的?

最好通过一个电阻上拉到VCC,再加一个104的电容
AVR的RST引脚内部上拉电阻阻值较大,容易在RST上引起干扰

使用特权

评论回复
8
jetyou|  楼主 | 2008-9-1 12:53 | 只看该作者

RST引脚已经如你所说你一样处理了.

使用特权

评论回复
9
yewuyi| | 2008-9-1 12:59 | 只看该作者

你可以看看OSC停了没有?

如果停了,DOG应该要出来咬人的。。。

如果没停,频率怎么变化了?

bootload区怎么设置的?另外把BOD使能到4.2V看看如何。。。

使用特权

评论回复
10
农民讲习所| | 2008-9-1 13:59 | 只看该作者

用俺资料中的EEPROM滚动存储方法,想出问题都难

使用特权

评论回复
11
匠人书院| | 2008-9-1 15:09 | 只看该作者

我也在用MEGA64

呵呵,我也在用MEGA64做开发,不过我没用他的EEPROM,不过我以前用过外部的EEPROM也出现过类似的问题,后来发现是电源的问题,改了电源,上电后做了一短延时在真正处理程序,结果OK了

使用特权

评论回复
12
jetyou|  楼主 | 2008-9-3 16:49 | 只看该作者

BOD我改成4V了

BOD我改成4V了,上电后程序延时500MS我早加了,这样我反复切断电源,也没有发现EEPROM里面的数据有变化,基本确定跟复位应该没有关系.现在的问题:我用的是16M无源晶振,如果示波器表笔测试,表笔一搭,就肯定重起,不管你用不用衰减档,我当它是OSC驱动能力太差,OSC停了,狗启动.但是我用手摸OSC时,可能是从OSC进入一个乱七八糟的时序程序就彻底乱了,再重新上电,就有可能EEPROM的数据变了。

使用特权

评论回复
13
jetyou|  楼主 | 2008-9-3 17:00 | 只看该作者

有源OSC

各位,是不是用有源OSC能保证稳定啊?

使用特权

评论回复
14
shalixi| | 2008-9-6 07:50 | 只看该作者

up

使用特权

评论回复
15
wxjia2004| | 2008-9-12 09:57 | 只看该作者

DOD ,备份数据~

1>AVR 中BOD的使用对EEPROM很重要.
2>避开0x01,0x00地址.
3>数据区不是太大,用另外一个数据区备份数据,并加校验(和/CRC)

有这三点,我的EEPROM数据没出去问题.

使用特权

评论回复
16
baite123| | 2008-9-22 16:54 | 只看该作者

想想

不明白!!!

使用特权

评论回复
17
qjy_dali| | 2008-9-25 15:41 | 只看该作者

又想了自己对AVR的观点

**肋!很多片内外设,食之无味,弃之可惜。里面的模拟功能外设尤其差,比如ADC,但数字外设好用,也非常丰富,像Timer,SPI,USART等

使用特权

评论回复
18
zhjun| | 2008-11-6 09:50 | 只看该作者

开BOD,避开0/1地址,我还没出过问题

使用特权

评论回复
19
风中的云2018| | 2018-12-10 10:54 | 只看该作者
我现在也碰到楼主的情况,mega64a单片机内部eeprom随机丢数据的问题,看了上面大家的评论,我现在的处理方式是,bod开启2.7V,复位芯片改成RC复位,软件保证中断中没有读写eeprom的操作,还有保存数据分为AB区并加校验和验证的手段,现在为止,还有eeprom丢数据的情况发生,但几率极小,在公司内测试没有发生,但发出的仪器中一年可能出现一两台这个问题。各位大侠,还有什么办法吗?因为我只是预防,没有找到掉数据的根本原因。

使用特权

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

本版积分规则

1

主题

8

帖子

0

粉丝