一、定义半双方、同步、串行传输通过电平触发写采样读主从架构主设备 (Master) 控制通信过程生成时钟信号SCL时钟线在整个通信过程中始终由主机控制输出从设备 (Slave) 被动响应主设备的命令支持多主多从同一总线上可以连接多个主设备和从设备同一时刻只能有一个主机和从机进行通信 但需要进行冲突检测和仲裁从机地址唯一性每个从设备都有唯一的 7 位或 1 0 位从机地址 主设备通过从机地址指定要通信的从设备二、引脚内部结构2.1 上拉电阻I 2C 芯片的 SCL 和 SDA 引脚是开漏输出的所以需要接一个上拉电阻来输出高电平由于输出的时候总是电平相反的所以需要输出控制输出相反的电平这负负得正2.2 开漏输出为了实现可以支持多主多从 以及多主仲裁只有主机让MOS管截至的时候上拉电阻才能拉成高电平不然3.3V的上拉电阻还不够把地拉成高电平实现线与所有从机的接收的时候的都是MOS导通输出低电平任何一个设备输出低电平 → 总线为低电平所有设备都输出高阻 → 总线为高电平上拉电阻拉高不会发生短路冲突仲裁等待当主设备一号在进行数据传输的时候会把电平拉低当主设备二号想数据传输的时候读取到了低电平就会进行仲裁等待IIC芯片的引脚上都有一个寄生电容没接入一个设备就会导致等效电容增大三、IIC协议3.1 协议规则只能由主机产生起始信号SCL线高电平的时候SDA线产生下降沿终止信号SCL高电平的时候SDA线产生上升沿主机和从机都能产生应答信号:时钟线SCL高电平期间SDA低电平非应答信号SCL高电平期间SDA高电平总线共闲SCL和SDA一直为高电平数据有效在时钟线高电平期间只能读数据数据线电平不能变低电平期间可以写入数据数据线电平才能变IIC线以字节为单位进行传输顺序为高位开始传输由主机发从机地址为7位移位表明加了读写位一般用一位表明方向或者10位3.2 主机读数据从机内部无寄存器或地址① 仅读取一个字节的数据S开始信号ACK应答NACK非应答P:结束② 连续读取多个字节的数据从机内部有寄存器或地址区分① 仅读取一个字节的数据W表示要去传感器里面寻址主机先发从机的地址然后发内部寄存器的地址地址确定好了后开始第二次通信读② 连续读取多个字节的数据3.3 主机写数据由于I2C从机都需要通过寄存器来存储和区分不同类型的数据所以没有寄存器的从机非常罕见。从机内部有寄存器或地址区分① 仅写入一个字节的数据② 连续写入多个字节的数据
IIC总线协议
一、定义半双方、同步、串行传输通过电平触发写采样读主从架构主设备 (Master) 控制通信过程生成时钟信号SCL时钟线在整个通信过程中始终由主机控制输出从设备 (Slave) 被动响应主设备的命令支持多主多从同一总线上可以连接多个主设备和从设备同一时刻只能有一个主机和从机进行通信 但需要进行冲突检测和仲裁从机地址唯一性每个从设备都有唯一的 7 位或 1 0 位从机地址 主设备通过从机地址指定要通信的从设备二、引脚内部结构2.1 上拉电阻I 2C 芯片的 SCL 和 SDA 引脚是开漏输出的所以需要接一个上拉电阻来输出高电平由于输出的时候总是电平相反的所以需要输出控制输出相反的电平这负负得正2.2 开漏输出为了实现可以支持多主多从 以及多主仲裁只有主机让MOS管截至的时候上拉电阻才能拉成高电平不然3.3V的上拉电阻还不够把地拉成高电平实现线与所有从机的接收的时候的都是MOS导通输出低电平任何一个设备输出低电平 → 总线为低电平所有设备都输出高阻 → 总线为高电平上拉电阻拉高不会发生短路冲突仲裁等待当主设备一号在进行数据传输的时候会把电平拉低当主设备二号想数据传输的时候读取到了低电平就会进行仲裁等待IIC芯片的引脚上都有一个寄生电容没接入一个设备就会导致等效电容增大三、IIC协议3.1 协议规则只能由主机产生起始信号SCL线高电平的时候SDA线产生下降沿终止信号SCL高电平的时候SDA线产生上升沿主机和从机都能产生应答信号:时钟线SCL高电平期间SDA低电平非应答信号SCL高电平期间SDA高电平总线共闲SCL和SDA一直为高电平数据有效在时钟线高电平期间只能读数据数据线电平不能变低电平期间可以写入数据数据线电平才能变IIC线以字节为单位进行传输顺序为高位开始传输由主机发从机地址为7位移位表明加了读写位一般用一位表明方向或者10位3.2 主机读数据从机内部无寄存器或地址① 仅读取一个字节的数据S开始信号ACK应答NACK非应答P:结束② 连续读取多个字节的数据从机内部有寄存器或地址区分① 仅读取一个字节的数据W表示要去传感器里面寻址主机先发从机的地址然后发内部寄存器的地址地址确定好了后开始第二次通信读② 连续读取多个字节的数据3.3 主机写数据由于I2C从机都需要通过寄存器来存储和区分不同类型的数据所以没有寄存器的从机非常罕见。从机内部有寄存器或地址区分① 仅写入一个字节的数据② 连续写入多个字节的数据