前提:SDA和SCL接上拉电阻;时钟线始终由主机持续产生恒定频率的信号
开始:主机在SCL为高电平时下拉SDA;
主机往从机传输数据:主机在SCL低电平时写数据(置0/置1),SCL高电平时从机读数据,如此进行8次,当一个字节(共8位)传输完成时,数据接收方(从机)返回一个ACK应答信号;
ACK信号:数据接收方拉低SDA代表接收到了;
从机往主机传输数据:从机在SCL低电平时写数据(置0/置1),SCL高电平时主机读数据,如此进行8次,当一个字节(共8为)传输完成时,数据接收方(主机)返回一个ACK应答信号;
结束:主机在SCL为高电平时上拉SDA;
小细节:I2C通信,stm32端口输出设置为开漏输出,不是推挽输出.
推挽输出情形,当主机释放SDA(置1)时,SDA相当于接到了VCC,从机无法实现下拉;
开漏输出情形,SDA高电平由上拉电阻(弱上拉)实现,从机可以实现下拉电平.