首页 » 通讯 » 24C02读写事理读写地址分配事理_字节_地址

24C02读写事理读写地址分配事理_字节_地址

南宫静远 2024-11-11 01:26:09 0

扫一扫用手机浏览

文章目录 [+]

1、EEPROM写数据流程

第一步,首先是 I2C 的起始旗子暗记,接着跟上首字节,也便是我们前边讲的 I2C 的器件地

24C02读写事理读写地址分配事理_字节_地址 通讯

址,并且在读写方向上选择“写”操作。

第二步,发送数据的存储地址。
24C02一共 256 个字节的存储空间,地址从 0x00~0xFF,我们想把数据存储在哪个位置,此刻写的便是哪个地址。

第三步,发送要存储的数据第一个字节、第二个字节„„把稳在写数据的过程中,

EEPROM 每个字节都会回应一个“应答位 0”,来见告我们写 EEPROM 数据成功,如果没有回应答位,解释写入不堪利。

在写数据的过程中,每成功写入一个字节,EEPROM 存储空间的地址就会自动加 1,当加到 0xFF 后,再写一个字节,地址会溢出又变成了 0x00。

2、EEPROM读数据流程

第一步,首先是 I2C 的起始旗子暗记,接着跟上首字节,也便是我们前边讲的 I2C 的器件地址,并且在读写方向上选择“写”操作。
这个地方可能有同学会诧异,我们明明是读数据为何方向也要选“写”呢?刚才说过了,24C02 一共有 256 个地址,我们选择写操作,是为了把所要读的数据的存储地址先写进去,见告 EEPROM 我们要读取哪个地址的数据。
这就犹如我们打电话,先拨总机号码(EEPROM 器件地址),而后还要连续拨分机号码(数据地址),而拨分机号码这个动作,主机仍旧是发送方,方向依然是“写”。

第二步,发送要读取的数据的地址,把稳是地址而非存在EEPROM 中的数据,关照EEPROM 我要哪个分机的信息

第三步,重新发送 I2C 起始旗子暗记和器件地址,并且在方向位选择“读”操作。

这三步当中,每一个字节实际上都是在“写”,以是每一个字节EEPROM 都会回应一个“应答位 0”。

第四步,读取从器件发回的数据,读一个字节,如果还想连续读下一个字节,就发送一个“应答位ACK(0)”,如果不想读了,见告 EEPROM,我不想要数据了,别再发数据了,那就发送一个“非应答位NAK(1)”。

和写操作规则一样,我们每读一个字节,地址会自动加 1,那如果我们想连续往下读,给EEPROM 一个 ACK(0)低电平,那再连续给 SCL 完全的时序,EEPROM 会连续往外送数据。
如果我们不想读了,要见告 EEPROM 不要数据了,那我们直接给一个NAK(1)高电平即可。
这个地方大家要从逻辑上理解透彻,不能大略的靠去世记硬背了,一定要理解明白。
梳理一下几个要点:

A、在本例中单片机是主机,24C02 是从机;

B、无论是读是写, SCL 始终都是由主机掌握的;

C、写的时候应答旗子暗记由从机给出,表示从机是否精确吸收了数据;

D、读的时候应答旗子暗记则由主机给出,表示是否连续读下去。

#include <reg52.h>

extern void I2CStart();

extern void I2CStop();

extern unsigned char I2CReadACK();

extern unsigned char I2CReadNAK();

extern bit I2CWrite(unsigned char dat);

/ E2读取函数,buf-数据吸收指针,addr-E2中的起始地址,len-读取长度 /

void E2Read(unsigned char buf, unsigned char addr, unsigned char len)

{

do //用寻址操作查询当前是否可进行读写操作

{

I2CStart();

if(I2CWrite(0x50 << 1)) //应答则跳出循环,非应答则进行下一次查询

{

break;

}

I2CStop();

}

while(1);

I2CWrite(addr); //写入起始地址

I2CStart(); //发送重复启动旗子暗记

I2CWrite((0x50 << 1) | 0x01); //寻址器件,后续为读操作

while (len > 1) //连续读取len-1个字节

{

buf++ = I2CReadACK(); //末了字节之前为读取操作+应答

len--;

}

buf = I2CReadNAK(); //末了一个字节为读取操作+非应答

I2CStop();

}

/ E2写入函数,buf-源数据指针,addr-E2中的起始地址,len-写入长度 /

void E2Write(unsigned char buf, unsigned char addr, unsigned char len)

{

while (len > 0)

{

//等待上次写入操作完成

do //用寻址操作查询当前是否可进行读写操作

{

I2CStart();

if(I2CWrite(0x50 << 1)) //应答则跳出循环,非应答则进行下一次查询

{

break;

}

I2CStop();

}

while(1);

//按页写模式连续写入字节

I2CWrite(addr); //写入起始地址

while(len > 0)

{

I2CWrite(buf++); //写入一个字节数据

len--; //待写入长度计数递减

addr++; //E2地址递增

if ((addr & 0x07) == 0) //检讨地址是否到达页边界,24C02每页8字节,

{

//以是检测低3位是否为零即可

break; //到达页边界时,跳出循环,结束本次写操作

}

}

I2CStop();

}

}

标签:

相关文章

智能电表协议引领能源管理新时代

随着我国能源需求的不断增长,传统电力系统在节能减排、提高效率等方面已无法满足社会发展需求。近年来,智能电表协议作为一种新型能源管理...

通讯 2025-01-06 阅读0 评论0

月工资制度,现代职场薪酬体系的基石

随着我国经济的快速发展,薪酬体系作为企业人力资源管理的重要组成部分,越来越受到广泛关注。在众多薪酬制度中,月工资制度因其公平、透明...

通讯 2025-01-06 阅读0 评论0

有线网卡协议,网络通信的基石与未来展望

随着互联网的飞速发展,网络通信已成为人们日常生活、工作、学习不可或缺的一部分。而有线网卡作为网络通信的重要设备,其协议的规范与优化...

通讯 2025-01-06 阅读0 评论0