首先,I2C总线由两条线——串行数据(SDA)和串行时钟(SCL),这是同步通信,也是半双工通信,不能同时读写。每个器件都有一个唯一的地址识别,当总线空闲时I2C两条线都是高电平,只有当连接到总线的器件的输出级是漏级开路或者集电极开路,唯一的地址能够被正确的器件应答。因为应答信号为0,即低电平,能够拉低总线,而同时其它器件(除主机外)引脚仍表现出高阻态,即可以开始进行通信。
I2C读写EEPROM的通讯过程——
起始信号:在SCL为高电平,SDA由高变低,总线被认为处于忙的状态。调用I2C_GenerateSTART(...)产生起始信号,若起始信号成功发送则产生事件5:SB=1(I2C_SR1的0位置1,表示起始位已发送)
发送7位地址:这7位地址为EEPROM的设备地址,调用I2C_Send7bitAddress(...)发送,这里用的是8位读/写地址,LSB(最低位)为0表示写入,为1时表示读出。输入形参的时候要注意。每发送一个字节,接收器作出应答。若地址发送结束且接收到应答信号则产生事件6:ADDR=1(I2C_SR1的1位置1 ),这里的事件6位发送事件。
发送内存地