一、I2C协议要点
1、接口方式简单,两条线(SCL和SDA)可以挂多个器件,而且任何一个器件都可以作为主机,同一时刻只能有一个主机。
2、属于同步通信,SCL时钟线负责收发双方的时钟节拍,SDA数据线负责传输数据,收发双方都以SCL时钟节拍为基准进行数据交换。
3、多应用与板内通信。
4、开漏引脚并联结构,必须外部添加上拉电阻。
5、通信数据流:
起始信号(Start):SCL为高电平期间SDA由高电平向低电平转换产生的下降沿
数据传输:高位在前,低位在后;
当SCL为低电平的时候,SDA允许变化,SCL为高电平时,SDA绝对不允许变化;
8位数据位后跟一位应答位(ACK);
停止信号(Stop):SCL为高电平期间SDA由低电平向高电平转换产生的上升沿
6、寻址:
主机首先发送一个从机地址,这个地址共7位,第8位是数据方向位,“0”表示发送数据(写),“1”表示请求数据(读);
对应地址从机如果存在,回应一个ACK(拉低SDA即输出0),如果不存在,无应答
二、EEPROM读写数据流程
写数据:
一、发送首字节,即器件地址,选择“写”操作;
二、发送数据存储首地址;
三、发送要存储的收据,每个字节发送完成,EEPROM都会回应一个应答位,如果没有应答位,说明写入不成功;每写入成功一个字节EEPROM存储空间的地址自动加一。
读数据:
一、发送首字节,即器件地址,选择“写”操作;
二、发送要读取数据的地址;
三、重新发送器件地址,选择“读”操作;
前三步操作主机发送数据,从机(EEPROM)会在每个字节结束发送应答位
四、从机(EEPROM)向主机发送所请求的数据,主机接受完一个字节,应答ACK(0)则继续读取下一字节,地址自动加一,应答NAK(1)结束读取