蓝桥杯嵌入式第八课--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. 根据时序图编写读写操作代码

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

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...