I2C学习笔记(1)-I2C基础知识
根据网上搜索到的各种资料通过自己的理解来编写学习I2C通信的笔记,希望接下来的内容能帮助到想掌握I2C却又无从下手的新人。
1 I2C的基本概念
1.1 什么是I2C
I2C是Inter Integrated-Circuit的缩写,是由飞利浦公司开发的一种非常简单的同步二进制双向总线。由于结构的简单,I2C广泛应用于各大厂商。I2C是半双工总线,适合于在芯片之间进行近距离的数据通信,是芯片级的总线。
Tip:半双工即Half duplex Communication,是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能有一个方向上的传输存在。即A或B不能同时接收和发送数据。
1.2 I2C的拓扑结构
如图所示,I2C总线由SDA(数据线)、SCL(时钟线)两条线构成。为了实现I2C总线的线与功能,SDA与SCL必须设置为开漏输出模式。I2C总线经过上拉电阻接到电源上,总线空闲时,两根线均为高电平,总线上的任意器件输出低电平都会使总线拉低,各器件的SDA和SCL为“线与”关系。
Tip:3.3V系统上拉电阻一般取3.3kΩ,5V系统上拉电阻一般取4.7kΩ。
1.3 I2C位传输
由于连接I2C器件的工艺不同,逻辑“0”(低电平)与逻辑“1”(高电平)不是固定的。没传输一个数据位,就会产生一个时钟脉冲。
1.4 关于SDA与SCL
SDA 线上的数据必须在SCL的高电平周期保持稳定,SDA的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。
I2C的SCL线一般由主机控制,每个主机产生自己的时钟信号,主机发出的总线时钟信号只有在以下的情况才能被改变 :
1.慢速的从机器件控制时钟线并延长时钟信号
2.在发生仲裁时被另一个主机改变
2 I2C通信特点
2.1 多种速率模式
I2C含有多种传输速率模式。
模式 | 速率 |
---|---|
标准 | 100kbit/s |
快速 | 400kbit/s |
快速+ | 1Mbit/s |
高速 | 3.4Mbit/s |
2.2 多主机通信
I2C是多主机总线,总线上的器件没有主从之分,都处于平等地位,这就是说可以连接多于一个能控制总线的器件到总线。当总线空闲时(高电平),任何器件都可以向总线发送信息。
2.3 通信方式
I2C总线通过寻址的方式来实现主从机之间的通讯。每个器件都有一个唯一的地址,无论是MCU, LCD驱动器,EEROM都可以作为一个发送器或接收器,由器件的功能决定。很明显LCD驱动器只是一个接收器,而EEROM则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机,主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,此时任何被寻址的器件都被认为是从机。
2.4 线与机制
I2C的同步通过SCL的线与机制来执行,SCL默认为高电平,当器件时钟为低电平时,SCL为低电平,直到器件从低变回高电平。当存在另一个器件时钟处于低电平时,这个器件时钟从低到高的变化将影响不到SCL的状态,也就是说,SCL线被有最长低电平周期的器件保持低电平,低电平周期短的器件会进入高电平的等待状态
2.5 仲裁机制
SCL 线是高电平时,仲裁在 SDA 线发生,这样其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。最总拥有最长低电平周期数据的器件获得仲裁的胜利。
I2C总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。
2.6 握手机制
时钟同步机制除了在仲裁过程中使用外还可以用于使能接收器处理快速数据传输。
在快速传输中器件可以快速接收数据字节但需要更多时间保存接收到的字节或准备另一个要发送的字节,然后从机以一种握手过程在接收和响应一个字节后使 SCL 线保持低电平迫使主机进入等待状态直到从机准备好下一个要传输的字节。