当前位置: 首页 > article >正文

一文速通 IIC I2C子系统驱动 通信协议原理 硬件 时序 深度剖析

本文作为一个引入,作用是让读者理解熟知IIC协议关键内容,结合实际手册内容,深度解析协议本质,作为后续嵌入式linux驱动IIC子系统的一个铺垫。

目录

1. 硬件连接

2. IIC传输时序

2.1.写操作

2.2.读操作

2.3.I2C信号

3.IIC协议细节

4.IIC协议类比 SPI、UART


1. 硬件连接

I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻。(之前在我们的硬件篇有提到上拉电阻 还想系统性的了解上拉电阻的可以参考学习 接下来我们也会对IIC硬件中的上拉电阻进行分析)

由此我们可以得知以下信息,这些都是重点,读者需要牢牢记住。

同步、串行、半双工、多主机总线、近距离、低速、芯片与芯片之间的通信;

接口:两线制:SDA数据线、SCL时钟线 成本低

可以挂载多设备、主机是使用总线权利者、从机只可以听取从机、被主机管理;

 我们接下来就是分析下上拉电阻的问题了。

我们知道由于芯片在输出高低电平的时候,内部通常会有两个mos管(针对mos管的知识在硬件篇也有系统的讲 不懂的读者也可以回顾学习),上面的MOS管导通输出高电平,下方的MOS管导通输出低电平。

因此我们熟知IIC是需要多设备通信,假设我们把两个IO口都挂在到一个总线上,很简单的可以发现当一个芯片输出高电平,一个芯片输出低电平,此时就短路了,因此IIC对于设备的IO口做了一些阉割,去掉了上面的mos管,只保留下方的mos管,但是问题也暴露出来了,虽然解决了短路的问题,但是设备只可以输出低电平,另一种情况的电平就是未知的状态,浮空,为了避免这种情况,我们需要引入上拉电阻,这样完美了解决这个问题,同时也体现了IIC硬件设计的驱动能力。

同时我通过IIC手册对于IIC硬件设计规范图图例进行实例的调研,如下所示:

可以清楚的看出,正如我们先前总结的一样,这就是IIC的上拉电阻的作用。

2. IIC传输时序

2.1.写操作

流程如下:

  • 主芯片要发出一个start信号

  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)

  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据

  • 主设备发送一个字节数据给从设备,并等待回应

  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

  • 数据发送完之后,主芯片就会发送一个停止信号。

下图:白色背景表示"主→从",灰色背景表示"从→主"

2.2.读操作

流程如下:

  • 主芯片要发出一个start信号

  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)

  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据

  • 从设备发送一个字节数据给主设备,并等待回应

  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

  • 数据发送完之后,主芯片就会发送一个停止信号。

下图:白色背景表示"主→从",灰色背景表示"从→主"

2.3.I2C信号

I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。

  • 开始信号(S):SCL为高电平时,SDA山高电平向低电平跳变,开始传送数据。

  • 结束信号(P):SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

  • 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA

  • SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化

I2C协议信号如下:

3.IIC协议细节

  • 如何在SDA上实现双向传输? 主芯片通过一根SDA线既可以把数据发给从设备,也可以从SDA上读取数据,连接SDA线的引脚里面必然有两个引脚(发送引脚/接受引脚)。

  • 主、从设备都可以通过SDA发送数据,肯定不能同时发送数据,怎么错开时间? 在9个时钟里, 前8个时钟由主设备发送数据的话,第9个时钟就由从设备发送数据; 前8个时钟由从设备发送数据的话,第9个时钟就由主设备发送数据。

4.IIC协议类比 SPI、UART

特性I2CUARTSPI
通信方式多主多从同步通信全双工异步通信主从同步通信
通信线数2 条(SCL、SDA)2 条(TX、RX,可能附加GND)4 条(SCLK、MOSI、MISO、CS)
通信速率标准模式:100kbps;
快速模式:400kbps;
高速模式:3.4Mbps
通常 9600bps - 1Mbps通常最高几十Mbps,依设备支持而定
拓扑结构菊花链总线点对点主从结构,支持多从设备
总线仲裁支持,基于时序和逻辑(多主控制)不支持不支持
时钟信号由主设备提供不需要(内部分频产生波特率)由主设备提供
传输效率较高,支持多个从设备,但有协议开销较低,数据包中通常有起始位、停止位和校验位高,直接传输数据
硬件复杂性适中,依赖外部上拉电阻简单,仅需基本串口硬件较高,需额外的片选线和主控支持
多设备支持支持多个从设备(地址唯一)每个 UART 端口仅支持一对设备支持多个从设备(需独立片选信号)
全双工支持不支持(半双工)支持支持
数据传输可靠性较高,有 ACK/NACK 确认机制依靠硬件/协议,无确认机制较高,无明确协议确认机制
典型应用场景传感器(如温湿度、气压传感器)、EEPROM调试接口、低速外设通信高速外设(如显示屏、ADC、DAC)
易用性中等,需要配置设备地址简单,常用于调试与低速数据传输复杂,需要主控与从设备紧密配合

http://www.kler.cn/a/446603.html

相关文章:

  • HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化
  • 在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。
  • 浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码
  • netcore 集成Prometheus
  • RestTemplate实时接收Chunked编码传输的HTTP Response
  • 个人秋招总结
  • 青少年编程与数学 02-004 Go语言Web编程 14课题、数据操作
  • K8s docker-compose的入门
  • Yolov11学习笔记
  • 使用Redis提升PHP应用的性能
  • SpringBoot02
  • Netdevops入门基础学习03
  • Leaflet的zoom层级-天地图层级之间的关系
  • Micropython RPI-PICO 随记-DS3231和RTC
  • POI-TL插件开发-表格分组插件
  • HTML 面试题全解析
  • Intellij配置scala运行环境
  • 故障诊断 | 一个小创新:特征提取+KAN分类
  • OpenAI o3 “震撼” 发布后回归技术本身的审视与进一步思考
  • Hive其四,Hive的数据导出,案例展示,表类型介绍
  • 3D开发工具HOOPS助力造船业加速设计与数字化转型
  • 告别Zoo of Factor:净化因子分析中的数据挖掘与p值操纵
  • Vue.js前端框架教程2:Vue路由和状态管理库Pinia
  • 开启新征程——QML
  • MvMRL:一种用于分子性质预测的多视图分子表示学习方法
  • Vue3自定义事件