一文搞懂I2C协议-硬件基础

article/2025/8/16 21:39:24

I2C是什么

I2C总线是由飞利浦在80年代初设计的,以允许位于同一电路板上的组件之间能够轻松通信。其大大简化了电路的设计,早期的电视机中很多地方用到了I2C这种通信方式。飞利浦半导体于2006年迁移到了NXP。I2C名称翻译为“ Inter IC”。有时,该总线称为IIC或I²C总线。I2C总结的基本的特征:

  • 电路简单,只需要两根线,时钟线SCL和数据线SDA
  • I2C为总线型结构,主设备依靠从设备地址进行寻址
  • I2C总线上的设备可以为一主多从或者多主多从,多主多从模式下,需要提供仲裁和冲突检测机制。
  • I2C主设备提供时钟,SDA可以双向传输数据
  • I2C标准的传输速率可以达到100Kbit/s,快速模式下可以达到400Kbit/s,高速模式下可以到达3.4Mbit/s。一般最为常用的传输速率<=100Kbit/s。

I2C的硬件电路

I2C主-从设备硬件连接电路如下:
在这里插入图片描述
I2C硬件电路特征:

  • 连接到I2C总线上的设备,必须是以开漏或开集电极的方式连接,这样才能实现线与
  • SCL和SDA必须接上拉电阻,电阻的大小为4.7K到10K之间。
  • 连接到总线上的设备数量受400pF电容的限制。

这里需要注意的三个点:开漏或开集电极、上拉电阻、线与,下面纷纷讨论一下。需要实现说明的是,本人不是电子专业毕业,如果有哪里说的不对的地方,欢迎大家批评指正。

漏极/集电极开路

上面说到芯片的SDA和SCL必须以开漏或者开集电极的方式连接到I2C总线,下面就来分析一下为何必须使用这种方式。

首先说一下,何为漏极/集电极开路,下面以三极管的集电极开路为例讲解一下,MOS管的漏极开路原理相似。
在这里插入图片描述
上图就是三极管的集电极开路连接方式,这种连接方式的特点如下:

  • 输入端为“1”,即高电平,三极管导通,三极管C极与E极导通,输出为“0”。
  • 输入端为“0”,即低电平,三极管截止,三极管输出“1”。
  • 输入和输出反相。
  • 如果输出端不接上拉电阻,输入端为”0“时,输出端为”高组态“。
  • 输入端只能输出“0”,不能输出“1”,如果想输出“1”,需外接上拉电阻
  • 可以实现“线与”的功能,下一节介绍。
  • 电器兼容性好,上拉电阻接不同电压就可以接入到不同的系统中,接3.3V接入到3.3V系统,接5V就接入到5V系统。

上面就是三极管的集电极开路硬件电路,但是,其存在一个问题,就是输入和输出是反相的,需要额外的电路将其再次“反相”,才能使输入和输出一致。

在这里插入图片描述
上图电路中,增加了一个反相三极管,即三极管2,下面看一下它的输入和输出特征:

  • 输入端为“1”,即高电平,三极管1导通,三极管2截止,输出端由于为“开集电极”,由于上拉电阻的作用,输出“1”。
  • . 输入端为“0”,即低电平,三极管1截止,三极管2导通,这时输出端的输出为“0“。

可以看到输入和输出的相位是相同的了。好了,上面就是三极管的集电极开路的电路原理,那么,为什么 连接到I2C总线上的设备,必须是以开漏或开集电极的方式连接呢?根本原因是这种电路可以实现**“线与”**的功能。

线与

由于I2C是一种总线通信协议,所以,会有多个设备挂载在I2C的两根信号线上。设备通信的原理就是按照SCL上的时钟,有规律的改变SDA上的电平,来达到数据通信的要求。那由于总线上挂接了多个设备,不可避免的是会同时有个多个设备试图去改变信号线上的电平,那么必然会产生冲突。所以,如果要正常通信,必须避免冲突的发生。
一种简单的预防冲突机制是:设备在发送数据之前,需要进行冲突检测,检测的依据就是检查SDA的电平状态:只要检测到SDA为低电平,那就是表示总线处于被占用的状态,那么,为了避免发生冲突,当前设备必须等待一段时间以后再次去检测SDA的电平状态,如果总线变成“空闲”的了(即SDA为高电平),那么该设备才能进行通信。

这里有一个关键点就是:如何保证连接到I2C总线上的多个的设备,只要存在一个设备占用了总线,其他设备无论如何也不能使总线变为空闲呢?上文说的集电极开路结构就能达到这个要求。
在这里插入图片描述
如上图,每个设备的SDA输出的值,不完全相同,但是,只要有一个为“0”,其结果就是“0”,这就是线与,其可以保证SDA线上的信号,要么稳定为“0”(至少一个设备输出为0),要么稳定为“1”(全部设备输出都为1)。利用“线与”,I2C总线上的设备,可以方便的检测总线的工作状态,从而可以实现冲突检测和正常的通信时序。

I2C时序

上面主要介绍了I2C总线的硬件基本原理,可是,设备之间如何要完成最终的通信,必须严格按照一定的时序来完成不同信号的交互,这些时序就是I2C通信的硬件协议

边沿控制信号

I2C设备在进行通信时,首先都是由主设备发起。如果主设备要写数据到从设备,主设备将数据放到SDA,等待数据稳定之后,主设备向SCL发送一个上升沿通知从设备读取数据,在SCL高电平期间,SDA的数据应该是稳定的;如果是主设备要读取从设备发来的数据,主设备向SCL发送一个下降沿通知从设备将数据放到SDA上,主设备在SCL高电平期间读取SDA上的数据,读取数据期间,SDA上的数据必须是稳定的。

总结一下:

  • 写:主设备将数据放到SDA上,等数据稳定之后,发送边沿信号(上升沿)通知从设备读取SDA上的数据。
  • 读:主设备发出边沿信号(下降沿)告诉从设备发送数据,检测到边沿信号之后,从设备改变数据,主设备在时钟高电平期间读取数据。

数据有效性规定

在这里插入图片描述

  • I2C在进行数据传送时,SCL为高电平时,SDA上的数据必须稳定。
  • 只有SCL为低电平时,SDA上的数据才允许变化。

开始/停止信号

I2C的开始和停止信号,如下:
在这里插入图片描述

  • 起始和终止信号都是由主设备发起的。
  • 起始信号之后,总线处于占用状态,结束信号之后,总线回到空闲状态。

数据传输

I2C在进行数据传输时的一般规则如下:

  • 发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。
  • 首先传输的是数据的最高位(MSB),每个字节后必须跟一个响应位,所以,一帧数据共有9位。
  • 如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续。

在这里插入图片描述
数据接收端在接收到数据之后,如果需要继续接收数据,那么其需要向发送端发送应答信号;如果数据接收端不再接收数据,需要发送非应答信号。

读/写时序

设备寻址

I2C开始通信时,主设备会发起总线寻址,方式就是在发起起始信号之后,发送一个字节的寻址地址。
在这里插入图片描述

  • R/W位:表示数据传输方向,0表示主机向从机写,1表示主机由从机读取数据。
  • 设备地址分为可编程和不可编程,有的设备地址是固定的不变的,而有的设备可以通过芯片的引脚来设定设备的地址,地址可编程的设备,方便在一条I2C总线上,连接多个相同的设备,然后通过地址进行区分。

I2C写时序

下图完整的展示了主机向从机写一个字节的时序图,需要注意的包括:

  • 主机在开始信号之后,需要先发送寻址字节,其中,第0位,为0表示主机要向从机写数据。
  • 从机在接收到每个数据之后,需要发送ACK信号,表示成功接收到数据。
  • 主机在发送完数据之后,发送停止信号。
    在这里插入图片描述

I2C读时序

下图完整的展示了主机由从机读取数据的时序图,需要注意的包括:

  • 主机在开始信号之后,需要先发送寻址字节,其中,第1位,为1表示主机由从机读取数据。
  • 主机在接收到每个数据之后,需要发送ACK信号,表示成功接收到数据。
  • 主机在接收完最后一个字节的数据之后,发送“NACK”表示接收完成,之后,从机放弃SDA的控制权,主机发送停止信号,数据接收过程结束。
    在这里插入图片描述

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

相关文章

I2C协议+实现源码

文章目录 摘要I2C通信协议简介补充空闲状态start和stop信号应答信号数据有效性规定数据传输延时 I2C协议的实现源码硬件说明头文件sys.h 主函数初始化I2C产生开始和停止信号等待应答信号产生或不产生应答I2C写操作I2C读操作 对24C02操作24C02的时序图头文件初始化IIC接口写数据…

学习笔记8-I2C协议

目录 一、关于I2C二、硬件结构三、I2C协议3.1、I2C的三种状态3.2、数据有效性3.3、应答信号3.4、总线时序3.5、读写时序3.5.1、读3.5.2、写 3.6、死锁3.7、仲裁 四、软件I2C&硬件I2C五、AT24C02六、代码编写6.1、I2C初始化6.2、开始信号6.3、ACK/NACK信号6.4、发送1byte数据…

I2C 协议 代码详解

I2C 协议 最后代码已上传&#xff01;&#xff01;&#xff01;&#xff01;   代码文章链接    github 代码链接在该文章最后 I2C 简要介绍 I2C 总线&#xff08;I2C bus&#xff0c;Inter-IC bus&#xff09;是一个双向的两线连续总线&#xff0c;提供集成电路&#xf…

通俗易懂的I2C协议

关注v-x-公-众-号&#xff1a;【嵌入式基地】 后-台-回-复&#xff1a;【电赛】 即可获资料 回复【编程】即可获取 包括有&#xff1a;C、C、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料 I2C总…

I2C 协议图文解析

转自&#xff1a;https://blog.csdn.net/EastonWoo/article/details/52712826 i2c协议注意几点就很好的使用它&#xff1a; 1&#xff09;由一个主设备&#xff0c;一个或多个从设备组成&#xff0c;所有的信号发起都是由主设备发起&#xff0c;从设备根据这些信号做一些应答。…

I2C协议---I2C时序图解析

一、I2C协议简介 I2C 通讯协议(Inter&#xff0d;Integrated Circuit)是由 Phiilps 公司开发的&#xff0c;由于它引脚少&#xff0c;硬件实现简单&#xff0c;可扩展性强&#xff0c;不需要 USART、CAN 等通讯协议的外部收发设备&#xff0c;现在被广泛地 使用在系统内多个集成…

I2C协议——物理层和协议层

I2C协议简介 I2C 通讯协议(Inter&#xff0d;Integrated Circuit)是由Phiilps公司开发的&#xff0c;由于它引脚少&#xff0c;硬件实现简单&#xff0c;可扩展性强&#xff0c;不需要USART、CAN等通讯协议的外部收发设备&#xff0c;现在被广泛地使用在系统内多个集成电路(IC)…

I2C协议详解

I2C协议详解 一、I2C协议简介 I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据&#xff0c;并产生时钟以开放传送的器件&#xff0c;此时任何被寻址的器件均被认为是从器件…

I2C协议概述

目录 IntroductionFeaturesStandard-mode, Fast-mode and Fast-mode Plus I2C-bus protocols1. SDA and SCL signals2. SDA and SCL logic levels3. Data validity4. START and STOP conditions5. Byte format6. Acknowledge (ACK) and Not Acknowledge (NACK)7. Clock synchro…

I2C协议(详细)

I2C通讯协议(Inter&#xff0d;Integrated Circuit)引脚少&#xff0c;硬件实现简单&#xff0c;可扩展性强&#xff0c;不需要USART、CAN等通讯协议的外部收发设备&#xff0c;现在被广泛地使用在系统内多个集成电路(IC)间的通讯。实现I2C需要两根信号线完成信息交换&#xff…

【总线】I2C 通信协议

目录 I2C 总线协议概述 参数总结 I2C 的工作原理 寻址 读/写位 数据帧 I2C数据传输的步骤 具有多个从机的单个主机 具有多个从机的多个主机 I2C的优缺点 优点 缺点 文章参考 I2C 总线协议概述 I2C 总线广泛应用在 OLED 显示器、气压传感器或陀螺仪/加速度计模块的…

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

深入浅出理解I2C协议 一、什么是I2C协议二、I2C,SPI,UART协议的区别三、I2C的信号线四、I2C的连接方式4.1 单主设备&#xff0c;单从设备4.2 单主设备&#xff0c;多从设备4.3 多主设备&#xff0c;多从设备 五、I2C的数据传输格式5.1 空闲位5.2 起始位5.3 地址位与读写控制5.4…

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

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

奇安信SSL VPN详细配置步骤

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

防火墙之IPSec VPN实验

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

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

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

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

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

OSI七层网络协议

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

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

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

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

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