I2C总线

2023-05-16

目录

​1.硬件概述

1.1 常用器件

1.2 总线结构

1.3 工作原理

2.协议概述

2.1 传输格式

2.2 传输特点

2.3 读和写

2.4 时钟同步和总线仲裁

3.转换器概述

4.缓存器概述


​1.硬件概述

1.1 常用器件

        目前采用I²C 接口的器件已经超过了1000种,比较常见的器件有:MCU,I/O扩展芯片,LCD驱动芯片,LED控制芯片,温度传感器,储存器,ADC,DAC,键盘扫描仪等;

1.2 总线结构

        I²C 总线非常常用且强大, 用于在一个或多个主机与一个或多个从机之间进行通信;其总线主要包含串行数据线(SDA/serial date line)、串行时钟线(SCL/serial clock line),这两条线都是漏极开路(OD),或集电极开路(OC)结构,使用时需要外加上拉电阻;可挂载多个设备,每个设备都有自己的地址,主机通过不同的地址来寻址不同的设备。

1.3 工作原理

        通过I²C的总线结构,我们知道SCL和SDA这两条线都具有开漏驱动器和输入缓冲器,所以支持双向通信或数据传输,其工作原理如下:

  • 如果主机的开漏驱动器拉低总线, 主机端产生低电平,打开开漏极和输入缓冲器,数据由主机发送给从机;

  • 反之,如果从机产生低电平,那么数据由从机发给主机;

2.协议概述

2.1 传输格式

        主设备和从设备进行数据传输时遵循以下传输格式,数据通过一条SDA数据线在主设备和从设备之间传输0和1的串行数据,其格式有起始位,地址位,读写位,应答位,数据位,停止位,具体如下所示;

  • 起始位/S:SCL为高电平 ,SDA从高到低,为起始位;此后进入忙碌状态(BUSY),SCL按照始终的要求进行翻转,从机接收到起始位信息,状态机发生跳变,等待地址信号的输入
  • 地址位/Ax:主机按照从高到低的顺序,依次发送地址位,从机进行接收,通常情况下,地址位为7bit;每个从机有且只有一个唯一的地址编号,依靠着这个编号,确定主机具体与哪一个从机进行通信;
  • 读写位/R/W:该位置,确定数据的传输方向;紧跟地址位,只有1bit;R=0
  • 应答位/A:应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;反之,应答信号为高电平时,为无效位(NACK),表示接收器没成功接收该字节
  • 数据位/Dx:当成功收到ACK信号后,就可以正式传输数据位了,每一次默认传输一个Byte(即8bit),每个字节的传输都需要跟一个应答位(ACK/NACK);
  • 停止位/P:SCL为高电平,SDA从低到高,为停止位;此后,进入到空闲状态(IDLE);

2.2 传输特点

数据有效性:要确保SDA数据的有效性,SCL需保持高电平稳定,如采集数据,是否应答,是否起止等;换句话说,只有在SCL为低电平的时候,SDA才能改变;

串行通信:I²C 与器件之间的通信由主器件发送一个启动条件而开始,并由主器件发送一个停止条件而终止;当主器件通过产生一个启动条件控制了总线时,除非停止条件释放总线,否则其他器件都无法控制总线;

8位数据帧:I²C 的数据以8位字节定义了所有的数据事务(可以是地址信息,也可以是需要传输的数据),每一帧数据后面紧随应答位;通过从1-9位重复时钟模式来同时发送多个字节,其中第9位是ACK/NACK;​

2.3 读和写

读:主机向从机发送或写入数据;

主机发送起始条件-->寻找从机地址-W-->从机应答-->主机向从机发送数据-->从机应答-->主机发送停止条件

写:主机接收或读取由从机发送过来的数据;

主机发送起始条件-->寻找从机地址-R-->从机应答-->从机向主机发送数据-->主机应答-->主机发送停止条件

举个栗子:向寄存器写数据

2.4 时钟同步和总线仲裁

        在空闲总线上两个主机可以同时开始传输,所以必须要有一个方法来决定哪个主机来控制总线并完成其数据传输.这个方法就是时钟同步和仲裁.在单主机系统中,时钟同步和仲裁不需要;

时钟同步:通过SCL线与结构实现,简单而言,如左图所示的主机1的时钟信号遇上主机2的时钟信号,最终得到的就是总线的时钟信号

  • 低电平周期:由所有主机中最长的低电平周期决定,图示的主机1-->主机2的低电平之和;这也就意味着,低电平周期短的主机,会进入HIGH Wait state
  • 高电平周期:由高电平周期最短的主机决定,图示总线高电平周期==主机2高电平周期

总线仲裁:同一总线上,多个主机同时访问从机,就会触发仲裁;如左图所示,SDA是主机1和主机2与出来的数据总线

  • SCL置高电平, 在这个周期,主机1和主机2的数据周期有长有短,但在SCL的周期内,都有置低,都产生了开始条件,没触发仲裁
  • 仲裁是针对每个数据bit,逐字判断,一直到有图箭头所示数据位,主机1是高电平,主机2是低电平,两主机与出来的结构就是低电平,这就是SDA要传输的数据,触发中断,主机1停止运行,丢失总线SDA的控制权,主机2获取主机主动权,继续完成相关操作;

3.转换器概述

        I²C 使用一个带有输入缓冲器的开漏驱动器,支持双向通信,这意味着上拉电阻器完全控制着高电平信号的生成;如图示,我们可以看到两个器件具有不同的 VCC 电压,即 VCCA1 和 VCCB2,这意味着它们的数字逻辑电平不同,因此需要从一个电压电平转换到另一个电压电平,这一现象通常称为电压电平不匹配;那么上拉电阻要接到哪个器件上呢?

a. 如果接低高器件上,那高压器件也许没法达到它最低的工作电压(VIL),高压器件可能无法正常工作;

b. 如果接低压器件上,那低压器件会工作在超出它工作电压环境中(VIH),低压器件可能会被烧毁;

        为此,要纠正电压电平不匹配现象,需要使用一个转化器,也叫电平转化器;I²C 的转换通常是使用pass FET架构完成的,此架构可实现电压电平隔离并提供一种用来传递低电平信号的方法,不过它无法隔离总线电容;具体如何工作呢?

  • 当器件1输出高电平,转换器与总线压差Vgs=0,MOS管关闭,器件2被电阻R2上拉到3.3V;
  • 当器件1输出低电平,转换器与总线压差Vgs=+2.5V,大于导通电压(Vth=0.7V),MOS管导通,器件2通过MOS管被拉到低电平;
  • 当器件2输出高电平,转换器与总线压差Vgs=-2.5V,MOS管关闭,SDA1被电阻R1上拉到1.8V;
  • 当器件2输出低电平,正常情况下器件1位高电平,Vgs=0,MOS管关闭,但由于MOS管的寄生二极管,会把器件1下拉至低电平(这个低电平不是0V,是比器件2高一个二极管压降,比如 (0.7V)),MOS管导通,导通以后,那器件1/2都为低电平;
  • 电平转换方式的主要有晶体管电平转换,专用电平转换芯片,限流电阻电平转换,电阻分压电平转换,二极管电平转换这五种方式,应用原理和使用场景各有差异,这里不挨个阐述了,大家可自行去了解。

4.缓存器概述

        我们知道I²C总线上的每个器件都有一个特定的器件地址,用于区分同一个 I²C 总线上的其他器件;物理 I²C 接口由串行时钟线SCL和串行数据线SDA组成,且它们都必须通过上拉电阻器连接到VCC;上拉电阻器的大小由总线上的电容 数量以及I²C总线上使用的最大VLL决定。总线上的电容Cbus,包括 PCB 电容,主器件的电容以及每个 从器件的电容;

        I²C的工作模式,常见的有如下三种,里边包含的f,C,t,V,I这些参数,主要是用于选择上拉电阻的阻值,和确定是否需要在系统中使用缓冲器,以满足I²C标准;除此之外,还有高速模式,和超快速模式,这里就不多做介绍了;

最大上拉电阻:SCL和SDA的最长上升时间规格tRISE MAX由上拉和CBUS所创建的RC 时间常数控制,被定义为从VIO过渡到VIH时花费的时间;最大上拉电阻的阻值大小由公式1决定;

最小上拉电阻:由VOL Max定义,VOL Max是跨下拉电阻产生的电压,当打开时,会有一个指定的 IOL MIN 经过它;这样即可有效地定义总线上的任何FET的最大RDS;了解VCC、VOL MAX和IOL MIN之后,我们便可定义最小上拉电阻,在为确保绝不超过 VOL 时需要使用此值,公式2;

        I²C 接口 可支持总线上的数百个从器件,此数量只取决于可用从器件地址的数量;不过,很明显,如果每个器件都有高达10Pf的电容,则运行模式的给定总线上的从器件数量将受到C BUS MAX的限制;这意味着需要采用某种方法将一个总线及其总线电容拆分到多个总线中,以满足 I²C 时序要求;I²C 缓冲器正是为此而生;

..........

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I2C总线 的相关文章

  • 在FPGA中使用Verilog实现I2C通信

    按照I2C标准的官方时序 可以看出时序看起来很简单 xff0c 不过它严格的按照时序要求来传送数据 xff0c 马虎不得的 xff0c 特别是起始和停止的条件 xff0c 起始必须要时钟线SCL为高电平时数据线SDA拉低 xff1b 而停止
  • I2C通信

    I2 C 芯片间 总线接口连接微控制器和串行 I 2 C 总线 它提供多主机功能 xff0c 控制所有 I 2 C 总线特定的 时序 协议 仲裁和定时 1 xff0c 物理层 1 IIC是一种两线串行的通信方式 xff0c SCL xff0
  • 基于I2C/SPI的温湿度采集与OLED显示

    一 I2c通讯协议 I2C通讯协议 Inter xff0d Integrated Circuit 引脚少 xff0c 硬件实现简单 xff0c 可扩展性强 xff0c 不需要USART CAN等通讯协议的外部收发设备 xff0c 现在被广泛
  • I2C总线和触摸屏驱动移植实战-linux驱动开发第9部分-朱有鹏-专题视频课程

    I2C总线和触摸屏驱动移植实战 linux驱动开发第9部分 9306人已学习 课程介绍 本课程是linux驱动开发的第9个课程 xff0c 主要内容是linux的I2C子系统以及电容触摸屏驱动的移植 学习本课程的核心点在于I2C子系统 xf
  • I2C读取IST8310

    文章目录 I2C简介I2C传输过程I2C仲裁IST8310磁力计Cube配置相关函数HAL I2C Mem Read函数HAL I2C Mem Write函数IST8310的初始化 程序流程代码编写 I2C简介 2C是一种半双工双向二线制的
  • 树莓派 I2C通信,控制多个I2C从设备

    1 需要安装 i2c tools工具 在黑框输入 xff1a sudo apt get install i2c tools 2 后续编程使用python库 在黑框输入 xff1a sudo apt get install python sm
  • mt6762/mt6765平台i2c驱动能力修改与波形优化

    mt6762在连接一些外设时 xff0c i2c在低电平会拉不低的情况 xff0c 最低电平在0 4V左右 xff0e 这时需要去掉外设的上拉电阻或调整硬件i2c的驱动电流 xff0e 修改文件路径 xff1a vendor mediate
  • I2C的 SCL和SDA为什么要上拉

    因为允许把多个I2C总线器件连接到总线上 xff0c 连接到I2C总线上的器件是漏极开路或集电极开路的 xff0c 可以实现线与功能 同时 xff0c 因为接了上拉电阻 xff0c 在总线空闲期间 xff0c SDA和SCL都是高电平 xf
  • 关于I2C和SPI总线协议

    关于I2C和SPI总线协议 IICvs SPI 现今 xff0c 在低端数字通信应用领域 xff0c 我们随处可见IIC Inter Integrated Circuit 和 SPI Serial Peripheral Interface
  • I2C驱动体系结构一:驱动软件概念与对应硬件的关系

    一 概念 xff1a 1 设备 xff1a struct device xff1a 该数据结构是对物理设备的软件抽象 xff0c 比如I2C slave xff08 对应i2c client xff09 和I2C 适配器 xff08 对应i
  • I2C总线和SPI总线

    I2C串行总线一般有两根信号线 xff0c 一根是双向的数据线SDA xff0c 另一根是时钟线SCL I2C协议 2条双向串行线 xff0c 一条数据线SDA xff0c 一条时钟线SCL SDA传输数据是 大端传输 xff08 字节高位
  • I2C—读写EEPROM

    1 I2C协议简介 I2C通讯协议 Inter xff0d IntegratedCircuit 是由Phiilps公司开发的 xff0c 由于它引脚少 xff0c 硬件实现简单 xff0c 可扩展性强 xff0c 不需要USART CAN等
  • stm32使用MPU6050读取温度值验证I2C

    通过MPU6050测温来进行I2C的验证学习 关于MPU6050寄存器相关可以参考https blog csdn net he yuan article details 76559569 I2C时序很多 xff0c 我是直接以原子I2C的程
  • 基于I2C/SPI的温湿度采集与OLED显示

    基于I2C SPI的温湿度采集与OLED显示 一 AHT20温湿度采集1 I2C2 温湿度采集代码效果 二 OLED显示1 显示学号姓名2 诗句显示 三 总结四 参考 一 AHT20温湿度采集 1 I2C 解释什么是 软件I2C 和 硬件I
  • S5PC100 I2C总线

    I2C 使用2根双向信号线来传递数据 SCL 时钟线 SDA 数据线 特点 半双功 xff0c 仅需要2根线 一般在PCU 上占2个PIN I2C 总线 上 都是 oc od 输出 xff0c 所以使用上拉电阻 当总线空闲的时候 都是输出
  • STM32基础---BH1750 硬件 IIC 驱动程序+ 测试demo

    STM32基础 BH1750 硬件 IIC 驱动程序 测试demo STM32CudeMx MDK ARM BH1750 简介 产品介绍 产品特点 测量程序步骤 指令集合结构 从 写指示 到 读出测量结果 的测量时序实例 STM32Cube
  • BH1750 传感器实战教学 —— 驱动移植篇

    前言 上一篇 BH1750 的实战教学我们说明的实际应用中传感器的硬件设计 BH1750 传感器实战教学 硬件设计篇 我们提到过在本次使用的芯片为 51 内核 I2C 通讯驱动实现与 STM32 上还是有很大区别的 对于我们来说 已经掌握了
  • 外设驱动库开发笔记22:ADXL345三轴数字加速度计驱动

    移动设备的广泛应用增加对移动过程中各种参数的检测需求 ADXL345三轴数字加速度计可以用来检测加速度 进而测量倾斜角度等 在这一篇中 我们将讨论ADXL345三轴数字加速度计驱动程序的设计与实现 1 功能概述 ADXL345是一款小而薄的
  • Linux下CH452数码管芯片驱动调试(GPIO模拟I2C)

    1 设备连接 主控板处理器为Cortex A5处理器 内核4 9 0 主控板和CH452引脚定义如下表1 1所示 表1 1 主控板和CH452引脚定义 序号 CH452引脚定义 主控板引脚定义 1 SDA PB29 2 SCL PB30 3
  • docker 容器内的 I2C

    我正在尝试在 docker 容器内的树莓派上使用 i2c 引脚 我使用 RUN 安装所有模块 但是当我使用 CMD 运行我的 python 程序时 我收到一条错误消息 Trackback most recent call last file

随机推荐

  • CTP工作原理及结构

    1 工作原理 自容TP xff1a 自电容的扫描方式是进行逐行扫描 xff0c 所有通道既是感应通道也是驱动信号通道 xff0c 通过对比触摸前后电容量的变化来判定X Y方向坐标 xff0c 然后组合成触摸点的坐标 互容TP xff1a 互
  • LCD工作原理及结构

    1 主流显示面板技术 xff1a LCD xff0c OLED xff0c MicroLED 2 主流显示屏的发展趋势 3 LCD堆叠结构 xff1a 背光 xff0c 下偏光片 xff0c TFT Glass xff0c CF Glass
  • OLED工作原理及结构

    1 主流显示面板技术 xff1a LCD xff0c OLED xff0c MicroLED 2 主流显示屏的发展趋势 3 OLED堆叠结构 xff1a 相比LCD xff0c OLED没了背光和下偏光片 4 OLED发光原理 xff1a
  • Git Fork操作与配置

    https blog csdn net Lu Ca article details 128612125 我理解的git fork xff1a 将别人 xff08 张三 xff09 仓库包括文件 xff0c 提交历史 xff0c issues
  • 背光的工作原理及结构

    1 什么是背光 xff1a LCD本身是不发光的 xff0c 因此它需要一个外部面光源系统来帮助其显示 xff0c 即背光源 xff08 Backlight xff09 xff1b 2 背光的种类 xff1a 从发光类型来分 xff0c 可
  • Microled简介及关键工艺(巨量转移)

    1 什么是Microled xff1f 通俗来讲 xff0c 将作为发光器件LED用作显示屏的像素 xff0c 固这种LED的尺寸就得做得很小 xff08 约 xff1c 100 m xff09 xff0c 这种技术就是Microled x
  • 数字电路基础-逻辑门电路

    1 门电路的概念 实现基本逻辑运算和复合运算的单元电路称为门电路 xff0c 常用的门电路有非门 与非门 或非门 与非门 与或非门等 2 基本逻辑门电路 a 与门 xff1a 全1出1 xff0c 有0出0 工作原理 xff1a 输入A B
  • 51单片机-控制LED灯

    目录 1 硬件设计 2 软件设计 2 1 点亮一颗LED灯 2 2 LED闪烁 2 3 LED流水灯 3 知识点 3 1 while函数的应用 3 2 常用数据类型 3 3 延时函数的自动生成 1 硬件设计 通过原理图分析 xff0c LE
  • 51单片机-74HC595移位寄存器

    目录 1 74HC595芯片介绍 1 1 引脚定义 1 2 工作原理 2 实际应用 2 1 控制数码管 2 2 点阵屏显示图形 2 3 点阵屏显示动画 3 知识点 3 1 位变量 xff08 sbit bit xff09 3 2 字模提取
  • 51单片机-独立按键控制LED灯

    目录 1 硬件设计 2 软件设计 2 1 独立按键控制LED闪烁 2 2 独立按键控制LED状态 2 3 独立按键控制LED显示二进制 2 4 独立按键控制LED移位 3 知识点 3 1 if语句的运用 3 2 常用运算符 1 硬件设计 轻
  • 51单片机-控制数码管

    目录 1 硬件设计 1 1 LED数码管介绍 1 2 原理图设计 2 软件设计 2 1 静态数码管显示 2 2 动态数码管显示 2 3 模块化编程 xff08 头文件 xff09 3 知识点 3 1 数组 3 2 子函数 3 3 switc
  • LCD的制作工艺

    目录 1 LCD简介 2 LCD制程 2 1 Array制程 2 1 1 像素电路 2 1 2 制程简介 2 2 Cell制程 2 3 Module组装 3 总结 1 LCD简介 LCD是目前显示领域的重要组成部分 xff0c 可通过如下链
  • 51单片机-LCD1602

    目录 1 硬件设计 1 1 LCD1602介绍 1 2 原理图 2 软件设计 2 1 控制原理 2 2 控制时序 2 3 指令集 2 4 程序设计 3 知识点 3 1 宏定义 3 2 指针与数组 3 3 for语句 1 硬件设计 1 1 L
  • 51单片机-矩阵键盘

    目录 1 硬件设计 2 软件设计 2 1 矩阵键盘扫描 2 2 矩阵键盘 密码锁 3 知识点 3 1 模块化编程的应用 3 2 include详解 1 硬件设计 矩阵键盘按键数量较多 xff0c 为了减少I O口的占用 xff0c 通常将按
  • 如何优雅的让fork后的仓库与原仓库同步

    https www cnblogs com tudou1179006580 p 14875486 html https github com selfteaching the craft of selfteaching issues 67
  • UDP——C语言socket编程

    UDP编程相比TCP来说相对简单主要用到sendto 和recvfrom 这两个函数 xff0c 接下来主要介绍一下这两个函数 头文件 span class token macro property span class token dir
  • 函数与宏定义

    前言 本文介绍函数与宏定义 一 函数的概念 1 函数的定义 自定义函数的形式 xff1a 存储类型符 返回值类型符 函数名 xff08 形参说明表 xff09 函数语句体 xff08 1 xff09 存储类型符 函数作用范围 xff0c 默
  • 51单片机-定时器中断

    目录 1 定时器 计数器 1 1 工作原理 1 2 相关寄存器 1 3 工作模式 xff08 模式1 xff09 2 中断系统 2 1 中断的概念 2 2 中断结构 2 3 中断源 2 4 相关寄存器 3 如何配置定时器中断 4 实际应用
  • 51单片机-串口通信

    目录 1 什么是通信 1 1 通信的概念 1 2 传送方式 1 3 同步方式 1 4 传送方向 1 5 校验方式 2 单片机串口介绍 2 1 硬件电路 2 2 电平标准 2 3 常见接口 2 4 内部结构 2 5 相关寄存器 2 6 工作模
  • I2C总线

    目录 1 硬件概述 1 1 常用器件 1 2 总线结构 1 3 工作原理 2 协议概述 2 1 传输格式 2 2 传输特点 2 3 读和写 2 4 时钟同步和总线仲裁 3 转换器概述 4 缓存器概述 1 硬件概述 1 1 常用器件