在本阶段的工作中,需要实现一个由GPIO模拟的I2C从机工程设计,以前只使用GPIO模拟I2C设计过主机,对于从机的设计,还是首次。下面就讲本次工作中从机设计思想做详细记录。
I2C的简单总结
对于I2C信号,需要有START,STOP,ACK,NACK,以及接收DATA。接收DATA是在SCL的低电平可能发生跳变,START和STOP是在高电平跳变。当SCL保持高电平的时候,SDA从H跳变到L,即为START;当SCL保持高电平的时候,SDA从L跳变到H,即为STOP。
START信号:
图1
STOP信号
图2
ACK信号
图3
主机下发地址以及读写信号
图4
程序设计以及分析
//为所使用的硬件平台的寄存器配置
#define WAIT_IIC_SCL_HIGH while ( !GET_SCL_DAT )
#define WAIT_IIC_SCL_LOW while ( GET_SCL_DAT )
#define WAIT_IIC_SDA_HIGH while ( !GET_SDA_DAT )
#define WAIT_IIC_SDA_LOW while ( GET_SDA_DAT )
#define IIC_WAIT_START WAIT_IIC_SCL_HIGH; WAIT_II