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总线 的相关文章

  • I2C通信

    I2 C 芯片间 总线接口连接微控制器和串行 I 2 C 总线 它提供多主机功能 xff0c 控制所有 I 2 C 总线特定的 时序 协议 仲裁和定时 1 xff0c 物理层 1 IIC是一种两线串行的通信方式 xff0c SCL xff0
  • 解析I2C通信协议

    一 I2C的概念 1 I2C总线是PHLIPS公司推出的一种串行总线 xff0c I2C总线只有两根双向信号线 其中一根是数据线SDA xff0c 另一根是时钟线SCL 2 每个接到I2C总线上的器件都有唯一的地址 发送数据到总线上的称为发
  • 基于I2C/SPI的温湿度采集与OLED显示

    一 I2c通讯协议 I2C通讯协议 Inter xff0d Integrated Circuit 引脚少 xff0c 硬件实现简单 xff0c 可扩展性强 xff0c 不需要USART CAN等通讯协议的外部收发设备 xff0c 现在被广泛
  • I2C通信之EEPROM-第1季第15部分-朱有鹏-专题视频课程

    I2C通信之EEPROM 第1季第15部分 3173人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第15个课程 xff0c 主要讲解了EEPROM的编程和使用 xff0c 其中重点是I2C接口 xff0c I2C是物
  • PX4代码中LIDAR-Lite v3激光测距仪I2C驱动

    调试LIDAR Lite v3激光测距仪 xff0c 通读了PX4代码中驱动相关的部分 在这里做一下记录 飞控硬件是pixhawk1 xff0c PX4软件版本为1 7 3 按照官方教程进行接线和配置 xff0c 链接为 https doc
  • I2C驱动体系结构一:驱动软件概念与对应硬件的关系

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

    2019独角兽企业重金招聘Python工程师标准 gt gt gt I2C总线是PHLIPS公司在20世纪80年代推出的一种串行总线 具有引脚少 xff0c 硬件实现简单 xff0c 可扩展性强的优点 I2C总线的另一优点是支持多主控 xf
  • STM32 I2C_OLED显示汉字及屏幕滚动

    STM32 I2C OLED显示汉字及屏幕滚动 文章目录 STM32 I2C OLED显示汉字及屏幕滚动一 I2C以及AHT20温湿度传感器介绍二 用0 96寸OLED屏幕显示数据1 OLED介绍2 样例测试 三 汉字编码原理编码排序A0A
  • I2C驱动App

    1 查看eeprog c源代码 copyright C by 2009 Guangzhou FriendlyaRM in China email capbily 64 163 com website arm9 net include lt
  • I2C总线

    目录 1 硬件概述 1 1 常用器件 1 2 总线结构 1 3 工作原理 2 协议概述 2 1 传输格式 2 2 传输特点 2 3 读和写 2 4 时钟同步和总线仲裁 3 转换器概述 4 缓存器概述 1 硬件概述 1 1 常用器件
  • ESP8266如何使用u8g2(I2C)驱动SH1106的OLED

    u8g2是一款单色图形库 非常适合12864之类的显示屏 基本上支持了市面上的主流显示控制器 可是偏偏对SH1106不是那么友好 使用起来不是很方便 打开IDE的示例程序可以看到对SH1106列出来的几乎都SPI通信方式 仅仅只有一条是使用
  • I2C接口

    I2C的结构和特点 他是一具有两条总线线路 即一条串行数据线SDA和一条串行时钟线SCL 每个连接到总线上的器件都可以通过唯一的地址联系主机 它是一个真正的多主机总线 数据传输通过冲突检测和仲裁防止数据被破坏 串行的8位双向数据传输位速率更
  • Linux:从用户空间实例化:eeprom new_device

    环境 x86 Ubuntu 14 04 我想获得类似的东西 i2c0 eeprom eeprom 50 compatible at 24c32 reg lt 0x50 gt 但因为在 x86 中没有可用的设备树 所以我遵循i2c insta
  • 找不到i2c注册宏?

    我正在 raspi 上开发 I2C 驱动程序 register I2C device static static const struct i2c board info rasp i2c devices mbed mbedID in the
  • docker 容器内的 I2C

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

    我已根据以下教程使用 I2C 接口将 ESP32 与 ADXL345 连接起来Tutorial http www esp32learning com code esp32 and adxl345 sensor example php 但是
  • Windows IoT 和 DS3231 RTC 时钟

    对于我的项目 我需要当前时间和日期 不幸的是 当 RP2 关闭时 它就会失去一切 接下来的事情是 我将没有互联网连接来使用 NTP 为此 我需要实现 DS3231 RTC 模块 所有设备的通信都通过 I2C 运行 Raspberry Ard
  • 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取

    我正在尝试使用 C 写入和读取 I2C 总线 我的I2C总线是虚拟的 第一件事是加载内核模块i2c stub 我可以通过 bash 完成所有事情 现在我将其移植到 C 我可以打开i2c总线 获取特定地址的i2c总线 但无法读写 我正在虚拟化
  • 如何转换温度传感器得到的值?

    我在ST工作Temperature sensor hts221 我用I2C与传感器的命令通信 我从文档中看到类似以下文字 enter code here Temperature data are expressed as TEMP OUT
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些

随机推荐

  • 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 常用器件