良许Linux教程网 干货合集 I2C很简单,但很多人却不了解其通信原理和协议

I2C很简单,但很多人却不了解其通信原理和协议

I2C是目前使用广泛的一种总线,通常用于连接各种从设备,如EEPROM存储器、温湿度传感器、角速度计等等。

对于初入职场的技术人员而言,掌握I2C是一项基本技能,有必要系统地学习一下。

一、I2C的发展历史

1980年,飞利浦公司开始研发通信总线,旨在让不同低速设备间可以相互连接起来。

1982年,发布了I2C的原始版本,使用了100kHz的通信速率,提供了7位地址,将总线上的器件数量限制为112(其中几个地址被保留)。

1992年,I2C第一个规范发布,增加了400kHz的快速模式和扩展的10位地址空间。

随着技术的不断进步,通信速率的要求越来越高,于是在1998年,I2C通信速率升级至高速3.4 MHz,后来又升级至5 MHz,并开始使用差分信号以改善抗噪声能力等。

I2C版本历史:

image-20231209142227341
image-20231209142227341

额外说一下SMBu****s:

1995年,英特尔在I2C基础上推出了一种变体称为“系统管理总线”(SMBus)。SMBus是一种更严格控制的格式,旨在最大限度地提高PC主板上支持IC之间通信的可预测性。

SMBus之间最显着的区别在于它将速度限制在10kHz至100kHz之间,而I2C则可以支持0kHz至5MHz的器件。

二、I2C基础内容

I²C:Inter-Integrated Circuit,字面意思是集成电路之间,是I²C Bus简称。

I2C只需要两根电线,这两根线最多可支持1008个从设备,实现同步串行通信。

与SPI不同的是,I2C可以支持多主机,多从机的总线。

image-20231209142231013
image-20231209142231013

1.I2C两线信号

每个I2C总线由两个信号组成:SCL时钟信号,SDA数据信号。时钟信号总是由当前总线主机产生。

与UART、SPI不同,I 2 C总线驱动器是开漏(不了解开漏的请自行百度),意思是它们可以将相应的信号线拉低,但不能将其驱动为高电平。

每条信号线上都有一个上拉电阻,当没有器件将其置为低电平时,将信号恢复为高电平。

2.信号电平

通常,I2C总线信号电平5V、3.3V居多,如果总线上器件兼容这两种电平,可以直接使用。

如果信号电压相差很大(比如5V和2.5V),或者电平不兼容,就需要进行电平转换才行。

三、I2C协议

I2C对初学者来说,难点就在于理解其中协议,下面从几个简单角度说一下。

1.收发基本原理

I2C的两个总线:SCL时钟信号,SDA数据信号。SCL由主机产生,SDA由主机或者从机产生。

I2C是同步串行通信,同时它属于半双工,也就是说同一时间SDA只能由一个设备发送信号。

这样,你就会发现,SDA上的信号(数据),有时候是主机的,有时候是从机的。

2.基本协议:****7/10位地址

I2C支持7位地址和10位地址,消息主要分为两种:地址和数据。

7位地址:

image-20231209142240863
image-20231209142240863

10位地址:

image-20231209142243761
image-20231209142243761

除了地址和数据,还有开始条件、停止条件、读写,以及应答信息(上图小字描述)。

3.开始和停止

SDA数据线由高 -> 低 为总线开始条件;

SDA数据线由低 -> 高 为总线结束条件;

image-20231209142246620
image-20231209142246620

4.应答(ACK)和非应答(ACK)

应答和非应答发生在每个字节之后,是由接收方向发送方发出确认信号,表明“数据”已成功接收,并且可以继续发送下一字节数据。

image-20231209142250527
image-20231209142250527

应答有很多种情况,初学者可以参考协议手册,里面有详细讲述。

5.更多协议内容

I2C协议手册地址:

https://www.nxp.com/docs/en/user-guide/UM10204.pdf

我之前结合模拟I2C代码讲述过I2C的文章:

更加深入理解I2C总线、协议及应用

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部