打印

请各位大虾帮忙分析:AT24C01A 丢失数据原因:

[复制链接]
1842|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zfcbt|  楼主 | 2009-1-15 23:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  请各位大虾帮忙分析:AT24C01A 丢失数据原因:

单片机采用NXP的 LPC936,接E2PROM芯片:AT24C01A. 用周立功的 TKS-936 仿真器 进行仿真的时候芯片读写正常. 仿真时,把 7个0X00 写入 地址0开始的7个字节里.

  仿真完毕把程序烧进936芯片中 ,再读AT24C01中的数据 ,读出来不是以前写进去的7个 0X00 . 而且把电路板断电再读AT24C01中数据,仍然和上次读的数据一样,很有规律,但一直都不是写进 AT24C01中的7个 0X00.

   请大虾帮忙分析: 是不是断电需要对AT24C01做保护,还是需要给 AT24C01A供电的电源加一个大的 钽电容.使断电或上电时候,电源比较平稳?

相关帖子

沙发
草履虫| | 2009-1-16 09:00 | 只看该作者

软件仿真不能替代真实的工作环境,差距有时是巨大的。

1. 还要在真实环境下测试。
2. 要看一下你的软件是不是写的完善。如果你的硬件是别人用过的,那么很可能是你的软件出现了BUG。
3. 系统电源的稳定是必要的,不稳定的电源系统会导致程序不能正常工作,至于加不加钽电容,加多大,还要看电路干扰有多大。

使用特权

评论回复
板凳
zfcbt|  楼主 | 2009-1-16 09:16 | 只看该作者

软件应该还可以

 把 AT24C01A芯片拿下来,到其他的电路板上读 地址0开始的7个字节数据,的确是变了,可在用的时候从未往里写过 这些数据. 请问: 是不是 断电时,电源不稳,造成AT24C01A中数据错乱.  后来每次上电, 都重复出现这些数据. 

使用特权

评论回复
地板
zfcbt|  楼主 | 2009-1-16 10:30 | 只看该作者

出现的数据一直是这样,请问大家是不是电源上电,断电影响的

使用特权

评论回复
5
ayb_ice| | 2009-1-16 20:13 | 只看该作者

上电后延时一段时间后再工作

特别是开中断要延时,开中断前清除中断标志位...

使用特权

评论回复
6
hotpower| | 2009-1-16 20:16 | 只看该作者

等待系统稳定~~~

void SystemObj::PllInit(void)
{
volatile unsigned int start;
  do {
    SREGs.CLKMD.Regs = 0;
    __nop(); 
  }
  while(SREGs.CLKMD.Bits.PLLSTATUS);
  SREGs.CLKMD.Regs = (9 << CLKMD_PLLMUL) | (30 << CLKMD_PLLCOUNT) | (1 << CLKMD_PLLONOFF) | (1 << CLKMD_PLLNDIV) | (1 << CLKMD_PLLSTATUS);//100M
  for (start = 0; start < 10000; start ++);//等待系统稳定
}

使用特权

评论回复
7
草履虫| | 2009-1-16 23:52 | 只看该作者

读写I2C还设及到读写的速度,用仿真器和实际运行的时钟是

读写I2C几个关键的问题:
1. 读写的时序,包括速度,逻辑。
2. 器件的参数,包括使用电压,驱动电流(上拉电阻的大小对速度有影响,同时上拉电阻是必不可少的),如果CLK上没有电阻可能还可以工作(我做过)。如果是DATA上没有(你的单片机没有内部上拉,或上拉很弱),你只能写进1,0你是无论如何也写不进去的。

hotpower说的很重要的点。一般情况下,系统在电压还没有达到稳定时,单片机就会工作,如果你的电压上升比较慢,在还没有达到稳定前就进行操作很有可能也不进去,或者只写了一部分,或者写错。
要是有示波器的话,把信号抓下来一分析就清楚是怎么回事了。
你写的I2C是不是像网上很多人说的没有判断真正的ACK,直接用延时呀?这种写法是最害人的,千万别用这种方法,要规规矩矩的按照协议搞。

使用特权

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

本版积分规则

8

主题

14

帖子

0

粉丝