I2CInter-Integrated Circuit 是内部整合电路的称呼 是一种串行通讯总线 使用多主从架构 由飞利浦公司在1980年为了让主板、 嵌入式系统或手机用以连接低速周边装置而发展。 I2C的正确读法为I-squared-C 而I-two-C则是另一种错误但被广泛使用的读法 在中国则多以I方C称之。 I2C 总线支持任何IC 生产过程(NMOS CMOS、 双极性 。两线――串行数据SDA 和串行时钟 SCL 线在连接到总线的器件间传递信息。 每个器件都有一个唯一的地址识别无论是微控制器——MCU、 LCD 驱动器、 存储器或键盘接口 而且都可以作为一个发送器或接收器由器件的功能决定 。在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送 高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号 它们分别是开始信号、结束信号和应答信号。开始信号 SCL 为高电平时 SDA 由高电平向低电平跳变开始传送数据。结束信号 SCL 为高电平时 SDA 由低电平向高电平跳变结束传送数据。应答信号接收数据的 IC 在接收到 8bit 数据后向发送数据的 IC 发出特定的低电平脉冲表示已收到数据。CPU 向受控单元发出一个信号后等待受控单元发出一个应答信号 CPU 接收到应答信号后根据实际情况作出是否继续传递信号的判断。若未收到应答信号由判断为受控单元出现故障。IIC的特征只要求两条总线线路 一条串行数据线SDA因此是半双工的 一条串行时钟线SCL每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址 主机可以作为主机发送器或主机接收器它是多主机总线 如果两个或更多主机同时初始化 数据传输可以通过冲突检测和仲裁防止数据被破坏串行的8 位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达3.4Mbit/s连接到相同总线的IC 数量只受到总线的最大电容400pF 限制7位寻址在7位寻址过程中从机地址在启动信号后的第一个字节开始传输该字节的前7位为从机地址第8位为读写位其中0表示写1表示读。I2C总线规范规定标准模式I2C从机地址为7位长其次是读/写位。第一个字节的头7位组成了从机地址 最低位LSB 是第8 位 它决定了传输的方向。第一个字节的第8位是“0”,表示主机会写信息到被选中的从机第一个字节的第8位是“1” ,表示主机会向从机读信息。当发送了一个地址后系统中的每个器件都在起始条件后将头7 位与它自己的地址比较如果一样器件会判定它被主机寻址至于是从机接收器还是从机发送器都由R/W 位决定。在起始信号后必须传送一个从机的地址(7位)1~7位为7位接收器件地址第8位为读写位用“0”表示主机发送数据(W)“1”表示主机接收数据 R,第9位为ACK应答位紧接着的为第一个数据字节然后是一位应答位后面继续第2个数据字节。IIC的连接IIC可以接多个主设备多个从设备外围 设备。如下图存在多个主机、多个从机。当多主机会产生总线裁决问题。当多个主机同时想占用总线时企图启动总线传输数据就叫做总线竞争。I2C通过总线仲裁以决定哪台主机控制总线上拉电阻一般在4.7k~10k之间默认拉高IIC总线最多可以挂多少个设备由IIC地址决定8位地址减去1位广播地址是7位地址2^7128但是地址0x00不用那就是127个地址 所以理论上可以挂127个从器件。但是IIC协议没有规定总线上device最大数目但是规定了总线电容不能超过400pF。管脚都是有输入电容的PCB上也会有寄生电容所以会有一个限制。实际设计中经验值大概是不超过8个器件。IIC的高阻态漏极开路Open Drain即高阻状态适用于输入/输出其可独立输入/输出低电平和高阻状态若需要产生高电平则需使用外部上拉电阻高阻状态高阻状态是三态门电路的一种状态。逻辑门的输出除有高、低电平两种状态外还有第三种状态——高阻状态的门电路。电路分析时高阻态可做开路理解。为了避免总线信号的混乱IIC的空闲状态只能有外部上拉 而此时空闲设备被拉到了高阻态也就是相当于断路 整个IIC总线只有开启了的设备才会正常进行通信而不会干扰到其他设备。IIC的通信协议流程初始(空闲)状态因为IIC的 SCL 和SDA 都需要接上拉电阻保证空闲状态的稳定性所以IIC总线在空闲状态下SCL 和SDA都保持高电平开始信号SCL保持高电平SDA由高电平变为低电平后延时(4.7us)SCL变为低电平。停止信号停止信号SCL保持高电平。SDA由低电平变为高电平。数据传输中在起始条件产生后总线处于忙状态由本次数据传输的主从设备独占其他I2C器件无法访问总线而在停止条件产生后本次数据传输的主从设备将释放总线总线再次回归空闲状态。数据有效性IIC信号在数据传输过程中当SCL1高电平时数据线SDA必须保持稳定状态不允许有电平跳变只有在时钟线上的信号为低电平期间数据线上的高电平或低电平状态才允许变化。SCL1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。也就是在IIC传输数据的过程中SCL时钟线会频繁的转换电平以保证数据的传输据传送格式SDA线上的数据在SCL时钟“高”期间必须是稳定的只有当SCL线上的时钟信号为低时数据线SDA上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位数据传送时先传送最高位MSB每一个被传送的字节后面都必须跟随一位应答位即一帧共有9位。当一个字节按数据位从高位到低位的顺序传输完后紧接着从设备将拉低SDA线回传给主设备一个应答位ACK 此时才认为一个字节真正的被传输完成 如果一段时间内没有收到从机的应答信号则自动认为从机已正确接收到数据。应答信号每当主机向从机发送完一个字节的数据主机总是需要等待从机给出一个应答信号以确认从机是否成功接收到了数据应答信号主机SCL拉高读取从机SDA的电平应答信号为低电平时规定为有效应答位ACK简称应答位表示接收器已经成功地接收了该字节应答信号为高电平时规定为非应答位NACK一般表示接收器接收该字节没有成功。应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期低电平0表示应答1表示非应答
IIC接口协议
I2CInter-Integrated Circuit 是内部整合电路的称呼 是一种串行通讯总线 使用多主从架构 由飞利浦公司在1980年为了让主板、 嵌入式系统或手机用以连接低速周边装置而发展。 I2C的正确读法为I-squared-C 而I-two-C则是另一种错误但被广泛使用的读法 在中国则多以I方C称之。 I2C 总线支持任何IC 生产过程(NMOS CMOS、 双极性 。两线――串行数据SDA 和串行时钟 SCL 线在连接到总线的器件间传递信息。 每个器件都有一个唯一的地址识别无论是微控制器——MCU、 LCD 驱动器、 存储器或键盘接口 而且都可以作为一个发送器或接收器由器件的功能决定 。在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送 高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号 它们分别是开始信号、结束信号和应答信号。开始信号 SCL 为高电平时 SDA 由高电平向低电平跳变开始传送数据。结束信号 SCL 为高电平时 SDA 由低电平向高电平跳变结束传送数据。应答信号接收数据的 IC 在接收到 8bit 数据后向发送数据的 IC 发出特定的低电平脉冲表示已收到数据。CPU 向受控单元发出一个信号后等待受控单元发出一个应答信号 CPU 接收到应答信号后根据实际情况作出是否继续传递信号的判断。若未收到应答信号由判断为受控单元出现故障。IIC的特征只要求两条总线线路 一条串行数据线SDA因此是半双工的 一条串行时钟线SCL每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址 主机可以作为主机发送器或主机接收器它是多主机总线 如果两个或更多主机同时初始化 数据传输可以通过冲突检测和仲裁防止数据被破坏串行的8 位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达3.4Mbit/s连接到相同总线的IC 数量只受到总线的最大电容400pF 限制7位寻址在7位寻址过程中从机地址在启动信号后的第一个字节开始传输该字节的前7位为从机地址第8位为读写位其中0表示写1表示读。I2C总线规范规定标准模式I2C从机地址为7位长其次是读/写位。第一个字节的头7位组成了从机地址 最低位LSB 是第8 位 它决定了传输的方向。第一个字节的第8位是“0”,表示主机会写信息到被选中的从机第一个字节的第8位是“1” ,表示主机会向从机读信息。当发送了一个地址后系统中的每个器件都在起始条件后将头7 位与它自己的地址比较如果一样器件会判定它被主机寻址至于是从机接收器还是从机发送器都由R/W 位决定。在起始信号后必须传送一个从机的地址(7位)1~7位为7位接收器件地址第8位为读写位用“0”表示主机发送数据(W)“1”表示主机接收数据 R,第9位为ACK应答位紧接着的为第一个数据字节然后是一位应答位后面继续第2个数据字节。IIC的连接IIC可以接多个主设备多个从设备外围 设备。如下图存在多个主机、多个从机。当多主机会产生总线裁决问题。当多个主机同时想占用总线时企图启动总线传输数据就叫做总线竞争。I2C通过总线仲裁以决定哪台主机控制总线上拉电阻一般在4.7k~10k之间默认拉高IIC总线最多可以挂多少个设备由IIC地址决定8位地址减去1位广播地址是7位地址2^7128但是地址0x00不用那就是127个地址 所以理论上可以挂127个从器件。但是IIC协议没有规定总线上device最大数目但是规定了总线电容不能超过400pF。管脚都是有输入电容的PCB上也会有寄生电容所以会有一个限制。实际设计中经验值大概是不超过8个器件。IIC的高阻态漏极开路Open Drain即高阻状态适用于输入/输出其可独立输入/输出低电平和高阻状态若需要产生高电平则需使用外部上拉电阻高阻状态高阻状态是三态门电路的一种状态。逻辑门的输出除有高、低电平两种状态外还有第三种状态——高阻状态的门电路。电路分析时高阻态可做开路理解。为了避免总线信号的混乱IIC的空闲状态只能有外部上拉 而此时空闲设备被拉到了高阻态也就是相当于断路 整个IIC总线只有开启了的设备才会正常进行通信而不会干扰到其他设备。IIC的通信协议流程初始(空闲)状态因为IIC的 SCL 和SDA 都需要接上拉电阻保证空闲状态的稳定性所以IIC总线在空闲状态下SCL 和SDA都保持高电平开始信号SCL保持高电平SDA由高电平变为低电平后延时(4.7us)SCL变为低电平。停止信号停止信号SCL保持高电平。SDA由低电平变为高电平。数据传输中在起始条件产生后总线处于忙状态由本次数据传输的主从设备独占其他I2C器件无法访问总线而在停止条件产生后本次数据传输的主从设备将释放总线总线再次回归空闲状态。数据有效性IIC信号在数据传输过程中当SCL1高电平时数据线SDA必须保持稳定状态不允许有电平跳变只有在时钟线上的信号为低电平期间数据线上的高电平或低电平状态才允许变化。SCL1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。也就是在IIC传输数据的过程中SCL时钟线会频繁的转换电平以保证数据的传输据传送格式SDA线上的数据在SCL时钟“高”期间必须是稳定的只有当SCL线上的时钟信号为低时数据线SDA上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位数据传送时先传送最高位MSB每一个被传送的字节后面都必须跟随一位应答位即一帧共有9位。当一个字节按数据位从高位到低位的顺序传输完后紧接着从设备将拉低SDA线回传给主设备一个应答位ACK 此时才认为一个字节真正的被传输完成 如果一段时间内没有收到从机的应答信号则自动认为从机已正确接收到数据。应答信号每当主机向从机发送完一个字节的数据主机总是需要等待从机给出一个应答信号以确认从机是否成功接收到了数据应答信号主机SCL拉高读取从机SDA的电平应答信号为低电平时规定为有效应答位ACK简称应答位表示接收器已经成功地接收了该字节应答信号为高电平时规定为非应答位NACK一般表示接收器接收该字节没有成功。应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期低电平0表示应答1表示非应答