股票

AT24C16的灵异现象

这两天一直在处理数据掉电存储的问题,使用的存储芯片是AT24C16。已经不是第一次使用这个芯片,但是这下生生碰到了巨大的困难!访问芯片使用的通信协议是IIC,在前一段时间已经使用过掉电存储,存放了一个结构体,64字节,里面的数据都是unsigned char类型,用了一个多月了,没出现什么问题。昨天又加了一项存储,存储另一个结构体,48字节,6个浮点数。然后,各种问题就出现了。

先是出现保存数据不正确:我使用的方法是,定义一个指针,然后指向结构体地址,再按顺序一个个存储下来;同样,读取的时候再一个个读出来。存入的浮点数,再读出来之后,发现数据全部变为0,把每个字节打印出来后,其中有两三个字节竟然发生了变化!网上查了一下,建议保存浮点数的时候是使用共用体,我又创建了一个共用体,发现保存时的字节和我直接使用指针是一模一样的,于是放弃了这种方法,麻烦。但是!但是!但是!当我定义一个unsigned char类型数组,使用指针方法进行测试的时候,发现存储、读取完全没有问题。一旦我把指针指向结构体变量,它就不能存储了,莫非指针类型还不同?我已经强制类型转换了呀!

如果事情到这里就结束了,那还不那么让人费解,比较强制类型转换不是一个保险的方法。灵异之处在于:某年某月某日某时某分,当我一次次的把指针指向结构体变量和指向uchar数组测试保存问题是,突然发现,指向数组也不能保存数据了!也就是说,现在无论是指向结构体,还是指向uchar数组,都不能进行EEPROM保存了!!!到这里,正常会以为存储芯片被我玩坏掉了,但是当我写入读取之前那个正常结构体时,竟然还是完全正常。于是,我就开始了各种故障猜测:页地址不对?改为整页起始地址,失败;改为可使用的那个结构体起始地址,失败;改为写入后延迟读取,失败。。。。。。我崩溃了~~~

打赏
原文链接:,转发请注明来源!

发表评论