I2C知识笔记

1、I2C Introduction
1、I2C 历史
I2C:Inter-Integrated Circuit,集成电路总线。
I2C 是 Philips 公司在 1982 年为主机板、嵌入式系统(短距)设计的一种简单、双向二线制同步串行总线。
Philips 半导体事业部就是现在的 NXP。
I2C 的专利在 2006 年 11 月 1 日已到期,大家可以免费使用。
Intel 1995 年推出的 I2C 兼容总线(System Managerment Bus),即 SMBus 或 SMB
最新版本 I2C spec v.6 于 2014.04.04 推出。
2、I2C 的未来
MIPI 协会在 2014 年左右定稿了 I3C (improved Inter Integrated Circuit)规范,I3C 在 I2C 的规格上建立了功能超集,支持高传输速率模式。
当前不论是 Soc 厂商,还是 device 厂商,都已经开始或正在向 I3C 过度。
I3C spec 有 2016 版本、2018 版本,最新的是 2021 版本(446页)。
3、I2C 的速度
I2C 读法:“I方C”、“I-squared-C”、“I two C”
I2C 是一种低速、串行总线,有 SDA(串行数据线) 和 SCL(串行时钟线) 两条信号线,半双工通信。
通信速度如下:

• Bidirectional bus:

Standard-mode (Sm), 100 kbit/s
Fast-mode (Fm), 400 kbit/s,用在 sensor、carema、touch 等。
Fast-mode Plus (Fm+),1 Mbit/s
High-speed mode (Hs-mode),3.4 Mbit/s,用在 NFC、buck&boost 等
• Unidirectional bus:

Ultra Fast-mode (UFm),5 Mbit/s
速度由 SCL 决定,不同模式对上升沿的要求不一样,上升沿斜率受上拉电阻和等效电容影响。

4、I2C 是一种多主从架构总线
I2C 的读写均由 master 端发起。
I2C 通信的每一个 byte(8bits)都需要 slaver 端的回应 ACK/NACK 作为回应。
多 master 端需要引入仲裁机制。
slaver 端通过设备地址区分,有 7bits 和 10 bits 等地址,还有一种 8bits 地址,实际上是 7bits + 读写位。【其中7位地址 = 种类型号(4bit)+ 寻址码(3bit)】
5、I2C 总线能挂多少设备?
7-bit address :2 的 7 次方,能挂 128 个设备。

10-bit address :2 的 10 次方,能挂 1024 个设备。

但是 I2C 协议规定,总线上的电容不可以超过 400pF。管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制。实际设计中经验值大概是不超过 8 个器件。

总线之所以规定电容大小,是因为 I2C 使用的 GPIO 一般为开漏结构,要求外部有电阻上拉,电阻和总线电容产生了一个 RC 延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险(方波变三角波)。传输速度越快,信号的窗口就越小,上升沿下降沿时间要求更短更陡峭,所以 RC 乘积必须更小。(可以理解为输出高电平就是给电容充电,电容越大,充电越慢)

注意,要把 spec 规定的预留设备地址去除,保留地址如下:
图片
note:写的是 two groups,而不仅仅是八个,0000 XXX 和 1111 XXX 系列地址都是保留的。

note:注意 1111 1XXX 是 Hs-mode master code,1111 0XXX 是 10-bit slave addressing,博主后面会讲。

6、定义术语
在这里插入图片描述
2、I2C Architecture
在这里插入图片描述
在这里插入图片描述
I2C 采用的 GPIO 一般为开漏模式,支持线与功能,但是开漏模式无法输出高电平,所以需要外部上拉。Vdd 可以采用 5V、3.3V、1.8V 等,电源电压不同,上拉电阻阻值也不同。

一般认为 I2C 总线上,低于 0.3Vdd 为低电平,高于 0.7Vdd 为高电平。

I2C 协议中每个挂到总线上的设备都有独一无二的静态设备地址。

空闲时,I2C 总线上两根线都是高电平,因为有上拉电阻。

1、推挽结构和开漏结构
1、推挽结构:使用两个三极管或 MOSFET,以推挽方式存在于电路中。电路工作时,两只对称的开关管每次只有一个导通,所以导通损耗小、效率高。既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
在这里插入图片描述
图中上面是 NPN 型三极管,下面是 PNP 型三极管。分别有以下两种情况:

输出高电平:向负载灌电流。
在这里插入图片描述在这里插入图片描述
输出低电平:从负载拉电流。
在这里插入图片描述
2、开漏结构(OD):对比推挽结构,开漏结构只有一个三极管或者MOS管。

之所以叫开漏,是因为 MOS 管分为三极:源极、栅极、漏极。漏极开路输出,所以叫开漏;如果是三极管:基极、集电极、发射极,集电极开路,所以叫开集输出(OC)。

开集输出,NPN 三极管:
在这里插入图片描述
Vin 高电平,三极管导通,对外输出低电平,外部被直接拉到低。

Vin 低电平,集电极(C)开路,输出电平状态由外部决定。
在这里插入图片描述
以上分析均采用三极管,MOS 管类似。

因此,推挽结构可以输出高低电平。开漏输出只能输出低电平,高电平由外部电路决定。

2、线与功能
线与:所有 GPIO 输出高就是高,只要有一个输出低,整条线上面的都是低,这就是“与”的意思。

1、推挽结构下,两个 GPIO 口连接到一根线上,假如左边的 PMOS 导通,右边的 NMOS 导通,Vdd 就会通过两个 MOS 管直接接地,由于 MOS 管导通电阻不大,会导致电流很大,直接损坏这两个 GPIO口,因此,推挽输出不支持线与。
在这里插入图片描述
note:实际上并不一定是上面 NMOS 下面 PMOS,只要上下两个管子采用不同类型,即可保证同一时刻只有一个管子导通,即可分别输出高低电平。

2、开漏结构:假如很多 GPIO 是开漏结构,接到了一根线,如下图。开漏结构输出的高电平靠外部上拉,假如有一个 GPIO 接地,那么电流会通过上拉电阻流进地,因为有上拉电阻的存在,所以电流不大,不会损坏 GPIO 口。
在这里插入图片描述
线与,是 I2C 协议的基础!

小节
在这里插入图片描述
power 功耗上,开漏因为上拉电阻的存在,每次高低电平变换都会消耗能量,因此功耗高。

clock stretching 时钟延展方面,开漏支持时钟延展,推挽结构不支持时钟延展。原因和上面的推挽不支持线与一样的。有的人会有疑问,时钟延展不是在 SCL 低电平时,从设备去拉 SCL 线吗?不应该有问题呀。但如果是推挽 GPIO,此时主控会尝试拉高 SCL ,才会发现 SCL 被从设备拉低,这时候就会短路。

再次提醒,线与:当总线上只要有一个设备输出低电平,整条总线便处于低电平状态,这时候总线被称为占用状态。
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

six2me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值