目录
近日驱动CAT24C08时遇到这样一个问题:
通常配置数据写入到EEPROM,256个字节基本可满足需求,最近做的一个项目数据量较大,且不确定以后时候还需要增加保存的数据。所以打算使用分页读、写数据,使不同类型的配置数据空间较大一些。
本项目EEPROM地址使用如下所示:
- 配置1数据:0Byte~1000Byte;
- 配置2数据:1001Byte~1100Byte;
- 配置3数据:1101Byte~1200Byte;
- 配置4数据:1201Byte~1300Byte。
这样该如何实现呢?
1、CAT24CXX分页读、写数据原理
本博文以CAT24C08为例进行讲解。
如何实现CAT24C08分页读、写数据,datasheet中有说明很清楚。
CAT24C08,共有8KB的存储空间,可通过A2、a9和a8,来选择设备地址区域,也就是=8个地址区域,每个地址区域有64页,每页16个字节, 故:64X16X8=8192B,也就是8KB。
A2、a9和a8选择地址区域,数值范围如下表所示:
A2 | a9 | a8 | |
0 | 0 | 0 | 地址区域0 |
0 | 0 | 1 | 地址区域1 |
0 | 1 | 0 | 地址区域2 |
0 | 1 | 1 | 地址区域3 |
1 | 0 | 0 | 地址区域4 |
1 | 0 | 1 | 地址区域5 |
1 | 1 | 0 | 地址区域6 |
1 | 1 | 1 | 地址区域7 |
所以,可将配置数据按照以下地址块分配:
地址区域0 |
|
地址区域1 |
|
2、代码实现
本代码驱动过程并没有什么变化,重点在于处理地址位,一般情况下我们默认使用地址区域0就满足开发需求,现在需要在读、写地址位基础上按位或地址区域。
使用地址区域0的时候,可默认地址位为:0XA0,读、写数据,地址如下所示:
-
uint8_t dev_addr_r = dev_addr | 0x01;
-
uint8_t dev_addr_w = dev_addr & 0xFE;
使用地址区域1的时候,可默认地址位为:0XA2,读、写数据,地址如下所示:
-
uint8_t dev_addr_r = dev_addr | 0x01;
-
uint8_t dev_addr_w = dev_addr & 0xFE;
以此类推,剩下区域都可以如此操作,然后就可以一页页读写数据了。
文章来源: handsome-man.blog.csdn.net,作者:不脱发的程序猿,版权归原作者所有,如需转载,请联系作者。
原文链接:handsome-man.blog.csdn.net/article/details/111696341