在单片机模拟软件iic时上拉电阻一般为4.7K。
Start: 如上图时序图所示,在SCL高电平期间,SDA由高至低变化即可视为起始信号,如下图代码所示:先将总线与时钟线全部拉高,延迟一个iic周期(由于该通信需电平持续一段时间才能被检测到),再拉低SDA,最后拉低SCL。
Data/addr: 如上图时序图所示,在SCL低电平时间,SDA才能变化其电平来决定下一次输出的逻辑,即SDA的电平变化只能在SCL为低电平时进行,其他情况不被允许。该协议遵循高位先行原则。如下图代码所示:先判断要发送的字节的每一个位的0/1而拉低或者拉高SDA,然后拉高SCL,最后拉低SCL。一个字节数据放完毕后,拉高SDA,释放总线,以便读取ACK。(延时意义同上)
应答信号:处于数据位中的第9位,两种情况:NACK与ACK,它们的区别为,NACK信号的SDA电平为高,而ACK信号的SDA电平为低,如下图代码所示:(延时作用同上)
Stop:如上图时序图所示:当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号。即下图代码所示,先拉低SDA,然后拉高SCL,最后拉高SDA。(延时作用同上)