目录
一、I2C 简介
二、I2C 主设备与从设备的关系
三、I2C 数据传输过程
3.1 总线空闲状态
3.2 开始位和停止位的产生
3.3 主设备处于等待状态
3.4 ACK 应答位的产生
3.5 有效的数据传输
3.6 数据的传输
总结
一、I2C 简介
I2C(内置集成电路) 是由 Philips 公司开发的两线式串行总线,产生于 20 世纪 80 年代,用于连接微控制器及外围设备。I2C 总线简单而有效,占用 PCB(印制电路板)空间很小,芯片引脚数量少,设计成本低。I2C 总线支持多主控(Multi-Mastering)模式,任何能够进行发送和接收的设备都可以成为主设备。主控能够控制数据的传输和时钟频率,在任意时刻只能有一个主控。
1. I2C 总线由两根双向信号线组成:数据线(SDA)和时钟线(SCL);
2. I2C 总线通过上拉电阻接正电源。当总线空闲时,上拉电阻使 SDA 和 SCL 线都保持高电平(SDL=1; SCL=1);
3. 为了避免总线信号混乱,要求各设备连接到总线的输出端必须是开漏输出或集电极开路输出的结构。根据开漏输出或者集电极开路输出信号的 "线与" 逻辑,连到 I2C 总线上的任一器件输出低电平,都会使相应总线上的信号变低。
二、I2C 主设备与从设备的关系
2.1 系统的所有外围器件都有一个7位的从器件专用地址码(其中高4位位器件类型,由出厂商制定,而低3位为器件引脚地址,由用户自定义)。由于 I2C 总线由二线组成,不需额外的外围器件片选线,因此主控器件可直接通过地址码建立多机通信机制,这样总线上是可以挂接多个器件的;
2.2 I2C 总线上,有主设备和从设备之分,主设备必须带有 CPU 逻辑模块,在同一总线上同一时刻只可使能一个主设备,但是可以有多个从设备,只是从设备的数量会因受到地址空间和总线的最大电容 400pF 而受到限制;
2.3 I2C 设备上的 SDA(串行数据线)是双向的,输出电路用于向总线发送数据,输入电路用于接收总线的数据;
2.4 同样地,SCL(串行时钟线)也是双向的,主设备主要是用来控制 SCL 线的,而从设备对主设备产生响应(即从设备需按总线上 SCL 的信息发送或接收 SDA 的数据),不过从设备也可向 SCL 发出低电平信号以延长总线时钟信号周期;
2.5 主设备和从设备,两者都可以传输数据,只是从设备不能发起传输信息,且传输信号是受到主设备控制的。
三、I2C 数据传输过程
3.1 总线空闲状态
I2C 总线空闲时,上拉电阻使 SDA 和 SCL 线都保持高电平。
3.2 开始位和停止位的产生
开始位和停止位都由 I2C 主设备产生,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。如图 2.10 所示。
3.2.1 开始位:当 SCL 稳定在高电平时,SDA 由高到低跳变将产生一个开始位;
3.2.2 停止位:当 SCL 稳定在高电平时,SDA 由低到高跳变则产生一个停止位。
3.3 主设备处于等待状态
从设备(接收器件)收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将 SCL 线拉成低电平,从而使主设备处于等待状态。直到接收器件准备好接收下一个字节时,再释放 SCL 线使之为高电平,从而使数据传送可以继续进行。
3.4 ACK 应答位的产生
每个字节发送完后,在第 8 个时钟周期之后,主控方应该释放 SDA 数据线 ,在 SCL 的第 9 个上升沿到来之前,由接收方发出一个应答信号(ACK 位)。
有效应答位(ACK 位):应答信号为低电平时,表示接收方已经成功地接收了该字节;
非应答位(NACK 位) :应答信号为高电平时,表示接收方没有成功接收该字节。
对于发送有效 ACK 位的要求是,接收方在第 8 个时钟周期之后的低电平期间将 SDA 线拉低,并且确保在第 9 个时钟周期的高电平期间 SDA 稳定为低电平。如果接收方是主控器,则在它收到最后一个字节后,发送一个 NACK 位,以通知被控发送器结束数据发送,并释放 SDA 线,以便主控接收器发送一个停止位。
3.5 有效的数据传输
I2C 总线进行数据传输时,SCL 时钟信号为高电平期间,SDA 数据线上的数据必须保持稳定,只有在 SCL 时钟线上的信号为低电平期间,SDA 数据线上的高电平或低电平状态才允许变化。 如图所示。
3.6 数据的传输
在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,在 SDA 上逐位地串行传送每一位数据。数据位的传输是边沿触发。
开始位和停止位都由 I2C 主设备产生。在选择从设备时,如果从设备采用 7 位地址,则主设备在发起传输过程前,需先发送 1 个字节的地址信息,前 7 位为设备地址,最后 1 位为(R/W)读写标志。之后,每次传输的数据也是 1 个字节,从 MSB(最高有效位)开始传输。每个字节传输完后,在 SCL 的第 9 个上升沿到来之前,接收方应该发出 1 个 ACK 位。SCL 上的时钟脉冲由 I2C 主控方发出,在第 8 个时钟周期之后,主控方应该释放 SDA,I2C 总线的时序如图 2.11 所示。
总结
1. I2C(Inter-Integrated Circuit)是一种串行通信总线标准,它使用两根线(时钟线和数据线)来传输数据。它是一种多主机、多从机的通信模式,可以在这两种设备之间进行数据传输和控制。时钟线由主机掌控并用于同步数据传输,而数据线用于传输实际的数据。因此,I2C是一种串行通信总线,但不是采用串行工作模式的。
2. I2C 是一种半双工的通信模式。在I2C协议中,数据的传输是双向的,但是同一时间内只能有一方发送数据,另一方接收数据。这意味着I2C总线上的设备可以作为主机(发送数据)或从机(接收数据)来进行通信。主机负责发起通信并生成时钟信号,而从机则根据主机发送的时钟信号进行数据的接收或发送。因此,I2C是一种半双工的通信模式。
3. 在 I2C 通信中,读写操作的标志位是通过设备地址的最后 1 位来确定的。这一位可以被称为读/写位或命令位。当这一位为 0 时,表示是写操作;当这一位为 1 时,表示是读操作。当主机想要向从机写入数据时,它会发送一个带有从机地址、写操作位(0)和数据的帧。当主机想要从从机读取数据时,它会首先发送一个带有从机地址和写操作位(0)的帧,然后发送一个带有从机地址和读操作位(1)的帧,并接收从机传输的数据。通过读写标志位来区分读写操作,I2C通信可以实现双向的数据传输。
4. 开始位和停止位都由 I2C 主设备产生,数据从 MSB(最高有效位)开始传输,只有在 SCL 时钟线上的信号为低电平期间,SDA 数据线上的高电平或低电平状态才允许变化。文章来源:https://www.toymoban.com/news/detail-604551.html
5. 每个字节发送完后,在第 8 个时钟周期之后,主控方应该释放 SDA 数据线 ,在 SCL 的第 9 个上升沿到来之前,由接收方发出一个应答信号(ACK 位)。 文章来源地址https://www.toymoban.com/news/detail-604551.html
到了这里,关于【外设篇】I2C工作原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!