目标: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则表示从机没有响应则结束
组合方式1
b、主机在第一个字节后,立即从从机读数据,灰色框里的A是主机发出的响应,表示一个字节数据读取完了
组合方式2
c、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好相反
图片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总线接口进行操作,它有一个专门的写保护功能。
AT24C02AT24c02就 是一个挂在总线上的从机可以往里面写数据也可以读里面的数据,而单片机就是主机来都里面或往里面写数据
功能说明
起始与应答AT24C02器件地址为7位,高4位固定为1010,低3位由 A0/A1/A2信号线的电平定。因为传输地址或数据是以字节为单位传送的,当传送地址时,器件地址占7位,还有最后一位(最低位R/W)用来选择读写方向,它与地址无关。
图片5.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();
}
发送数据时序
- 数据传输:I2C通信是高位在前,低位在后。I2C没有固定波特率,但是有时序的要求,要求当SCL在低电平的时候,SDA允许变化,也就是说,发送方必须先保持SCL是低电平,才可以改变数据线SDA,输出要发送的当前数据的一位;而当SCL在高电平的时候,SDA绝对不可以变化,因为这个时候,接收方要来读取当前SDA的电平信号是0还是1,因此要保证SDA的稳定不变化,如上图中的每一位数据的变化,都是在SCL的低电平位置。
3.EEPROM模块电路
网友评论