I2C通信原理

2023-05-16

  • 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器件都可以工作于发送方式或接收方式。

I2C总线的SDA和SCL是双向I/O线,必须通过上拉电阻接到正电源,当总线空闲时,2线都是“高”。所有连接在I2C总线上的器件引脚必须是开漏或集电极开路输出,即具有“线与”功能。
在这里插入图片描述

2. I2C总线的数据传送

2.1 数据位的有效性规定

I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
在这里插入图片描述

2.2起始和终止信号

I2C总线规定,当SCL为高电平时,SDA的电平必须保持稳定不变的状态,只有当SCL处于低电平时,才可以改变SDA的电平值,但起始信号和停止信号是特例。因此,当SCL处于高电平时,SDA的任何跳变都会被识别成为一个起始信号或停止信号。
在这里插入图片描述

2.3 数据传送格式

2.3.1字节传送与应答

在I2C总线的数据传输过程中,发送到SDA信号线上的数据以字节为单位,每个字节必须为8位,而且是高位(MSB)在前,低位(LSB)在后,每次发送数据的字节数量不受限制。但在这个数据传输过程中需要着重强调的是,当发送方发送完每一字节后,都必须等待接收方返回一个应答响应信号。
在这里插入图片描述

2.3.2总线的寻址

  1. DA3~DA0:4位器件地址是I2C总线器件固有的地址编码,器件出厂时就已给定,用户不能自行设置。
  2. A2~ A0:3位引脚地址用于相同地址器件的识别。若I2C总线上挂有相同地址的器件,或同时挂有多片相同器件时,可用硬件连方式对3位引脚A2~A0接Vcc或接地,形成地址数据。
  3. R/W:数据传送方向。 R/W=1时,主机接收(读);R/W =0,主机发送(写)。
    主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据 位将自己确定为发送器或接收器。

在这里插入图片描述

2.3.3数据帧格式

a) 主机向从机写数据
在这里插入图片描述

  1. 主机产生起始信号S。
  2. 主机发送寻址字节SLAVE ADDRESS,其中的高7位表示数据传输目标的从机地址;最后1位是传输方向位,此时其值为0,表示数据传输方向从主机到从机。
  3. 当某个从机检测到主机在I2C总线上广播的地址与它的地址相同时,该从机就被选中,并返回一个应答信号A。没被选中的从机会忽略之后SDA上的数据。
  4. 当主机收到来自从机的应答信号后,开始发送数据DATA。主机每发送完一个字节,从机产生一个应答信号。如果在I2C的数据传输过程中,从机产生了非应答信号/A,则主机提前结束本次数据传输。
  5. 当主机的数据发送完毕后,主机产生一个停止信号结束数据传输,或者产生一个重复起始信号进人下一次数据传输。

b) 主机从从机读数据
在这里插入图片描述

  1. 主机产生起始信号S。
  2. 主机发送寻址字节SLAVE ADDRESS,其中的高7位表示数据传输目标的从机地址;最后1位是传输方向位,此时其值为1,表示数据传输方向由从机到主机。寻址字节SLAVE ADDRESS发送完毕后,主机释放SDA(拉高SDA)。
  3. 当某个从机检测到主机在I2C总线上广播的地址与它的地址相同时,该从机就被选中,并返回一个应答信号A。没被选中的从机会忽略之后SDA上的数据。
  4. 当主机收到应答信号后,从机开始发送数据DATA。从机每发送完一个字节,主机产生一个应答信号。当主机读取从机数据完毕或者主机想结束本次数据传输时,可以向从机返回一个非应答信号A,从机即自动停止数据传输。
  5. 当传输完毕后,主机产生一个停止信号结束数据传输,或者产生一个重复起始信号进入下一次数据传输。

c) 主机和从机双向数据传送

在这里插入图片描述

   在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。

3.传输速率

   I2C的标准传输速率为100Kbps,快速传输可达400Kbps。目前还增加了高速模式,最高传输速率可达3.4Mbps。

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

I2C通信原理 的相关文章

  • 【STM32】入门(六):I2C协议

    STM32 STM32单片机总目录 1 常见I2C设备 EEPROM 温湿度传感器 xff0c 例如 xff1a AHT10 电量计 xff0c 例如 xff1a TI的BQ34Z100 日历时钟 模数或数模转换器 2 I2C总线结构 I2
  • 首个单芯片超小封装I2C转PWM解决方案

    ZW10I8X系列 高性能工业级16位高精度I2C转PWM接口SOC芯片 接口标准 符合飞利浦的I2C标准规范 xff0c 目前支持的速度为小于100kbit 建议使用50k 1个使能脚 xff08 ZW10I8xE后缀带E的 xff09
  • UART、I2C、SPI接口常见面试问题总结

    UART 定义 xff1a Universal Asynchronous Receiver Transmitter 通用异步收发传输器 特点 xff1a 速率不快 可全双工 结构上一般由波特率产生器 UART发送器 UART接收器组成 xf
  • 【技术分享】GD32硬件I2C调试中的问题与解决过程-续

    使用GD32303C EVAL开发板和MPL3115A2模块测量气压或高度数据 xff0c 两者间使用硬件I2C进行通讯 上次调试发现官方例程 xff08 单一I2C读写功能 xff09 可以正常读写MPL芯片的寄存器 xff0c 而我建立
  • I2C 简介

    1 I2C 简介 这里的内容参考的是 2014 4 4 的 V 6 版本的官方 I2C Bus 规格书 xff0c 第六章有给出相应的链接 1 1 引脚 I2C 一般而言是一种同步半双工的通信方式 xff0c 所以除了电源引脚之外 xff0
  • i2c那些坑

    origin http bbs ntpcb com simple t126695 html I2C 的那些坑 一般情况下 xff0c i2c 设备焊接没什么问题 xff0c 按照设备手册一步步来 xff0c 基本上就顺风顺水能够用起来 如果
  • STM32软件模拟I2C从机的实现方法

    1 1 前言 在使用I2C通信时 xff0c 一般会用到软件模拟I2C 目前网络上能搜索到的软件模拟I2C一般都是模拟I2C主机 xff0c 很少有模拟I2C从机的例程 由于I2C主机在进行数据收发时 xff0c 有明确的可预见性 xff0
  • Linux控制I2C/SMBus设备

    平台 xff1a 树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1 2 I2C是Philips开发的一种两线通信协议 xff0c 常用于一些对速度要求不高的小型器件上 SMBus是系统管理总线 xff0c 基
  • 海思文件系统缺少文件himm 、i2c_read 、i2c_write 、ssp_read 、ssp_write

    原因 xff1a 海思根文件默认没有把himm i2c read i2c write ssp read ssp write工具集成在bin里 xff0c 但是在sdk中 解决办法 xff1a cd osdrv tools board reg
  • I2C总线

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

    UART 异步 串行 全双工 I2C SPI 不同通信协议比较 UART UART协议详解 UART通信 xff0c 接收与发送 xff08 详细版 xff0c 附代码 xff09 UART串行通信详解 待整理 UART是Universal
  • STM32基础---BH1750 硬件 IIC 驱动程序+ 测试demo

    STM32基础 BH1750 硬件 IIC 驱动程序 测试demo STM32CudeMx MDK ARM BH1750 简介 产品介绍 产品特点 测量程序步骤 指令集合结构 从 写指示 到 读出测量结果 的测量时序实例 STM32Cube
  • 调制与解调(1)——初认识

    在深入项目前 还需要对调制解调做深入学习 1 基本概念 调制 调制就是使一个信号 如光 高频电磁振荡等 的某些参数 如振幅 频率等 按照另一个欲传输的信号 如声音 图像等 的特点变化的过程 调制是通过改变高频载波的幅度 相位或者频率 使其随
  • EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)

    1 前言 1 本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法 包含底层时序和读写的代码 2 大部分代码是EEPROM芯片通用的 但是其中关于某些时间的要求 是和具体芯片相关的 和主控芯片和外设芯片都有关系 需要具体分析
  • STM32设置为I2C从机模式

    STM32设置为I2C从机模式 目录 STM32设置为I2C从机模式 前言 1 硬件连接 2 软件编程 3 运行测试 3 1 I2C连续写入 3 2 I2C连续读取 3 3 I2C单次读写测试 4 总结 前言 STM32的I2C作为主机的情
  • Linux:从用户空间实例化:eeprom new_device

    环境 x86 Ubuntu 14 04 我想获得类似的东西 i2c0 eeprom eeprom 50 compatible at 24c32 reg lt 0x50 gt 但因为在 x86 中没有可用的设备树 所以我遵循i2c insta
  • Raspberry Pi 4 I2C 总线无法正常工作

    尽管 i2cDetect 确实检测到目标 但我的 Raspberry Pi 4 Model B 上的 I2C 总线无法正常工作 我尝试使用 Raspberry Pi Sense HAT 和 SSD1306 OLED 显示屏以及带有 I2C
  • 如何为连接到 I2C gpio 扩展器的虚拟 mdio-gpio 设备配置 ACPI *.asl

    我正在使用 Q7 模块 x86 并尝试在 Linux 上使用 ACPI SSDT Overlay 配置我们的外设 但我对此很挣扎 我想我误解了ACPI的一些核心概念 Problem CPU gt I2C gt PCA9575 GPIO Ex
  • 如何将 I2C 地址传递给 Adafruit CircuitPython 代码? (运行 ADS1115)

    我正在尝试使用两个 I2C 地址 0x48 0x49 在一个 Raspberry Pi 上运行两个 Adafruit ADS1115 每个设备的地址可以通过将 ADDR 引脚连接为高电平 0x49 或使其悬空 默认为 0x48 来设置 我已
  • 如何转换温度传感器得到的值?

    我在ST工作Temperature sensor hts221 我用I2C与传感器的命令通信 我从文档中看到类似以下文字 enter code here Temperature data are expressed as TEMP OUT

随机推荐

  • 在 VS Code 中使用 Git

    1 VS Code安装2 在VS Code中登录Github账号3 Git 安装4 Git配置5 新建远程仓库并用命令行提交6 使用VSCode提交 1 VS Code安装 到vs code官网下载合适的版本并安装 2 在VS Code中登
  • 图像处理与机器视觉复习

    完整资源 xff1a GIthub链接 一 填空题 图像灰度均值 方差 图像的灰度平均值是平指灰度的平均水平 平均方差是衡量一个样本波动大小的量 xff0c 对图像来说 xff0c 平均方差反应的是图像高频部分的大小 方差小 xff0c 则
  • You-get && FFmpeg

    一 引言二 you get 介绍2 1 you get 安装2 2 you get语法及参数2 3 you get运用实例 三 FFmpeg介绍3 1 FFmpeg安装3 2 you get与FFmpeg的结合使用 四 HEVC 扩展 一
  • 一文读懂 主成分分析 与 因子分析

    2023 2 20更新 xff1a 修改了一些文字错误 xff0c 优化了排版 xff0c 增加了一些拓展内容 xff0c 祝大家学业有成 xff01 xff08 期待三连 x1f601 x1f601 xff09 目录 一 主成分分析二 因
  • Ubuntu 18.04 升级 20.04

    1 更换源2 安装所有更新包3 移除Ubuntu18 04上未用的旧包4 升级 鸿蒙开发要使用Ubuntu 20 04 及以上编译源码 xff0c 故将原来学习ROS 的Ubuntu18 04升级为20 04 1 更换源 好久没用这系统了
  • Ubuntu 20.04 update 报错 Problem executing scripts APT::Update

    报错内容 xff1a appstreamcli error span class token keyword while span loading shared libraries libxapian so 22 cannot span c
  • 解决Ubuntu20.04 开机黑屏光标闪烁进不去系统

    问题描述 xff1a 我是双系统 xff0c 原Ubuntu系统是18 04的 xff0c 使用命令行升级到20 04 xff0c 我搞到晚上2 xff1a 00 xff0c tnnd学校插座断电了 xff0c 大部分是升级好了 xff0c
  • 百度发布深度学习可视化平台 Visual DL

    恩威AI 科技评论消息 xff0c 1 月 16 日 xff0c 百度 ECharts 团队发布旗下知名开源产品 ECharts 的最新 4 0 版本 xff0c 并宣布品牌升级为 百度数据可视化实验室 xff08 http vis bai
  • VS Code SSH远程连接Ubuntu

    1 ubuntu设置 安装SSH服务并获取远程访问的IP地址 在Ubuntu系统中 xff0c Ctrl 43 Alt 43 T 打开终端工具 xff0c 执行如下命令安装SSH服务 说明 xff1a 如果执行该命令失败 xff0c 提示o
  • Ubuntu 20.04 根目录磁盘扩容(很快 很简单)

    1 下载安装GParted span class token function sudo span span class token function apt get span span class token function insta
  • Ubuntu创建pycharm快捷启动方式

    普通启动方式 xff1a 下载pycharm压缩包解压进入pycharm的bin目录下终端运行 sh pycharm sh 创建快捷启动方式 xff1a 终端输入 span class token function sudo span ge
  • Neptune w800初学 Ubuntu下程序编译与烧写

    一 hb学习1 1一些基本概念1 2构建流程1 3目录说明1 4使用说明 二 Neptune w800开发版实操2 1 准备工作2 1 1 示例工程下载2 1 2 编译1 编译工具链配置2 WiFIOT环境配置3 安装编译工具hb4 编译
  • Python安装 scons、pycryptodome等各种库很慢、安装失败

    本文方法适用于 绝大部分 python扩展库的安装 xff0c win Linux逗适用 原来 xff1a pip3 span class token function install span scons 报错 修改 xff1a pip3
  • Ubuntu 20.04 下VSCode编译并烧录openHarmony源码(Neptune w800开发版)

    昨天写过一篇文章 xff0c 是在命令行编译 xff0c 使用命令行串口工具minicom烧录的 有点小麻烦 推荐大家先试用上述方法试一试 xff0c 里面要安装的依赖也在文章里面 文章链接 鸿蒙Dev Device Tool本身就是VSC
  • Neptune w800点灯(中断)工程详解

    目录 一 鸿蒙项目简介1 1 项目构建1 1 1 什么是 Ninja xff1f 1 1 2 什么是gn 1 2 项目结构1 3 启动流程 二 点灯工程详解2 1 实现代码2 2 相关配置2 2 1 项目目录下BUILD gn2 2 2 a
  • Ubuntu(Linux)上安装微信(windows应用)

    本教程适用于大部分windows应用在ubuntu上安装 xff0c 很多软件还是不支持的 xff0c 比如游戏什么的 xff0c 我暂时没有尝试 目录 1 wine简介2 安装wine3 安装问题解决4 安装微信 1 wine简介 Win
  • Keil代码一键对齐工具

    1 下载AStyle工具2 Keil中配置3 效果展示4 扩展参数4 1 只格式化当前文件4 2 格式化整个工程4 3 参数说明 1 下载AStyle工具 下载链接 下载后将其放在合适的位置 xff0c 不用安装 我放在了keil安装目录下
  • 鸿蒙设备开发——Neptune w800 网络编程——按键控制WIFI连接状态

    目录 1 梗概与基础知识2 主要依赖3 主要函数解析3 1变参宏 日志打印3 2 PrintLinkedInfo 打印连到的接AP信息3 3 SecurityTypeName 返回AP加密方式 xff08 安全类型 xff09 3 4 Fo
  • 【前端】大数据时代的图表可视化利器——Highcharts,D3和百度的Echarts

    当你开始嫌弃Excel过于简单 xff0c 当你面对python和R的可视化工具包望而却步 xff0c 那么恭喜你 xff0c Echarts或Highcharts这两种基于浏览器渲染技术的纯JS框架 xff0c 就是你的不二选择 当然 x
  • I2C通信原理

    1 概述2 I2C总线的数据传送2 1 数据位的有效性规定2 2起始和终止信号2 3 数据传送格式2 3 1字节传送与应答2 3 2总线的寻址2 3 3数据帧格式 3 传输速率 1 概述 读法 xff1a 常用 xff1a I方C 标准 x