II2简介以及特点

11 篇文章 1 订阅
7 篇文章 0 订阅

IIC 简介
        IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器以及其外围设备(也叫器件)。IIC 也可以写成 I2C,有两根线(不算地线),它是由数据线 SDA 和时钟线 SCL 构成的串行总线,可发送和接收数据,在 CPU 与被控 IC 之间、 IC 与 IC之间进行双向传送。随着科技的发展,现在已经有 I3C了,也许有朋友已经在Intel 路线图和DDR5 相关的部分内存规格书中看到了这个名字了,I3C 向下兼容 I2C。


I2C 总线特点
I2C 总线有如下特点:
        ①总线由串行数据线 SDA 和串行时钟线 SCL 构成,数据线用来传输数据,时钟线用来同步数据收发。
        ②I2C 设备都挂接到 SDA 和 SCL 这两根线上,总线上每一个设备都有一个唯一的地址识别,即器件地址,所以 I2C 主控制器就可以通过 I2C 设备的器件地址访问指定的 I2C 设备。
        ③数据线 SDA 和时钟线 SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电压,所以当总线空闲的时候,这两条线路都是高电平状态。
        ④总线上数据的传输速率在标准模式下可达 100kbit/s ,在快速模式下可达 400kbit/s ,随着科技的发展,在高速模式下可达 3.4Mbit/s,不过,对于 STM32MP157 其 I2C 高速模式下能达到的是 1Mbit/s。
        ⑤总线支持设备连接,在使用 I2C 通信总线时,可以有多个具备 I2C 通信能力的设备挂载在上面,同时支持多个主机和多个从机。 当为 7 位地址时,理论上 I2C 可以挂载 2^7-1=127(地址 0x00 不用,所以减去 1)个从设备, I2C 协议里没有规定总线上可挂载的设备的最大数目,但是规定了总线电容不能超过 400pF,所以连接到总线的器件接口数量由总线 400pF 电容来限制。I2C 总线挂载多个设备的示意图, 如下图所示:

I2C 总线挂载多个器件

I2C 总线时序图
        下面来学习 I2C 总线协议, I2C 总线时序图如下所示:

I2C 总线时序图
        

        为了便于大家更好的了解 I2C 协议,我们从时序图中的起始位、停止位、应答信号、数据有效性、数据传输以及空闲状态等 6 个方面进行讲解。
① 起始位
        顾名思义,也就是 I2C 通信开始的标志,起始信号由主机发出,在起始信号产生后,总线就会处于被占用状态,准备开始数据传输。在 SCL 为高电平的时候, SDA 出现下降沿时就表示起始位,起始信号是一种电平跳变时序信号,而不是一个电平信号。

起始位

② 停止位
        停止信号由主机发出,在停止信号发出后,总线就会处于空闲状态,停止位就是停止I2C 通信的标志位,和起始位的功能相反。当 SCL 为高电平期间, SDA 出现上升沿就表示为停止位,停止信号也是一种电平跳变时序信号,而不是一个电平信号。


停止位

⑤ 数据传输
        在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL串行时钟的配合下,在 SDA 上逐位地串行传送每一位数据。 I2C 总线通过 SDA 数据线来传输数据,通过 SCL 时钟线进行数据同步, SDA 数据线在 SCL 的每个时钟周期传输一位数据。 在数据传输的时候,当 SCL 为高电平期间, SDA 上的数据有效(稳定)。当 SCL为低电平时, SDA 的数据无效(不稳定),也就是通过这个时候, SDA 进行电平切换, SDA上的数据发生变化,为下一次数据传输做准备,数据在 SCL 的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。

        I2C数据传输

③ 应答信号
        当 I2C 主机每发送完一个字节数据后,就在时钟脉冲 9 期间释放数据线,此时 SDA 设置为输入状态,等待 I2C 从机应答,也就是等到 I2C 从机告诉主机它接收到数据了,应答信号是由从机发出的,主机需要提供应答信号所需的时钟,主机发送完 8 位数据以后紧跟着的一个时钟信号就是给应答信号使用的,从机通过将 SDA 拉低来表示发出应答信号,表示通信成功,否则表示通信失败。应答信号为低电平时,规定为有效应答位(ACK 简称应答位),应答信号为高电平时,规定为非应答位(NACK)。如果接收器是主机,则在它收到最后一个字节后,若希望终止数据传输,主机发送一个NACK 信号,以通知被控发送器结束数据发送,并释放 SDA 线,以便主机接收器发送一个停止信号。
④ 数据有效性
        I2C 总线进行数据传送时, SCL 为高电平期间, SDA 上的数据有效; SCL 为低电平期SDA 上的数据无效。
⑥ 空闲状态
        I2C 总线的 SDA 和 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
        在了解了 I2C 以上时序的基本概念后,下面介绍一下 I2C 的基本的读写通讯过程。
I2C 总线时序
1. 写时序
        下面先看一下写操作通讯过程图,如下图所示:

        写操作通讯过程图

        对于 IIC 来说,从机是不能主动发送数据的,开始条件都是由主机生成。 主机首先在 I2C总线上发送起始信号,那么这时总线上的从机都会等待接收由主机发出的数据。主机接着由发送从机地址+0(写操作位) 组成的 8bit 数据,所有从机接收到该 8bit 数据后,自行检验是否是自己的设备地址,假如是自己的设备地址,那么对应设备地址的从机就会发出应答信号。主机在总线上接收到有应答信号后,才能继续向从机发送数据,数据包的大小为 8 位。主机每发送完一个字节数据,都要等待从机的应答信号。当主机向从机发送一个停止信号时,数据传输结束。
        注意: I2C 总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。

2. 读时序
        接着讲解一下 IIC 总线的读操作过程,先看一下读操作通讯过程图,如下图所示。

读操作通讯过程图

        主机向从机读取数据的操作,一开始的操作与写操作有点相似,观察两个图也可以发现,都是由主机发出起始信号,接着发送 从机地址+1(读操作位) 组成的 8bit 数据,从机接收到数据验证是否是自身的地址,在验证是自己的设备地址后,对应设备地址的从机就会发出应答信号,并向主机返回 8bit 数据,发送完之后从机就会等待主机的应答信号。假如主机一直返回应答信号,那么从机可以一直发送数据,也就是图中的(n byte + 应答信号)情况,直到主机发出非应答信号,从机才会停止发送数据,当主机发出非应答信号后,紧接着主机会发出停止信号,停止 I2C 通信。














 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值