AT24Cxx读写全面理解

article/2025/9/19 20:18:36

AT24Cxx - 电可擦可写E2PROM

芯片介绍

基础介绍\引脚介绍

AT24Cxx系列EEPROM是由美国Mcrochip公司出品,1-512K位的支持I2C总线数据传送协议的串行CMOS E2PROM,可用电擦除,可编程自定时写周期(包括自动擦除时间不超过10ms,典型时间为5ms)的。

串行E2PROM一般具有两种写入方式,一种是字节写入方式,还有另一种页写入方式。允许在一个写周期内同时对1个字节到一页的若干字节的编程写入,1页的大小取决于芯片内页寄存器的大小。其中,AT24C01具有8字节数据的页面写能力,AT24C02/04/08/16具有16字节数据的页面写能力,AT24C32/64具有32字节数据的页面写能力。

其引脚如图:

引脚图

A0、A1、A2:通过器件地址输入端 A0 A1 和 A2 可以实现将最多 8 个 24WC01 和 24WC02 器件 4 个 242C04 器件,2 个 24WC08 器件和 1 个 24WC16 器件连接到总线上。即其除了用于地址跨页选择外,还充当主机的选择引脚。由于该芯片最多支持256个字节的连续写入,因此每256个字节地址输入端会进行相应的电平变化。

WP:写保护,当WP为高电平时,该芯片只能读数据。

SCL、SDA:I2C协议的时钟线与数据线,详见协议使用笔记I2C章节。

控制命令

76543210
1010A2A1A0R/~W
  • 前四位为固定值 - 1010(0xAx)。

  • 根据芯片容量不同,从A0开始可作为地址线,从A2结尾可作为片选线。

以AT24C08为例:

AT24C08为一片容量为8Mbit(1Mbyte)的芯片,以256字节为一页,其共被分为4页,即需要两位地址线作为地址选择,以A2为0时为例(片选第一片,AT24C08最多可同时接入两片)选择情况如下:

321选择地址(byte)
0/1000 ~ 255
01256~ 511
10512 ~ 766
11767 ~ 1023
  • 最后一位为读写信号,高电平为读,低电平为写。

地址命令

地址命令为8bit的地址数据,为AT24Cxx的页内相对地址,值得注意的是:当使用芯片为AT24C32及以上时,其地址命令为两个8bit地址,前为地址高八位,后为地址低八位,发送方式同其它时序。

基础读写操作

写字节\页写

写字节:

写字节

  • 其格式为:

开始信号 --> 控制命令 --> 。–> 写入地址 --> 。–> 写入数据 --> 。–> 停止信号

注:。处为等待响应。

页写:

页写

  • 其格式为:

开始信号 --> 控制命令 --> 。–> 写入地址 --> 。–> 写入数据 --> 。–> …… --> 停止信号

注:。处为等待响应,……为省略。

使用页写 AT24C01 可一次写入 8 个字节数据 AT24C02/04/08/16 可以一次写入 16 个字节的
数据 页写操作的启动和字节写一样 不同在于传送了一字节数据后并不产生停止信号。

如果数据量大于限定的最大数据,则后续数据将会从预写入数据处覆盖先前的数据。

立即读字节\选择读\连续读

立即读字节:即读取单个字节

立即读

  • 立即读操作不需要发送读取数据地址,因为该数据地址为上次读数据的地址+1,即若上次读取的地址为N,则此次读取地址为N+1。若N为芯片最后一个地址(AT24C08为1023),则此次读取地址为 0。
  • 其格式为:

开始信号 --> 控制命令 --> 。–>读取数据 --> x --> 停止信号

注:。处为等待响应,x为发送非应答。

该读取方式由于使用情况略显复杂,因此在实际操作中使用较少,但在特定情况下使用方便。

选择读:

选择读

  • 选择读可读取芯片存储地址中任意地址地字节内容,即任意读一个字节
  • 其格式为:

开始信号 --> 控制命令(写) --> 。–> 读取地址 --> 。 --> 开始信号 --> 控制命令(读) --> 。 --> 读取数据 -->

x --> 停止信号

注:。处为等待响应,x为发送非应答。

主器件首先通过发送起始信号从器件地址和它想读取的字节数据的地址执行一个伪写操作,应答之后主器件重新发送起始信号和从器件地址此时R/W位置 1,响应并发送应答信号然后输出所要求的一个 8 位字节数据,主器件不发送应答信号但产生一个停止信号。

连续读:

连续读

  • 连续读操作可通过立即读或选择性读操作启动, 在立即读或选择读发送非应答时不发送非应答,发送应答并继续接收数据,此时地址指针会自动向后偏移1位。待接收数据完成后再发送非应答。
  • 此操作可以连续读任意个数据,可跨页,若读取数据大于其读取处至存储器尾地址的总字节数,则其将从绝对地址0处开始读取剩余数据。

代码示例

注意:以下代码以模拟I2C、AT24C08为例,需要初始化对应引脚。

此处仅介绍写字节与选择读的函数。

变量介绍

void IIC_StartOrStop(u8 mode);   //I2C开始结束
void IIC_WriteByte(u8 tData);	 //I2C写字节
u8 IIC_Wait_ACK(void);			//I2C等待从机应答
u8 IIC_ReadByte(void);			//I2C读字节
void IIC_Send_ACK(void);		//I2C发送应答
void IIC_Send_NonACK(void);		//I2C发送非应答
/*以上函数变量详情请参照 - 协议使用笔记I2C章节 - 此处不做说明*/

写字节

void AT24CXX_WriteByte(u16 addr, u8 tData)	  //addr - 芯片绝对地址,tData - 芯片发送的数据(8byte)
{u8 page = 0,offset = 0;page = addr / 256;						//将绝对地址转换成相应页offset = addr % 256;					//计算绝对地址在相应页的偏移量page <<= 1;page |= (0xa << 4);						//组装控制命令,最后一位为 0 - 写IIC_StartOrStop(OPEN);					//开始信号IIC_WriteByte(page);					//发送控制命令IIC_Wait_ACK();							//等待应答IIC_WriteByte(offset);					//发送页内偏移地址IIC_Wait_ACK();							//等待应答IIC_WriteByte(tData);					//写数据IIC_Wait_ACK();							//等待应答IIC_StartOrStop(CLOSE);					//结束信号delayMs(10);							//等待写入完成
}

选择读

u8 AT24CXX_ReadByte(u16 addr)			//addr - 读取地址 ,返回值 - 该地址处数据
{u8 rData,page = 0,offset = 0;page = addr / 256;offset = addr % 256;				//同上page <<= 1;page |= (0xa << 4);					//伪写IIC_StartOrStop(OPEN);IIC_WriteByte(page); IIC_Wait_ACK();IIC_WriteByte(offset);IIC_Wait_ACK();page |= 1;							//至最低为为读(1)IIC_StartOrStop(OPEN);IIC_WriteByte(page);IIC_Wait_ACK();rData = IIC_ReadByte();IIC_Send_NonACK();					//发送非应答IIC_StartOrStop(CLOSE);return rData;						//返回数据
}

http://chatgpt.dhexx.cn/article/leHCdekF.shtml

相关文章

mongodb-cxx-driver使用

mongocxx driver 是构建在 MongoDB C driver 之上的 1.首先需要安装mongo-c-driver wget https://github.com/mongodb/mongo-c-driver/releases/download/ 1.23.1/mongo-c-driver-1.23.1.tar.gz tar xzf mongo-c-driver-1.23.1.tar.gz cd mongo-c-driver-1.23.1 mkdir cmak…

老胡的周刊(第095期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 tabby[2] 自托管的 AI 编码助手&#xff0c;…

程序员养生指北

吴小胖第八次推送 阅读时间预计3分钟~ 熬夜篇 互联网人熬夜是不能避免的&#xff0c;原因却各不相同。 不加班的时候&#xff0c;总会对自己说&#xff0c;今天一定早睡&#xff0c;然鹅... 午休篇 熬夜的程序员总想依靠午休补觉&#xff0c;然鹅... 更不幸的是&#xff0c;互联…

老杨说运维 | 中国IT运维市场的现状与趋势

文章内容来源《第一新声》 对擎创科技CEO杨辰(老杨)的专访 前言&#xff1a; 中国目前正面临百年未有之大变局&#xff0c;在这个变局中&#xff0c;不稳定性和不确定性正在增强。疫情持续反复、国际形势变化多端&#xff0c;导致国内多个行业出现发展增速下降、产供销节奏打…

老杨说运维 | 非常重要,事关转型

《荀子》有云&#xff1a;“水能载舟&#xff0c;亦能覆舟。”在公司日常运营过程中&#xff0c;数据指标就像是水&#xff0c;孕育着生命&#xff0c;承载着万物。科学的数据指标能指引公司在正确的道路上不断前进&#xff0c;使平淡无常的业务焕发新生&#xff0c;而不合理的…

学习springcloud的一些心得体会——老卫的天气预报系统

1&#xff1a;建立天气预报springboot系统 首先先建立一个天气预报的springboot系统&#xff0c;具体流程如下&#xff1a; &#xff08;1&#xff09;从cityList.xml中获取城市信息&#xff0c; &#xff08;2&#xff09;然后根据下面的链接获取各个城市的天气预报信息&am…

学习springboot项目的一些心得-----老卫的博客系统

去年年底接触了springboot框架&#xff0c;这两天复习了一遍&#xff0c;主要是跟着老卫博客系统这个课程学习的。 springboot介绍&#xff1a;总的感觉springboot就是基于spring开发的一套框架&#xff0c;好处就是不用配置复杂的依赖包&#xff0c;xml的一些文件&#xff0c…

thymeleaf和spring boot的集成踩坑总结(练习项目是老卫的博客项目)

bug1: 2019-08-08 16:44:38.102 ERROR 19810 — [nio-8080-exec-8] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-8] Exception processing template “users/list”: Error resolving template “users/list”, template might not exist or might not be …

《跟老卫学 HarmonyOS 开发》:以父之名・码力全开!写段 HarmonyOS 祝父亲节

#父亲节祝福语# 爸爸在我心中就像旗帜 他教会我做人与处事的方向 在父亲节这个特别的日子里 我想对爸爸说长大以后我就要成为您 使用ArkUI开发“父亲节的祝福” 使用ArkUI开发“父亲节的祝福”&#xff0c;效果如下&#xff1a; 使用DevEco Studio整体开发HarmonyOS整体时…

【老卫搞机】090期:键盘?主机?全功能键盘主机!

这是一台我个人DIY的第二代键盘主机&#xff08;第一代见&#xff1a;【老卫搞机】074期&#xff1a;键盘&#xff1f;主机&#xff1f;键盘主机&#xff01;_哔哩哔哩_bilibili&#xff09;。相比与第一代的作品&#xff0c;第二代产品除了USB 3接口、USB 2接口、mini HDMI接口…

【老卫拆书】009期:Vue+Node肩挑全栈!《Node.js+Express+MongoDB+Vue.js全栈开发实战》开箱

今天刚拿到一本新书&#xff0c;叫做《Node.jsExpressMongoDBVue.js全栈开发实战》&#xff0c;做个开箱。 外观 先从外观上讲&#xff0c;这本是全新的未开封的&#xff0c;膜还在。 这本书介绍从技术原理到整合开发实战&#xff0c;以丰富的项目展现全栈开发的一个技巧。 …

【老卫搬砖】034期:HarmonyOS 3.1 Beta 1初体验,我在本地模拟器里面刷短视频

今天啊打开这个DevEco Studio的话&#xff0c;已经提示有3.1Beta1版本的一个更新啊。然后看一下它的一些特性。本文也演示了如何在本地模拟器里面运行HarmonyOS版短视频。 主要特性 新特性包括&#xff1a; Added support for Windows 11 64-bit and macOS 13.x OSs, as well…

【老卫搞机】135期:华为开发者联盟社区2022年牛人之星奖品开箱!

首先祝大家兔年大吉&#xff0c;身体安康&#xff0c;钱兔似锦&#xff01;今天咱们来开箱一件特殊的奖品&#xff0c;来自华为开发者联盟社区的新年祝福——2022年牛人之星。 华为有钱&#xff01;惯例用的是顺丰快递&#xff0c;各位看一下这里面是有很多件的 有这两件。第一…

【老卫搞机】136期:华为开发者联盟社区2022年度战码先锋2期开源贡献之星

首先祝大家兔年大吉&#xff0c;身体安康&#xff0c;钱兔似锦&#xff01;接上次的“2022年牛人之星”&#xff08; https://developer.huawei.com/consumer/cn/forum/topic/0203109930647268095&#xff09;&#xff0c;今天咱们来开箱另外一件特殊的奖品&#xff0c;来自华为…

老卫带你学---SVM支持向量机

老卫带你学—SVM支持向量机 学习目标&#xff1a; 理解支持向量机的知识结构理解支持向量机的原理与目标理解算法推导的核心过程和意义&#xff08;关键是损失函数与约束条件的意义&#xff09;理解核函数的意义与方法 知识结构 hard margin SVM&#xff1a;可以容易的找到…

老卫带你学---推荐系统

机器学习的一种重要应用就是推荐系统。 比如我们的淘宝推荐&#xff0c;豆瓣推荐&#xff0c;优酷电影推荐等等都用到了推荐系统。 那我们来谈一谈推荐系统的细节。 推荐系统评价指标 要了解推荐系统&#xff0c;先了解其评价指标。 1.准确度 precisionTP/TPFP; recallTP/TP…

老卫带你学---最大熵模型与EM算法

最大熵模型与EM算法 最大熵模型与EM算法在机器学习里面尤为重要。接下来我们一步一步的介绍相关细节&#xff1a; 先验概率与后验概率 后验概率就是通过已有的数据来推断未知的数据&#xff0c;先验概率就是直接对未知的数据进行预测。 所以&#xff0c;我们机器学习的目标就…

SQL创建数据库提示“无法获得数据库 ‘model‘ 上的排他锁。请稍后重试该操作”处理方法

use master --选择数据库 go declare sql varchar(100) while 11 begin select top 1 sql kill cast(spid as varchar(3)) from master..sysprocesses where spid > 50 and spid <> spid and dbid db_id(model)if rowcount 0 break ;print(sql) --打印杀掉进…

SQL Server 数据库创建与删除

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;创建数据库方式 1. 数据库创建方式一 SSMS 方式 &#xff08;1&#xff09; 点击新建数据库想选项 &#xff08;2&#xff09; 新建数据库页面配置 2. 数据库创建方式二 T-SQL 方式 &#xff08;三&…

SQL Server基础学习——用代码创建数据库和表

&#xff11;.连接成功后出现下述页面&#xff0c;那么我们学习第一步先建个数据库和表 &#xff12;.建立之前要了解基础SQL语言 SQL语言是集DDL、DML、DCL 于一体的数据库语言。 &#xff11;&#xff09;DDL语句引导词&#xff1a;Create&#xff08;建立&#xff09;、Alt…