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

目标: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模块电路

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值