AT24Cxx的使用
一、组织结构
1、可按字节写;
2、页写:8字节页(24C02),16字节页(24C04/08/16),32字节页(24C32/64);
3、可按字节随机和序列读;
4、自动递增地址;比如我们往0x00地址开始写入数据,当我们写入的是2个字节数据时,EEPROM内部字地址会自动加1变为0x01,此时我们对0x01地址读取,则可以读到我么写入的第二个数据。
二、引脚说明
三、器件寻址
如下图:A0为高电平,A1、A2为低电平时,器件地址为:0xA2
A0、A1、A2均为低电平时,器件地址为:0xA0
注意:此时没有算读写位,我们在收发数据时是需要算上读写位的。如:写操作为0,如下后一个器件地址为:0xA0,读操作为1,器件地址则为0xA1;
四、读写操作
1、字节写
写操作要求在接收器件地址和ACK应答后,接收8位的字地址。接收到这个地址后EEPROM应答0,然后是一个8位数据,接收这8位数据后,应答0,接着主器件发送停止条件。
2、页写
24C02器件按8字节/页执行页写,页写初始化与字节写相同,只是器件不会在第一个数据后发送停止条件,而是在EEPROM收到每个数据后都应答0,最后由主器件发送停止条件。
接收到每个数据后,字地址的低3位(因为24C02一页有8字节数据,低3位为0-7)或4位(24C04/8/16)或5位(24C32/64)内部自动加1,高位地址不变,维持在当前页内。当内部产生的字地址达到该页边界地址时,随后的数据将写入该页的页首。如果超过8个(24C02)或16个(24C04)数据传给了EEPROM,字地址将回转到该页的首字节,先前的字节将会被覆盖。
实际运用:实际使用中应该是从0x00地址写入我们的整个结构体变量,读取时也是读取整个大小。避免一直重复写入数据,其寿命为100万次,放到死循环里也可以很快写坏,存变量时,可以判断是否相等,相等则不写。
如下,当我们实现了页写以后,可以传入整个结构体变量,强转一下,sizeof会自动计算整个结构体大小,通过下面的打印我们也可以看到,字节自动补齐了。可直接写入内存。
如上代码实际写入内存数据如下,注意我们在使用逻辑分析仪时,需要选择时钟的上升沿或者下降沿来采集数据,否则会没有数据,另外两张逻辑分析仪截图是在数据线上选择边沿采集,不准确。我们可以看到时钟变化多,数据波形少。
3、应答:只有内部写周期完成,EEPROM才应答0,之后可继续读/写操作。
4、读操作(当前地址读)
读操作与写操作初始化相同,只是器件地址中读写选择位为1.
内部地址计数器保存着上次访问时最后一个地址加1的值,只要芯片有电,该地址就一直保存。当读到最后页的最后字节,地址会回转到0;当写到某页尾的最后一个字节,地址会回转到该页的首字节。
接收器件地址(读/写选择位为1)、EEPROM应答ACK后,当前地址的数据就随时钟送出。主器件无需应答0,但需要发送停止条件。
5、随机读
随机读需先写一个目标地址,一旦EEPROM接收器件地址和字地址并应答了ACK,主器件就产生一个重复的起始条件。
然后主器件发送器件地址(读/写选择位为1),EEPROM应答ACK,并随时钟送出数据。主器件无需应答0,当需发送停止条件。
6、顺序读
顺序读可以通过“当前地址读”或“随机读”启动。主器件收到一个数据后,应答ACK。只要EEPROM接收到ACK,将自动增加字地址并继续随时钟发送后面的数据。若达到存储器地址末尾,地址自动转回到0,仍可继续顺序读取数据。
主器件不应答0,而发送停止条件,即可结束顺序读操作。
如图为读上面写入的三个数据的时序图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-05-27 蔡勒公式:计算星期
2022-05-27 DES加解密算法