今天总算实现了EEPROM的任意地址正确读写。驱动还是原来的驱动,只是把一些延迟什么的改短了一下,避免中断影响过多。还有就是正确认识了AT24C512的地址特性:
1,AT24C512的一页为128字节,在写数据的时候,如果一个写周期内字节数超过128个,会在当前页地址内循环写数据,也就是说,超过128字节的数据会把本页开始写的数据覆盖掉。所以,写EEPROM的时候,必须判断一次写入的字节数,然后分页写入。
2,一次读一页数据时,如果读取时候的起始地址不是整页地址的话,读写程序只会把本页剩余的部分读出来,超出一页地址的部分全部为0xFF.
如图所示:
从0x10开始递增向地址0x10写入128个字节的数据;
第一次读取的时候,从地址0x10读取128个字节的数据,发现后面16个为0xFF;
第二次读取的时候,从地址0x00读取128个字节的数据,发现前面16个字节的数据刚好是第一次写入的时候后16个字节的数据。