测试AT24C512已经两周,期间碰到个各种坑进行总结。
1,第五字符不正确问题。后来发现是读数据错误,使用地址偏移后,可以读出第五个数,但是新的第五个数打印输出继续错误。而使用数组直接赋值时,测试发现串口打印程序没有问题。这个坑现在已经丢失,无法重现了。
2,八字符限制问题。昨天又碰到一个新的问题,写入16个字符,然后读出时,前八个和后五个都是正确的,但是第9、10、11这三位输出结果是0。使用地址偏移,地址增加两位进行测试,变成了7、8、9位输出结果为0,证明是写入错误,数据读取还是正确的。
3,写周期总线占用时间很久,经常是写入命令执行后,系统死机,必须重启才能进行读取。估计是串口传输方面不够完善。
4,在EEPROM写入完成后到底有没有一个SDA拉低应答信号,现在还没有想到比较方便的方法进行监测。
5,总会莫名其妙碰到看门狗重启的情况,并且是一上电就重启,看程序里面有喂狗操作都不行,硬件错误?
6,系统延时函数不够精确,需要示波器进行修正一下。
7,单纯增加写入延迟时间,并不能保证每个数据都写入,只是写成功的数据多了一些而已,有点儿像logx曲线,后面斜率逐渐变小,再增加延时时间已经没有多大意义。
8,读操作和写操作的ACK函数是不同的。写操作是接收EEPROM传输过来的SDA低位数据,如果读到低位,进行下一个字节的写循环。读操作是在读取完毕一个字节后,向总线写入SDA=0,然后继续下一个读循环。
9, address_h=address<<8; address_l=address>>8; 这两句话没有弄明白是什么意思,地址高地位可以这样子设定?
10,当前遇到的问题是,MCU又卡在重启与复位过程中出不来了,把程序初始化全部屏蔽,只留while(1); 进行单循环时没有问题,但是加入系统初始化就会进入重启怪圈。
http://www.classnotes.cn/1114.html