蓝桥杯嵌入式第八课--EEPROM读写
创始人
2025-05-30 09:17:38

前言

E2PROM的读写主要是考察IIC的使用,但是在比赛当中I2C的各种驱动文件都是直接给出的,因此我们需要做的工作就是根据EEPROM的读写时序配出读写的函数来。

EEPROM硬件连接图

我们可以看到IIC的数据线(已上拉)有两路去处,一路向上通往EEPROM(U2),一路向左通向编程电阻U3,为了确认IIC控制的是哪路设备,这里就有一个Device地址的问题:

从电路图可知,地址中的A2A1A0三位在硬件中都是接地的(0),因此可以得出读写的Device地址:

  • 写地址:1010_0000,即0xa0

  • 读地址:1010_0001,即0xa1

EEPROM读写时序

我们考试中可以打开芯片手册AT24C02,可以看到读写的时序图:

一、写字节

  1. 启动

  1. 发送0xa0

  1. 等待ACK

  1. 发送写地址

  1. 等待ACK

  1. 发送数据

  1. 等待ACK

  1. 结束

每个步骤分别对应着IIC的对应函数

二、读字节

  1. 启动

  1. 发送0xa0

  1. 等待ACK

  1. 发送读地址

  1. 等待ACK

  1. 启动

  1. 发送0xa1

  1. 等待ACK

  1. 读取数据

  1. 停止

可以看到,读数据时有一个重复启动总线的过程,值得我们注意一下。从上面的发送时序可以看出,除了启动和停止,还要读操作,其它的基本上是发送操作的后面接一个等待ACK ,这是一个特征。

实例程序

一、读

uint8_t EEPROMread(uint8_t address) //读输入的参数就只有地址,数据类型是uchar
{uint8_t date=0;IIC_Start();IIC_SendByte(0xa0);IIC_WaitAck();IIC_SendByte(address);IIC_WaitAck();IIC_Start();IIC_SendByte(0xa1);IIC_WaitAck();date = IIC_RecByte();IIC_Stop();return date;
}

二、写

void EEPROMwrite(uint8_t address,uint8_t data)
{IIC_Start();              //IIC起始信号IIC_SendByte(0xa0);       //发送器件写地址IIC_WaitAck();            //等待应答信号IIC_SendByte(addr);       //发送数据的位置IIC_WaitAck();            //等待应答信号IIC_SendByte(value);      //发送要写的数据IIC_WaitAck();            //等待应答信号IIC_Stop();               //发送停止信号
}

写这个程序的要点在于,地址与数据的类型都是uint8_t类型的。

总结

使用EEPROM的步骤主要分为两部分:

  1. 相关库函数移植

  1. 根据时序图编写读写操作代码

从开始到现在第八课,蓝桥杯大部分内容都已经包含在内,接下来本专栏的重点会集中在实战应用上,并且不断补充涉及的知识点。

相关内容

热门资讯

吸猫伐是什么意思 吸猫是吸哪里 作为铲屎官,相信对于网络上流行的各种与猫咪相关的梗都是了然于心的,什么吸猫啦,撸猫啦,云养猫啦……等...
重庆属于哪个省份的 重庆在中国... 重庆有多大,大到超出我们的想象,重庆作为我国4个直辖市之一,印象里应该跟京津沪面积差不多,可事实上却...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...