AT24C02跨页写数据函数
Contents
AT24C02写数据介绍
EEPROM的写数据分为:
- 字节写数据模式
- 页写数据模式;
字节写就是一个地址一个数据的写,页写是连续写数据,一个地址多个数据的写,但是页写不能自动跨页,如果超出一页长度,超出的数据会覆盖原先写入的数据。
跨页写数据实现原理:
通过IIC读写AT24C02,百度上面有一大堆例程。但向AT24C02写一个字符串时,例程上基本上都是以页写的形式呈现。
页写入的方式只能写满一页,不能跨页继续写。
在此补充一个实现跨页写的函数,希望可以帮助到大家:
跨页写数据代码实现
|
|
代码说明
在上面的代码中,有两个宏定义,第一个是一页可以写入的字节。在进行页写入的时候,比如写到了地址0x08,那么我们就要对这个地址进行判断,因为0x08已经是新的一页,所以 我们就要给一个停止信号,重新开始一次IIC通信,如何判断一个地址是否是新的一页,就是通过if(WriteAddr % Page_Byte == 0)这条语句实现的。
第二个宏定义是最大可写入地址,当写入的字节数大于剩余的可写入空间时,就可以通过if((Max_Addr-WriteAddr) < BufSize)这条语句实现,这样的代码更加规范、安全。
注意事项
由于E2PROM的半导体工艺特性,对E2PROM的写入时间需要5~10ms,但AT24Cxx系列串行E2PROM芯片内部设置了一个具有SRAM性质的输入缓冲器,称为页写缓冲器。
CPU对该芯片写操作时,AT24Cxx系列芯片先将CPU输入的数据暂存在页写缓冲器内,然后,慢慢写入E2PROM中。
因此,CPU对AT24Cxx系列E2PROM一次写入的字节数,受到该芯片页写缓冲器容量的限制。
页写缓冲器的容量为16B,若CPU写入字节数超过芯片页写缓冲器容量,应在一页写完后,隔5~10ms重新启动一次写操作。
而且,若不是从页写缓冲器页内零地址0000写起,一次写入地址超出页内最大地址1111时,也将出错。
例如,若从页内地址0000写起,一次最多可写16字节;
若从页内地址0010写起,一次最多只能写14字节,若要写16字节,超出页内地址1111,将会引起地址翻卷,导致出错。
Author 软件开发大郭
LastMod 2023-07-13