IIC通信是一种同步半双工带数据应答的通信协议
可支持总线挂载多个设备
IIC时序
起始条件 在SCL高电平期间 SDA从高电平拉低到低电平
终止条件 SCL在高电平期间 SDA从低电平切换为高电平
发送一个字节 在SCL低电平期间 主机将数据的一位放到SDA线上(高位先行) 从机在高电平期间读取数据 在SCL高电平期间SDA不允许发生变化 一次循环8次即可发送完整的一个字节
接受一个字节 在SCL低电平期间 从机将数据的一位放到SDA线上(高位先行)主机在高电平期间读取数据 SCL在高电平期间不允许SDA变化 循环8次即可接受一个字节 在接受数据之前主机需要释放SDA
发送应答 主机在接受完一个字节之后 在下一个时钟发送一位数据 0表示应答 1表示非应答
接受应答 主机在发送完一个字节之后 在下一个时钟接受一位数据 判断从机是否应答 0表示应答 1表示非应答 主机在接受应答位之前 需要释放SDA
指定地址写 首先产生起始条件 然后主机发送指定设备的7位地址 第八位数据表示读还是写 0表示写 1表示读 然后接受从机的应答 如果有应答 接下来就需要发送需要写入的地址 发送完成等待从机应答 然后就是需要写入的数据 如果需要写入多个数据 直接重复发送即可 地址指针会自动加加
当前地址读 首先产生起始条件 然后主机发送需要通信设备的7位地址 第八位数据为1表示读操作 等待从机应答过后就可以读取从机当前指针所指向地址下的数据 如果需要读取多个数据 在读取完第一个数据过后给从机发送应答 从机在接受大应答过后就会继续发送下一个地址下的数据 当不需要接收是 只需给从机非应答即可结束通信
制定地址读 首先产生起始条件 然后主机发送需要通信从机设备的7位地址 第八位数据为0表示写操作 等待从机应答过后 再发送需要读取的地址 从机应答过后 在SCL高电平期间 拉低SDA产生重复起始条件 然后继续发送从机地址加0 这时候从机的指针就会指向我们想要读取的地址 直接读取数据即可