【数字IC】深入浅出理解I2C协议

article/2025/8/16 23:06:05

深入浅出理解I2C协议

    • 一、什么是I2C协议
    • 二、I2C,SPI,UART协议的区别
    • 三、I2C的信号线
    • 四、I2C的连接方式
      • 4.1 单主设备,单从设备
      • 4.2 单主设备,多从设备
      • 4.3 多主设备,多从设备
    • 五、I2C的数据传输格式
      • 5.1 空闲位
      • 5.2 起始位
      • 5.3 地址位与读写控制
      • 5.4 应答位(ACK/NACK)
        • 5.4.1 正确接收数据(ACK)
        • 5.4.2 未正确接收数据(NACK)
      • 5.5 数据位
      • 5.6 停止位
      • 5.7 总结
    • 六、I2C可配置变量
      • 6.1 传输模式
      • 6.2 地址位宽
      • 6.3 设备地址
    • 七、I2C的仲裁机制
      • 7.1 SCL同步问题
      • 7.2 SDA仲裁问题
    • 八、写在最后
    • 九、其他数字IC基础协议解读
      • 9.1 UART协议
      • 9.2 SPI协议
      • 9.3 I2C协议
      • 9.4 AXI协议

一、什么是I2C协议

I2C是由Philips开发的简单的双向两线总线,在深入浅出理解SPI协议中,我们区分了单工,半双工,全双工协议数据流向的区别,根据特征,I2C协议属于半双工协议(即同一时刻,数据单向流动)。此外,I2C也是一种可以多主设备,多从设备的总线协议,通过地址索引,I2C可以使能所需从设备,I2C的出现主要是用来实现不同集成电路组件之间的控制功能,比如通过I2C协议,连接MCU与LCD驱动器,远程I/O口,RAM,EEPROM或数据转换器。

二、I2C,SPI,UART协议的区别

作者按照顺序,依次完成了UART,SPI,I2C协议,因为这三种协议都属于低速通用协议接口,因此作者将这三种协议放在一块进行比较,诚然,这些协议经过数十年的发展,衍生出了很多新版本,拥有了很多新特性,但他们的基本通信方式没变,因此我们仅比较他们的基本版本,得到如下表格,当然特性太多,也未必绝对准确,仅供初学者参考

协议名称数据流向电气信号线通信类型选通方式
UART单工/半双工/全双工1/2条异步
SPI全双工4条同步NSS选择
I2C半双工2条同步地址索引

重点解释一下UART,SPI,I2C这三个协议的选通方式,作者觉得很有意思。
对于UART来说,正常来说是没有办法满足一个主设备,多个从设备的通信,它的通信方式最为简单,最低只需要一根线即可完成通信,协议本身并不允许外接多个从设备,但是我们也可以通过比如485转接、增加二极管的方式来进行多从设备选择(电路层面的设计内容,不是数字IC需要考虑的内容)。
其次是SPI协议,它有一个专门的NSS端口,默认拉低来选择所需的从设备。
最后是I2C协议,每个主设备和每个从设备都对应一个地址,通信的时候先发送地址信号,若一致,则被选中。

三、I2C的信号线

I2C仅需要两根信号线即可完成通信,如下图所示。除此以外,I2C的信号线需要连接上拉电路,有关上拉电阻的大小,是电路设计工程师需要操心的事,不归Digital IC Design Engineer管,就不在这里赘述了。
在这里插入图片描述
SDA(Serial Data) :串行数据线,用来传输数据信号
SCL(Serial Clock):串行时钟线,用来传输时钟信号,一般是主设备向从设备提供。

四、I2C的连接方式

I2C的连接的连接形式非常灵活,可以是单主设备,单从设备,也可以是单主设备,多从设备,还可以是多主设备,多从设备。

4.1 单主设备,单从设备

在这里插入图片描述

4.2 单主设备,多从设备

在这里插入图片描述

4.3 多主设备,多从设备

在这里插入图片描述

五、I2C的数据传输格式

5.1 空闲位

空闲时SDA与SCL默认都是高电平,对应于主设备状态机IDLE(默认态)时的输出为高
在这里插入图片描述

5.2 起始位

SCL为高电平的时候 ,主设备控制SDA从1到0,为起始位,进入起始位后,SCL按照始终的要求进行翻转
从设备接收到起始位信息,状态机发生跳变,等待地址信号的输入

在这里插入图片描述
从设备在这里需要使用到下降沿检测电路,作为状态机跳变的控制信号,详情可参考作者之前的文章。【数字IC手撕代码】Verilog边沿检测电路

5.3 地址位与读写控制

主设备按照从高到低的顺序,依次发送地址位,从设备进行接收,通常情况下,地址位为7bit,读写选择为1bit。每个从设备有且只有一个唯一的地址编号,依靠着这个编号,确定主设备具体与哪一个从设备进行通信
在这里插入图片描述
同时,为了确保采样时信号稳定,对于主设备,我们在下降沿的时候将信号放在SDA上,对于从设备,我们在上升沿的时候进行采样
对于读写控制位来说如果主设备需要将数据发送到从设备,则该位设置为 0;如果主设备需要往从设备接收数据,则将其设置为 1 。即写为0,读为1

5.4 应答位(ACK/NACK)

发送了标题为5.3的8bit后,主机释放对SDA的控制权,由于上拉电阻的作用这个时候SDA默认为高电平从机接管SDA的控制权,假如从机正确的接收了数据,会将SDA拉低,假如没有正确的接收数据,在从设备的控制下,SDA依旧为高电平

读者在这里会发现,同一个SDA,怎么主设备也能控制,从设备也能控制呢?这里涉及到了inout双向端口的相关问题,可以参考作者的这篇文章进行解读和理解通俗易懂的带你解读inout双向端口

5.4.1 正确接收数据(ACK)

正确接收,SDA由从设备拉低

请添加图片描述

5.4.2 未正确接收数据(NACK)

未正确接收,SDA依旧为高电平
请添加图片描述

5.5 数据位

当我们成功收到ACK信号后,就可以正式传输数据位了,每一次默认传输一个字节(即8bit),每个字节的传输都需要跟一个应答位(ACK/NACK)
请添加图片描述

5.6 停止位

SCL先拉高,在SCL为高电平的时候,SDA从低到高,即为停止位,此后,I2C协议重新进入到空闲状态。这里使用了上升沿检测电路,原理同起始位的下降沿检测电路
请添加图片描述

5.7 总结

在这里插入图片描述
首先为起始位S(start),接着传输地址7位SLAVE ADDRESS和1位读写控制信号R/W,再往后8位8位的传输数据位,每个字节紧跟ACK信号,最后为停止位
所有的阴影部分,都是主设备在操作总线,而A对应的ACK,则为从设备在操作总线

六、I2C可配置变量

6.1 传输模式

  • 标准模式(Standard):100kbps
  • 快速模式(Fast):400kbps
  • 快速模式+(Fast-Plus):1Mbps
  • 高速模式(High-speed):3.4Mbps
  • 超快模式(Ultra-Fast):5Mbps(单向传输)

提起不同速度的传输模式,读者首先想到的可能是指SCK的频率,这没有错,但是绝不仅限于此,为了获得更高的传输速率,除开芯片设计工程师外,电路的设计人员需要认真思考诸如“负载电容,上拉电阻的大小”等更偏向于电路设计或模拟设计的内容。

6.2 地址位宽

  • 标准I2C:七位寻址
  • 扩展I2C:十位寻址

每个主设备或者从设备都能对应一个唯一的地址,大多数情况下,7位的地址,已经够用了。但是也可以对其进行扩展,转变为10位地址,多出来的3位地址相当于提供了8倍潜在设备数量,同时,按照NXP2021版的I2C协议规定,10位地址的从设备,和7位地址的从设备,都可以挂在一个总线上,彼此相互兼容,不过,客观来讲,10位寻址的I2C不常用,7位寻址的I2C协议就足够大家日常使用了。

6.3 设备地址

每个主设备与从设备需要设置互不相同的七位地址或十位地址。
等等等等

七、I2C的仲裁机制

7.1 SCL同步问题

总线天生带线与逻辑,即总线的几个输入端,任意有一个拉低,总线表现为低电平,全部位高电平时,总线才是高电平,真值表如下所示。

设备A设备B总线逻辑
000
010
100
111

假设有两个主设备都想拉低SCL信号,Master1先拉低 ,Master2后拉低,那么SCL会按照CLK1的时间来拉低自身(线与逻辑的应用),而假如Master1先拉高,Master2后拉高,SCL又会按照CLK2的时间来拉高自身。

因此:当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理
在这里插入图片描述

7.2 SDA仲裁问题

设想一种多主设备,多从设备的情况
假如在空闲状态时,两个主设备先后想要操控I2C总线(相隔时间很短),I2C岂不是会发生错误(数据紊乱等),如何解决这个问题呢?
我们可以采取仲裁机制,同样应用到总线的线与逻辑,在箭头所指的位置,SCL上升沿到来,对SDA上的数据进行采样,结果为0,与DATA2上的数据0相同,与DATA1上的数据1不同,通过这种比较 Master1退出了对总线的控制,而Master2所发送的数据都是正确的,完成仲裁。
在这里插入图片描述

八、写在最后

接下来的文章,我们将从零开始使用Verilog与I2C设计一个控制器出来,并进行不那么充分的验证工作,其中具体满足的参数如下

  • 单主设备,单从设备(不涉及仲裁与同步)
  • 全局时钟100Mhz
  • 标准模式(100kbps)传输速率
  • 标准I2C的七位寻址
  • 从设备为EEPROM

九、其他数字IC基础协议解读

9.1 UART协议

  • 【数字IC】深入浅出理解UART
  • 【数字IC】从零开始的Verilog UART设计

9.2 SPI协议

  • 【数字IC】深入浅出理解SPI协议
  • 【数字IC】从零开始的Verilog SPI设计

9.3 I2C协议

  • 【数字IC】深入浅出理解I2C协议

9.4 AXI协议

  • 【AXI】解读AXI协议双向握手机制的原理
  • 【AXI】解读AXI协议中的burst突发传输机制
  • 【AXI】解读AXI协议事务属性(Transaction Attributes)
  • 【AXI】解读AXI协议乱序机制
  • 【AXI】解读AXI协议原子化访问
  • 【AXI】解读AXI协议的额外信号
  • 【AXI】解读AXI协议的低功耗设计
  • 【数字IC】深入浅出理解AXI协议
  • 【数字IC】深入浅出理解AXI-lite协议

http://chatgpt.dhexx.cn/article/Dg3ICejf.shtml

相关文章

I2C协议靠这16张图彻底搞懂(超详细)

文章目录 背景硬件层数据传输协议实际上如何工作?单个主设备连接多个从机多个主设备连接多个从机如何编程?总结 背景 IC(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线&#xf…

奇安信SSL VPN详细配置步骤

1、网络接口配置(GE2接口配置,GE1调试接口) 2、静态路由配置(网络配置-网络路由-IPv4路由) 3、NC的IP地址池添加(SSL-VPN-应用设置-IP地址池-虚拟地址池添加) 4、用户和组的添加 5、NC设置 6、…

防火墙之IPSec VPN实验

防火墙IPSec VPN实验 原理概述: 指采用IPSec协议来实现远程接入的一种VPN技术,IPSec全称为Internet Protocol Security,是由Internet Engineering Task Force (IETF) 定义的安全标准框架,在公网上为两个私有网络提供安全通信通道,通过加密通道…

如何使用Xshell7连接学校虚拟机(保姆级)

如何使用Xshell7连接学校虚拟机(保姆级) 文章目录 如何使用Xshell7连接学校虚拟机(保姆级)一、前言二、连接学校VPN三、使用学校平台建立虚拟环境四、配置OpenVPN客户端五、使用Xshell连接虚拟机1、新建会话2、设置新建会话属性2、…

密码应用体系建设(政务方向)

一、背景 密码是保障网络与信息安全的核心技术和基础支撑,是解决网络与信息安全问题最有效、最可靠、最经济的手段。《密码法》的颁布实施,从法律层面为开展商用密码应用提供了根本遵循,《国家政务信息化项目建设管理办法》的颁布实施&#…

OSI七层网络协议

在前一篇博客运维往事 一次负载均衡坏点检测事故中我提到了在生产环境中在第四层和第七层做healthCheck,这个第四层和第七层到底是什么意思呢?除了第四层第七层之外,其他的几层到底是什么?这几层到底做了啥?   OSI把…

网络七层协议,五层协议概述

一、七层协议: 1、应用层: 针对特定应用的协议(如:电子邮件协议E-mail、远程登录协议SSH,文本传输协议FTP、网络请求协议HTTP) 2、表示层: 信息的语法语义以及它们的关联,如加密…

简洁易懂——网络七层协议

国际标准化组织ISO于1984年提出了OSI(Open Ssystem Interconnection Reference Model,开放系统互联参考模型)。OSI很快成为计算机网络通信的基础模型。 OSI依层次结构来划分:第一层,物理层;第二层,数据链路…

计算机网络七层协议osi

OSI(open system interconnect开放系统互联)七层模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。 OSI七层模型功能对应的网络协议TCP/IP四层概念模型应用层…

1分钟看懂网络七层协议/OSI七层模型

网络七层协议用一张图表示,大概是这样的: 物理层: 解决两个硬件之间怎么通信的问题,常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。 …

OSI网络七层协议

OSI(Open System Interconnect),即开放式系统互联参考模型,一般都叫OSI参考模型,是ISO(国际标准化组织)在1985年提出的一个试图将各种计算机或者通信系统在世界范围内互联为网络的标准框架模型。在这一框架下详细的规定…

(知识点)TCP/IP协议(网络七层协议)

OSI参考模型 实际上,分组通信协议很复杂,OSI参考模型将其分为了易于理解的七个分层,如下图: OSI参考模型中每个分层的作用 下图表述了简单的每个分层的作用: 1. 应用层 为应用程序提供服务并规定应用程序中通信相…

网络七层模型及各层协议

网络七层模型作用应用层 (Application)网络服务与最终用户的一个接口。表示层(Presentation Layer)主要进行对接收数据的解释、加密与解密、压缩与解压缩。确保一个系统的应用层发送的数据能被另一个系统的应用层识别。(在五层模型里面已经合并到了应用层)会话层(Session Layer…

网络协议基础01-七层网络协议

前言:为什么学? 1.避不开:几乎所有的程序运行都会涉及到网络协议 2.不过时:越基础知识越不容易过时,值得花时间深入学习和积累。 容器技术、大数据、云计算、人工智能、区块链...等技术更新迭代速度很快&#xff0c…

网络七层协议结构分析图

文章目录 前言一、网络七层协议结构图详解二、TCP和UDP的区别1.TCP(打电话)1.连接稳定2.客户端,服务端3. 传输完成,释放连接,效率低,4. 三次连接四次挥手1.三次连接2.四次挥手 2.UDP(发短信&…

七层网络协议知多少

图,自然不是我的 最近太忙了,又是毕设又是春招的,忙的我都没时间看小说,所以博主我开始瞎 编小说了,学的比较浅,如有不对,还请指正。 物理层 许多年前的一天,小A和小B一块在电脑上…

网络中的七层协议与TCP/IP五层模型

socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址&a…

蓝牙nrf52832的架构和开发

相比TI的CC254X、DIALOG的DA1458X,nordic推出的nrf51822和nrf52832在架构和开发商都有自己独特的地方。这几颗产品都是蓝牙低功耗芯片。DA1458X使用OTP硬件架构,功耗低,成本也低,但软件开发难度是个门槛,大团队才能做到…

NORDIC nrf52833使用笔记

文章目录 一、SoftDevice命名规则(一)、通用规则(二)、特定规则 二、nRF52833关键特性三、SoftDevice目录框架四、代码目录框架五、应用代码结构六、内存分配表(一)、不带bootloader时的内存分配&#xff0…

NRF52832官方SDK介绍

SDK(Software Development Kit)是指软件开发包,一般是由官方提供,主要用来介绍开发流程,提供常用的例程代码等等。可以降低开发者使用的门槛,提高开发效率,所以在开发者在进行具体的开发前必须先…