本章介绍使用IO口模拟IIC。

I2C物理层

SCL:时钟信号线 SDA:数据信号线
由上拉电阻保证IIC总线空闲状态下为高电平。

数据有效性规定

SCL为高电平时,SDA要保持电平稳定。
SCL为低电平时,SDA才允许数据变化。
数据传输以字节为单位,高位先行。
数据有效性规定

起始和停止时序

SCL为高电平时,SDA由高电平变为低电平的下降沿。———— 起始信号
SCL为高电平时,SDA由低电平变为高电平的上降沿。———— 停止信号
起始与停止
起始和停止都是由主机发出。起始时序后,总线处于占用状态,停止时序后,总线处于空闲状态(高电平)。

应答时序和非应答时序

主机或从机发送一个字节的数据后,需要紧跟一个应答信号。
谁接收谁应答。不想接收就不应答。
SCL高电平,SDA被接收方拉低。———— 应答时序
SCL高电平,SDA没有被拉低。———— 非应答时序
注:非应答后会紧跟着停止信号。
应答与非应答

数据传输

IIC读
IIC写
IIC指定地址读

1
$ printf("Hello!");