EEPROM CAT24CXX实现分页读、写数据

简介: EEPROM CAT24CXX实现分页读、写数据

目录

1、CAT24CXX分页读、写数据原理


2、代码实现


近日驱动CAT24C08时遇到这样一个问题:


通常配置数据写入到EEPROM,256个字节基本可满足需求,最近做的一个项目数据量较大,且不确定以后时候还需要增加保存的数据。所以打算使用分页读、写数据,使不同类型的配置数据空间较大一些。


本项目EEPROM地址使用如下所示:


配置1数据:0Byte~1000Byte;

配置2数据:1001Byte~1100Byte;

配置3数据:1101Byte~1200Byte;

配置4数据:1201Byte~1300Byte。

这样该如何实现呢?


1、CAT24CXX分页读、写数据原理

本博文以CAT24C08为例进行讲解。


如何实现CAT24C08分页读、写数据,datasheet中有说明很清楚。



image.png







CAT24C08,共有8KB的存储空间,可通过A2、a9和a8,来选择设备地址区域,也就是=8个地址区域,每个地址区域有64页,每页16个字节, 故:64X16X8=8192B,也就是8KB。


A2、a9和a8选择地址区域,数值范围如下表所示:

image.png

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

所以,可将配置数据按照以下地址块分配:

image.png

地址区域0

配置1数据:0Byte~1000Byte

地址区域1

配置2数据:1001Byte~1100Byte

配置3数据:1101Byte~1200Byte

配置4数据:1201Byte~1300Byte

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;

以此类推,剩下区域都可以如此操作,然后就可以一页页读写数据了。


相关文章
|
6月前
|
存储 C++
webserver--Buffer类实现内存缓冲区读写(全代码)
webserver--Buffer类实现内存缓冲区读写(全代码)
|
4月前
|
存储 C++ iOS开发
采用read()和write()读写二进制文件
C++ 中文本与二进制文件读写的区别在于数据存储格式和效率。文本文件以可读字符存储,浪费空间且不利于高效查找。二进制文件紧凑且高效,适合存储结构化数据如CStudent对象。`>>`和`<<`运算符适用于文本文件,而二进制文件需用`read()`和`write()`方法。`write()`从文件写指针位置写入数据,`read()`从文件读指针位置读取,两者都会移动指针。示例代码展示了如何使用这些方法处理学生信息。
51 12
|
6月前
|
存储 文件存储
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
40 1
|
11月前
|
C#
C# (File方法)对文件的操作,字节写入和读取
C# (File方法)对文件的操作,字节写入和读取
|
存储 C++ iOS开发
C++ 采用read()和write()读写二进制文件
以文本形式读写文件和以二进制形式读写文件的区别,并掌握了用重载的 >> 和 << 运算符实现以文本形式读写文件。在此基础上,本节继续讲解如何以二进制形式读写文件。 举个例子,现在要做一个学籍管理程序,其中一个重要的工作就是记录学生的学号、姓名、年龄等信息。这意味着,我们需要用一个类来表示学生,如下所示: class CStudent { char szName[20]; //假设学生姓名不超过19个字符,以 '\0' 结尾 char szId[l0]; //假设学号为9位,以 '\0' 结尾 int age; //年龄
118 0
|
传感器 存储 C++
STM32读取BH1750光照强度数据打印到串口
BH1750是一种数字式环境光强度传感器(Digital Light Sensor),也称为其他名称,例如GY-302传感器、BH1750FVI传感器等。它的工作原理是通过收集光线照射到传感器上的量来测量环境亮度。
275 0
|
缓存 Go 开发工具
使用hcache查看使用buff/cache的目录文件
我是使用的git从github拉取下代码,然后重新编译的, 因为此项目是go语言写的,所以编译时需要安装go语言 如下命令下载代码,或者直接下载zip压缩包,资源在 “此目录下文档中所用的资源” 目录中
473 0
|
缓存 编译器 C语言
缓冲区,缓存,fflush(stdin)如何使用?
缓冲区,缓存,fflush(stdin)如何使用?
195 0
缓冲区,缓存,fflush(stdin)如何使用?
|
存储 分布式计算 数据挖掘
HDF5文件的读取与储存| 学习笔记
快速学习 HDF5文件的读取与储存
1682 0
2-SII--应用本包下文件写入和读取
零、先说一下我的IO小工具方法: 1.IO读写: IO.png 2.读取InputStream /** * 读取InputStream * * @param is 输入流 * @return ...
961 0