I2C通信简介

串行通信:常见的串行通信接口协议UART、SPI、I2C简介 本文旨在介绍在三种常见的信号传输通信协议——SPI、UART、I2C,介绍三种协议的原理和传输方式,对比各自的特点,总结优缺点和各自的应用环境 阅读详情

I2C总线是PHLIPS公司在20世纪80年代推出的一种串行总线。具有引脚少,硬件实现简单,可扩展性强的优点。I2C总线的另一优点是支持多主控,总线上任何能够进行发送/接收数据的设备都可以占领总线。当然,任意时间点上只能存在一个主控。

I2C即是一种总线,也是一种通讯协议。在嵌入式开发中,通讯协议可分为两层:物理层和协议层。物理层是数据在物理媒介传输的保障;协议层主要是规定通讯逻辑,同一收发双方的数据打包、解包标准。打个比方,物理层相当于现实中的公路,而协议层则是交通规则,汽车可以在路上行驶,但是需要交通规则对行驶规则进行约束,不然将出现危险,也就是数据传输紊乱、丢包。

1. 物理层
I2C通讯系统接线图如下:
在这里插入图片描述

(1) 在I2C通讯总线上,可连接多个I2C通讯设备,支持多个通讯主机和多个通讯从机
(2) I2C通讯只需要两条双向总线:串行数据线(SDA),串行时钟线(SCL)。数据线用于传输数据,时钟线用于同步数据收发
(3) 每个连接到总线的设备都有一个独立的地址,主机正是利用该地址对设备进行访问
(4) SDA和SCL总线都需要接上上拉电阻,当总线空闲时,两根线均为高电平。连接到总线上的任意器件输出低电平都会将总线信号拉低。即各器件的SDA和SCL都是线与的关系
(5) 多个主机同时使用总线时,需要用仲裁方式决定哪个设备占用总线,不然数据将会产生冲突
(6) 串行的8位双向数据传输位速率在标准模式下可达100kbps,快速模式下可达400kbps,高速模式下可达3.4Mbps(目前大多数I2C设备还不支持高速)

2. 协议层
协议层规约了通讯的起始、停止信号,数据有效性、响应、冲裁同步、地址广播等。

2.1 通讯的起始信号/结束信号
在SCL线为高电平期间,SDA线由高电平向低电平转换表是起始信号。

在这里插入图片描述

在SCL线为高电平期间,SDA线由低电平向高电平转换表是结束信号。

在这里插入图片描述
  起始/结束信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在结束信号产生后,总线就处于空闲状态。

需要注意的两点:
(1) 接收器件接收到一个完整的数据字节后,可能需要完成一些其他工作,如处理内部接收中断服务函数等,这就无法立即接收下一字节的数据,这时接收器件可将SCL线拉成低电平,从而使得主机处于等待状态。直至接收器件准备好接收下一字节数据时再释放SCL线使之为高电平。
(2) 连接到I2C总线上的器件,若具有I2C总线控制器那么很硬件会自动检测到起始、结束信号,而对于不具备I2C总线控制器的器件(单片机)来说,需要在每个时钟周期内保证对数据线SDA采样两次,捕获是否接收到起始/结束信号。

2.2 数据传输
在这里插入图片描述
(1) 起始信号后,总线上所有的从机开始等待主机紧接下来的从机地址广播。因为总线上每个设备的地址都是唯一的,当主机广播的地址与某个设备地址相同时,该设备就被选中,并向主机发出应答(ACK)或者非应答(NACK),主机只有在接收到应答信号后继续发送/接收数据,没选中的设备将会忽略之后的数据信号。根据I2C协议,从机地址可以是7位或者10位。

(2) I2C总线上传输的数据包括上述的地址信号,又包括真正的数据信号。在起始信号后需传送一个从机地址(7位),第8位是数据的传输方向(接收/发送),“0”表示主机发送数据,“1”表示主机接收数据。每次数据的传输总是由主机产生结束信号以结束传输,但若主机希望继续占用总线进行新的数据传输时,则可以不产生结束信号,而是再次发送起始信号对另一从机地址寻址。

(3) 若配置为写数据方向,主机开始向从机传输数据,数据包大小为8位,主机每发送完1字节数据都有等到从机的应答信号(ACK),多字节数据发送时重复此过程。传输结束后,主机向从机发送一个停止信号表不再传输数据。

(4) 若配置为读方向,从机开始向主机返回数据,数据包大小还是8位。同理,从机每发送完一字节数据都要等到主机的应答信号(ACK),重复此过程可以返回多个数据。当主机希望停止接收数据时就向返回一个非应答信号(NACK),数据传输将结束。

(5) 实际I2C通讯采用的是读写复合的格式。传输过程中主机需要发出2次起始信号:第一次传输主机通过从机地址找到从机设备,发送一段数据,这个数据是从设备内部寄存器或者存储器地址;第二次传输是对该地址进行读/写。主机要读取从机数据时,主机会释放对SDA总线的控制,由从机控制SDA总线,主机负责接收信号;主机要向从机设备写数据时,SDA由主机控制,从机负责接收信号。

I2C基本通信原理与EDID简介 I2C I2C 总线的SCL和SDA都是双工线。 总线备用的时候两个线都得保持高电平,只有I2C总线关闭时才使SCL钳位在地电平。 总线开始 SCL高点平、SDA 下降沿I2C开启 SCL高电平、SDA上升沿I2C关闭 没传输完一个字节后都要跟随一个应答。 EDID 简介共128 字节 0~8位:EDID开始标志,固定。 8~17位:产品ID以及制造商信息。 厂商缩写压缩ASC 阅读详情

相关推荐

I2C协议简介:串行通信的关键技术

I2C(Inter-Integrated Circuit),PHILIPS公司开发的两线式半双工同步串行总线,具有接口线少、控制方式简单、通信速率较高等优点。可以用来连接存储器(EEPROM、FLASH)、A/D、D/A转换器、LCD驱动器、传感器等等。I2C是一个多主机的总线,每个设备既可以当主控器或被控器,又可作为发送器或接收器,一条总线上可以有多个主机,但同一时刻只允许一个主机工作。半双工同步串行总线(理解)数据线扮演着收发角色——半双工通信。

qq_52293640的博客 1269

一文搞懂I2C通信总线

本来不打算写这篇文章,因为网上关于I2C总线通信的资料很多很全。但是最近刚换工作,主要做驱动开发,第一个驱动就是I2C通信,想了想还是结合网上的资料再整理下思路,方便今后的查阅和温习。

不脱发的程序猿 14万+

2024秋招,腾讯测试与质量管理工程师一面

家人们,秋招都开奖了吗,拿到自己心仪的offer了吗,还是在准备明年的春招呢?今天我记录一下,之前面试腾讯测开的一面过程面试官人非常好,我回答中有问题的地方,及时帮我指正同时耐心回答我的反问只可惜我当时的能力不足以达到鹅厂的标准,遗憾错过。

chowley的博客 1056

I2C电路设计

I2C协议已经用了很多了,但是呢,在硬件设计方面,基本也是只会抄抄电路,并没有理解其中的原理和细节。这一章我们具体要说说需要怎么设计I2C电路。 1. 什么是I2C? I2C Bus(Inter-Integrated Circuit Bus) 最早是由Philips半导体(现被NXP收购)开发的两线时串行总线,常用于微控制器与外设之间的连接。这里要注意IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI 1.1 硬件连接 I2C仅需两根线就可以支持一主多从或者多主连接,I2C使用两个双向.

FourLeafCloverLLLS的博客 1万+

国产大模型高考横评:数学推理与教育落地能力实测

大模型能力评估正从开放榜单转向封闭任务的确定性验证,高考作为强逻辑、低容错、高精度的标准化考试,成为检验模型真实推理能力的理想标尺。其核心在于考察知识覆盖、步骤完整性、单位敏感性与教学对齐度,而非单纯答案正确率。数学解答题尤其凸显模型在前提校验、条件枚举与过程可控性上的差异,反映出训练数据与教育语料深度耦合带来的工程化优势。该范式已延伸至语文语感建模、英语表达习惯适配及理综跨学科缝合等场景,为智能阅卷、精准答疑和教培系统集成提供可复现、可解释、可部署的技术依据。

weixin_30436581的博客 287

光斑定位 - MATLAB实现

光斑定位是一种常见的图像处理任务,它涉及到在图像中准确定位光斑或亮点的位置。在本篇文章中,我们将使用MATLAB来实现光斑定位的算法,并提供相应的源代码。希望本文提供的MATLAB代码和步骤能够帮助您实现光斑定位任务。通过这些代码,您可以在MATLAB环境中轻松地定位光斑,并在图像上进行可视化展示。这样,我们就完成了光斑定位算法的MATLAB实现。通过以上步骤,我们可以得到一个在光斑位置上标记的图像,从而实现了光斑的准确定位。光斑定位 - MATLAB实现。

qq_39605374的博客 764

I2C通信——I2C通信的理论介绍

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除 。

主要记录嵌入式学习与开发过程。 1万+

SAP-RPT-1 深度解读:面向企业表格数据的 rapid one

摘要: SAP在TechEd 2025大会上推出面向企业结构化数据的SAP-RPT-1(Relational Pretrained Transformer),旨在通过in-context learning直接预测表格数据中的缺失值,无需传统机器学习流程。与LLM不同,RPT专为业务表格设计,支持实时预测(如交货延迟、回款风险等)。提供Small(高吞吐)、Large(高精度)和开源版本,用户可通过无代码Playground(上传CSV并用[PREDICT]标记目标列)或Python API快速验证。典型场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 235

STM32快速入门(总线协议之I2C一主多从(软件实现 & 硬件实现))

本文介绍了STM32中I2C总线协议的一主多从实现方法,包括软件模拟和硬件实现两种方式。重点分析了I2C的通信原理,包括起始位/停止位定义、数据读写时序、设备地址格式等关键内容。作者详细阐述了开漏输出模式配合上拉电阻的必要性,避免了总线短路风险,并提供了软件实现I2C的核心代码,包含GPIO初始化、起始/停止位生成、数据读写等关键函数。文章还特别指出了EEPROM读写操作时的延时注意事项,为开发者实现稳定可靠的I2C通信提供了实用参考。

m0_52566365的博客 5269

OpenClaw 从新手到中级完整教程【完整 持续更新版】

OpenClaw(曾用名 ClawdBot/Moltbot)是 2026 年最火的开源 AI Agent 项目,GitHub 已获得超过 68,000 星标。它不是普通的聊天机器人,而是一个真正能够执行任务的个人 AI 助理。

FeelTouch Labs 3113

PCIe Link Training 深度解析:从物理检测到高速数据传输

本文深入解析PCIe链路训练(Link Training)的技术细节,揭示了这一复杂协商过程的五个关键阶段:物理检测阶段通过电气特性识别设备连接;轮询阶段建立时钟和符号同步;配置阶段确定链路宽度并处理拓扑异常;恢复阶段完成速率切换和信号均衡;最终进入正常工作状态。文章特别强调了高速率下的均衡技术挑战,以及验证工程师需要关注的多个维度,包括状态机跳转、有序集内容、均衡算法和错误恢复能力。随着PCIe速率不断提升,理解这一底层机制对高速接口设计具有重要价值。

元直的博客 1655

对比I²C、SPI、UART通信的优缺点

关注+星标公众号,不错过精彩内容转自| 芯片之家虽然现在USB、CAN、网络的应用非常广泛了,但在嵌入式电子设备通信中,I2C、SPI 和 UART 等仍然最常用的通信协议,本文,我们将剖析这三种协议,让大家清楚、直观的了解它们的功能、优点和局限性,并辅以 GIF 动图展示。I2C 协议I2C是一种串行通信协议,通常用于连接低速设备,如传感器、存储器和其他外设。它使用两根线(SCL和SDA)来实...

strongerHuang 5607

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程。源码内置详细搭建教程,感兴趣可自行下载。

百创科技 1713

i2c通信的详细讲解_I2C总线简介

本文介绍了内部集成电路(AKA I2C)串行通信协议的基本特性和突出优点。组件之间的通信:通信协议毫无疑问,电子系统的共同特征是需要在两个或三个或十个单独的组件之间共享信息。工程师已经开发出许多标准协议,可以帮助不同的芯片成功通信 - 当您在微控制器或数字信号处理器的功能列表中“通信”下面对缩略语时,这一事实就变得很明显:UART,USART,SPI,I2 C,CAN。。。。每个协议都有其优点和缺...

weixin_40003767的博客 2666

【CAN总线测试】——通讯相关诊断测试

本章主要介绍通讯相关诊断测试用例设计

LOVE135149的博客 1813

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

I2C通信原理简介

1. 概述 2. I2C总线的数据传送 2.1 数据位的有效性规定 2.2起始和终止信号 2.3 数据传送格式 2.3.1字节传送与应答 2.3.2总线的寻址 2.3.3数据帧格式 3.传输速率 1. 概述 读法: 常用:I方C 标准:I square C I2C 总线是Philips(现NXP)公司推出的一种用于IC器件之间连接的2线制船型扩展总线。通过2条信号线(SDA:串行数据线;SCL:串行时钟线)连接到总线上的器件之间传送数据,所有连接在总线上的I2C器件都可以工作于发送方式或接收方式。 I

qq_36823004的博客 4617

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

I2C通信协议简介

I2C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。

雾的博客 803

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

I2C通信外设简介

当需要发送数据时,把一个字节数据写到数据寄存器DR,当移位寄存器没有数据移位时,数据寄存器的值就会进一步转到移位寄存器,在移位过程中,就可以把下一个数据放到数据寄存器里等待,当前一个数据移位完成,下一个数据无缝连接,继续发送;当数据由数据寄存器转到移位寄存器时,会置状态寄存器的TXE为1,表示发送寄存器为空;接收时,输入的数据一位一位的从引脚移入到移位寄存器里,当一个字节的数据收齐之后,数据就整体从移位寄存器转到数据寄存器,同时置标志位RXNE,表示接收寄存器非空,就可以从数据寄存器读出数据。

雾的博客 196

UART、USART、I2C、SPI、CAN通信协议简介

UART、USART、I2C、SPI、CAN通信协议简介

qq_40700822的博客 1861

STM32标准库——(14)I2C通信协议、MPU6050简介

芯片进行I2C通信的从机地址,这个可以在手册里查到,当AD0等于0,地址为1001000,当AD0等于1时,地址为1001001,AD0就是板子引出来的一个引脚,可以调节I2C从机地址的最低位,这里地址是七位的。如果像这样用二进制来表示的话,一般没啥问题,如果在程序中用16进制表示的话,一般会有两种表示方式,以这个1001000的地址为例,第一种就是单纯的把这七位的二进制转化为16进制,这里1001000低4位和高3位切开转换。

2301_78772787的博客 2822

几种通信方式简介(SPI,I2C,uart,单总线)

通信标准 引脚说明 通信方式 通信方向 uart(通用异步收发器) TXD:发送端 RXD:接收端 GND:公共地 异步通信 全双工 单总线(1-wire) DQ:发送/接收端 异步通信 半双工 SPI SCK:同步时钟 MISO:主输入从输出 MOSI:...

flying_man_的博客 7106

I2C协议简介

I2C通信协议是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛的使用在系统内多个集成电路(IC)间的通讯。

weixin_54366081的博客 2876

I2C通信协议详解和通信流程分析

STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担,支持多主机模型,支持7位/10位地址模式,支持不同的通讯速度,标准速度(高达100 kHz),快速(高达400 kHz),支持DMA,兼容SMBus协议,其功能框图如下。//硬件I2C发送从机地址,方向为发送。(3)指定地址读:对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data) ,对应波形如下(参考自江科协资料)。

TimMc0的博客 1772

STM32学习笔记(10_2)- I2C通信协议MPU6050简介

本期介绍MPU6050的工作原理和部分重要参数

weixin_45292628的博客 1572
上一篇: STM32启动文件详解
下一篇: 波特率、比特率 与数据传输速率的区别
自先沉稳~
博客等级 码龄8年 59粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值