单片机
返回首页

单片机小白学习之路(二十七)---EEPROM-IIC总线理解(二)

2020-03-30 来源:eefocus

目标:EEPROM-IIC总线理解(二)

在实际的应用中,保存在单片机RAM中的数据,掉电后数据就丢失了,保存在单片机的FLASH中的数据,又不能随意改变,也就是不能用它来记录变化的数值。但是在某些场合,我们又确实需要记录下某些数据,而它们还时常需要改变或更新,掉电之后数据还不能丢失,比如我们的家用电表度数,我们的电视机里边的频道记忆,一般都是使用EEPROM来保存数据,特点就是掉电后不丢失。我们板子上使用的这个器件是24C02,是一个容量大小是2Kbit位,也就是256个字节的EEPROM。一般情况下,EEPROM拥有30万到100万次的寿命,也就是它可以反复写入30-100万次,而读取次数是无限的。

24C02是一个基于I2C通信协议的器件,因此从现在开始,我们的I2C和我们的EEPROM就要合体了。但是大家要分清楚,I2C是一个通信协议,它拥有严密的通信时序逻辑要求,而EEPROM是一个器件,只是这个器件采样了I2C协议的接口与单片机相连而已,二者并没有必然的联系,EEPROM可以用其他接口,I2C也可以用在其它很多器件上。


(5)数据传输

I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送(写)数据(W),“1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。


在总线的一次数据传送过程中,可以有以下几种组合方式:

a、主机向从机发送数据,数据传送方向在整个传送过程中不变,即就连那一个从机,白色框子里的A是从机发来的表示一个字节接受完了,如果是/A则表示从机没有响应则结束

13367077-2e9ec4ff8e99fe06.png

组合方式1


b、主机在第一个字节后,立即从从机读数据,灰色框里的A是主机发出的响应,表示一个字节数据读取完了

13367077-fe5acdba8dd4455b.png

组合方式2


c、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好相反

13367077-92a356fcdad7809b.png

图片2.png



2.EEPR0M(AT24C02)简介

AT24C01/02/04/08/16...是一个1K/2K/4K/8K/16K位串行CMOS28/256/512/1024/2048个8位字节,AT24C01有一个8字节页写缓冲器,
AT24C02/04/08/16有一个16字节页写缓冲器。该器件通过I2C总线接口进行操作,它有一个专门的写保护功能。

AT24c02就 是一个挂在总线上的从机可以往里面写数据也可以读里面的数据,而单片机就是主机来都里面或往里面写数据

13367077-162ea5d3db807bd6.png

AT24C02


13367077-22ccd2e9c644cece.png

功能说明

AT24C02器件地址为7位,高4位固定为1010,低3位由 A0/A1/A2信号线的电平定。因为传输地址或数据是以字节为单位传送的,当传送地址时,器件地址占7位,还有最后一位(最低位R/W)用来选择读写方向,它与地址无关。


13367077-1d4fbdc6138b64d8.png

图片5.png

13367077-c60cd2098d689738.png

起始与应答

  • 起始时,起始信号的数据线的高电平要至少保持4.7us,低电平最少要4us,I2C通信的起始信号的定义是SCL为高电平期间,SDA由高电平向低电平变化产生一个下降沿,表示起始信号

void I2CStart()  //产生总线起始信号

{

    I2C_SDA = 1; //首先确保SDA、SCL都是高电平

    I2C_SCL = 1;

    I2CDelay();

    I2C_SDA = 0; //先拉低SDA

    I2CDelay();

    I2C_SCL = 0; //再拉低SCL

}

  • 终止时,终止信号的数据线的低电平最少4us,高电平最少4.7us,I2C通信停止信号的定义是SCL为高电平期间,SDA由低电平向高电平变化产生一个上升沿,表示结束信号
    应答就是SDA是低电平时,SCL要保持高电平大于4us
    非应答就是SDA是高电平时。SCL保持高电平大于4us

void I2CStop()   //产生总线停止信号

{

    I2C_SCL = 0; //首先确保SDA、SCL都是低电平

    I2C_SDA = 0;

    I2CDelay();

    I2C_SCL = 1; //先拉高SCL

    I2CDelay();

    I2C_SDA = 1; //再拉高SDA

    I2CDelay();

}

13367077-7a8555d626303ac3.png

发送数据时序

  • 数据传输:I2C通信是高位在前,低位在后。I2C没有固定波特率,但是有时序的要求,要求当SCL在低电平的时候,SDA允许变化,也就是说,发送方必须先保持SCL是低电平,才可以改变数据线SDA,输出要发送的当前数据的一位;而当SCL在高电平的时候,SDA绝对不可以变化,因为这个时候,接收方要来读取当前SDA的电平信号是0还是1,因此要保证SDA的稳定不变化,如上图中的每一位数据的变化,都是在SCL的低电平位置。


3.EEPROM模块电路

13367077-e732d33c7eea87a0.png

EEPROM模块电路

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 如何构建一个触摸传感器电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章