【总线】I2C 通信协议

2023-11-03

目录

I2C 总线协议概述

参数总结

I2C 的工作原理

寻址

读/写位

数据帧

I2C数据传输的步骤

具有多个从机的单个主机

具有多个从机的多个主机

I2C的优缺点

优点

缺点

文章参考


I2C 总线协议概述

I2C 总线广泛应用在 OLED 显示器、气压传感器或陀螺仪/加速度计模块的项目。

I2C结合了SPI和UART的最佳功能。使用I2C,可以将多个从机连接到单个主机(如SPI),并且可以让多个主机控制单个或多个从机。当希望有多个微控制器将数据记录到单个存储卡或将文本显示到单个LCD时,这非常有用。

与UART通信一样,I2C仅使用两根线在设备之间传输数据:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

SDA(串行数据):主机和从机发送和接收数据的线路。

SCL(串行时钟):传输时钟信号的线路。

I2C是一种串行通信协议,因此数据沿着单线(SDA线)逐位传输。

与SPI一样,I2C是同步的,因此位的输出通过主机和从机之间共享的时钟信号与位采样同步。时钟信号始终由主站控制。

参数总结

所需的线数

2

最大的速率

标准模式:100kbps

快速模式:400kbps

高速模式:3.4Mbps

极速模式:5Mbps

同步或异步

同步

串行或并行

串行

主机的最大个数

没有限制

从机的最大个数

1008

I2C 的工作原理

使用I2C,数据在消息中传输。 消息被分解为数据帧。每条消息都有一个地址帧,其中包含从机的二进制地址,以及一个或多个包含正在传输的数据的数据帧。该消息还包括每个数据帧之间的开始和停止条件、读/写位和 ACK/NACK 位:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

启动条件:SCL线路从高电平切换到低电平之前,SDA线路从高电平切换到低电平。

停止条件:SCL线路从低电平切换到高电平后,SDA线路从低电平切换到高电平。

地址帧:每个从机唯一的 7 位或 10 位序列,当主机想要与其通信时,该序列标识从机。

读/写位: 指定主机是向从机(低电平)发送数据还是从中请求数据(高电平)的单个位。

ACK/NACK 位:消息中的每个帧后跟一个确认/不确认位。如果成功接收地址帧或数据帧,则从接收方向发送方返回 ACK 位。

寻址

I2C没有像SPI那样的从属选择线,因此它需要另一种方式让从机知道数据正在发送给它,而不是另一个从机站。它通过寻址来做到这一点。地址帧始终是新消息中起始位之后的第一个帧。

主机将它想要与之通信的从机的地址发送给连接到它的每个从机。然后,每个从机将从主机发送的地址与其自己的地址进行比较。如果地址匹配,则将低电平ACK位发送回主机。如果地址不匹配,则从机不执行任何操作,并且 SDA 线路保持高电平。

读/写位

地址帧在末尾包含一个位,通知从机是要向其写入数据还是从中读出数据。如果主机要向从机写数据,读/写位为低电平。如果主站从从站读数据,则该位为高电平。

数据帧

在主机检测到来自从机的ACK位后,第一个数据帧就可以发送了。

数据帧的长度始终为 8 位,并且首先发送最高有效位。每个数据帧后紧跟一个 ACK/NACK 位,以验证是否已成功接收该帧。在发送下一个数据帧之前,ACK位必须由主机或从机接收(取决于发送数据的人)。

发送完所有数据帧后,主机可以向从机发送停止条件以停止传输。停止条件是 SCL 线路上的电平从低到高的电压转换之后,在 SDA 线路上的电平从低到高的转换,而SCL 线路保持高电平。

I2C数据传输的步骤

1. 主机将启动条件从高电平切换至低电平,将SDA线路从高电平切换至低电平,将启动条件发送到每个连接的从机:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

2. 主机向每个从机发送它想要与之通信的从机的7位或10位地址,以及读/写位:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

3. 每个从机将主机发送的地址与自己的地址进行比较。如果地址匹配,则从机通过将SDA线拉低一位来返回ACK位。如果来自主机的地址与从机自己的地址不匹配,则从机将 SDA 线路保持不变维持在高电平。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

4. 主机发送或接收数据帧:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

5. 传输完每个数据帧后,接收方向发送方返回另一个ACK位,以确认成功接收帧:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

6.为了停止数据传输,主机通过在将SDA切换为高电平之前将SCL切换为高电平向从站发送停止条件:

具有多个从机的单个主机

由于I2C使用寻址,因此可以从单个主机控制多个从机。对于 7 位地址,可以使用 128 (2^7) 个唯一地址。使用 10 位地址的情况不常见,但提供 1,024 (2^10) 个唯一地址。要将多个从站连接到单个主站,要像图中这样连接它们,使用4.7KΩ上拉电阻器将SDA和SCL线路连接到Vcc:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

具有多个从机的多个主机

多个主站可以连接到单个从机或多个从机。当两个主机尝试通过SDA线路同时发送或接收数据时,同一系统中多个主机的问题就出现了。为了解决这个问题,每个主机都需要在传输消息之前检测SDA线是低还是高。如果 SDA 线路较低,则意味着另一个主机控制总线,主机应等待发送消息。如果 SDA 线路较高,则传输消息是安全的。要将多个主机连接到多个从机,要像图中这样连接它们,使用4.7KΩ上拉电阻器将SDA和SCL线路连接到Vcc:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

I2C的优缺点

优点

  • 仅使用两根电线
  • 支持多个主机和多个从机
  • ACK/NACK 位确认每帧都已成功传输
  • 硬件比 UART 更简单
  • 众所周知且广泛使用的协议

缺点

  • 数据传输速率比 SPI 慢
  • 数据帧的大小限制为8位
  • 需要实现比SPI更复杂的硬件

文章参考

Basics of the I2C Communication Protocol (circuitbasics.com)

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

【总线】I2C 通信协议 的相关文章

  • 唐先杰遇上区块链:要加薪,也要改变世界

    区块链能带来什么 对于唐先杰来说 是 加薪 的现实收益 也是 改变世界 的精神满足 唐先杰是旺链科技的区块链系统架构师 拥有10余年技术经验 接触到区块链以及FISCO BCOS开源社区之后 在社区伙伴的帮助下 他成功完成了对公司产品的升级

随机推荐

  • js中把数字转换成汉字输出

    前言 在js中把数字转换成汉字输出的方法 直接可以拿来用 方法一 支持7位 也就是最大1234567 案例 this toChinesNum 10101010 得到 一千零一十万一千零一十 数字转成汉字 params num 要转换的数字
  • el-tree的使用与样式修改大全

    el tree的使用与样式修改大全 一 样式篇 1 修改节点选中后的背景样式 el tree node focus gt el tree node content background color 5daaf0 背景色 2 节点hover后
  • 开源大数据平台 集群搭建及使用

    1 Hadoop集群搭建及使用 1 集群规划 2 虚拟机准备 1 创建虚拟机 具体步骤不再展示 2 配置网络 ping外网 ping baidu com 如果ping不通 修改如下文件 vi etc sysconfig network sc
  • Flutter Icons内置图标库MaterialIcons大全

    Flutter 中的图标组件 Icon 专门用于显示图标 如 Icon Icons check rounded color Colors white size 18 图集预览
  • 报错解决方案1

    遇到报错 TypeError conv2d received an invalid combination of arguments got numpy ndarray Parameter Parameter tuple tuple tup
  • catkin build 的使用

    1 catkin build vs catkin make 初学的时候一般我们用catkin make 但是相较于catkin build而言 并没有那么好使 对比如下 catkin make 同时编译工作空间下的所有包 速度慢 不灵活 c
  • C++(11):生成随机字符串

    C 11 产生随机数 c 11 随机数 风静如云的博客 CSDN博客 介绍了如何生成随机数 可以基于随机数生成随机字符串 include
  • 华为OD机试 - 字符串划分(Java)

    题目描述 给定一个小写字母组成的字符串 s 请找出字符串中两个不同位置的字符作为分割点 使得字符串分成三个连续子串且子串权重相等 注意子串不包含分割点 若能找到满足条件的两个分割点 请输出这两个分割点在字符串中的位置下标 若不能找到满足条件
  • HTML中的table表格

    表格标签 分为行 tr 和列 td 行及列都可以进行合并操作 table 定义表格 tr 定义行 td 定义列 先有行 后有列 th 多用于表头 定义表格中头部 加粗 border 边框大小 bordercolor 边框的颜色 cellpa
  • Spring的两种动态代理:Jdk和Cglib 的区别和实现

    一 原理区别 java动态代理是利用反射机制生成一个实现代理接口的匿名类 在调用具体方法前调用InvokeHandler来处理 而cglib动态代理是利用asm开源包 对代理对象类的class文件加载进来 通过修改其字节码生成子类来处理 1
  • 重构——重构原则

    何谓重构 目的在于不改变软件可观察行为的前提下 提高其可理解性 降低其修改成本 重构可能会在软件内部做修改 但是对软件的外部行为造成很小改变 或者不造成改变 与之相比的是性能优化 为何重构 程序的设计会逐渐腐败 当人们只为了短期目的 或者未
  • 实用工具系列 - Pycharm插件推荐

    博客主页 Passerby Wang的博客 CSDN博客 系统运维 云计算 Linux基础领域博主 所属专栏 实用工具系列 上期文章 实用工具系列 Pycharm安装下载使用 如觉得博主文章写的不错或对你有所帮助的话 还望大家多多支持呀 关
  • 云计算虚拟化:k8s二进制Master主备集群部署

    一 前言 无论从成本还是效率上考虑 k8s都极占优势 基本代表了未来趋势 官网推荐kubeadm配置 虽然方便 但掩盖了许多细节问题 k8s虽然咋看仅仅是个容器编排工具 但涉及的相关知识面非常广泛 如果说大数据的相关知识你需要花N天 K8S
  • do{...} while(0) 用意

    linux内核和其他一些开源的代码中 经常会遇到这样的代码 do while 0 这样的代码一看就不是一个循环 do while表面上在这里一点意义都没有 那么为什么要这么用呢 实际上 do while 0 的作用远大于美化你的代码 查了些
  • 人工智能革命:从ANI到AGI的道路

    从ANI到AGI的道路为什么这么难 没有什么比学习创造一台像人类一样聪明的电脑这种难以置信的创造更能让人欣赏人类的智慧了 建造摩天大楼 将人类置于太空中 弄清楚大爆炸如何发生的细节 这些都比了解我们自己的大脑或如何制造像它一样酷的东西要容易
  • docker harbor的安装使用以及镜像上传和拉取

    目录 harbor harbor安装 harbor上传和拉取镜像 上传 1 登录Harbor 2 打标签 3 上传镜像 拉取 1 登录Harbor 2 拉取镜像 harbor harbor是一个开源的容器镜像仓库 可用于存储和分发docke
  • 电脑怎么加快网页打开速度?加快网速。

    电脑怎么加快网页打开速度 加快网速 更换合适的dns可以直接加快网页打开速度 1 使用软件更换dns 下载地址 2 手动输入dns 1 win R键 输入 ncpa cpl 2 依次点击连接的网络 属性 Internet协议版本 TCP I
  • 【每日一题】排序子序列(贪心)

    题目来源 牛客网 链接 排序子序列 题目描述 牛牛定义排序子序列为一个数组中一段连续的子序列 并且这段子序列是非递增或者非递减排序的 牛牛有一个长度为n的整数数组A 他现在有一个任务是把数组A分为若干段排序子序列 牛牛想知道他最少可以把这个
  • PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.3 用天平找小球

    import java util Scanner public class Main public static void main String args Scanner sc new Scanner System in
  • 【总线】I2C 通信协议

    目录 I2C 总线协议概述 参数总结 I2C 的工作原理 寻址 读 写位 数据帧 I2C数据传输的步骤 具有多个从机的单个主机 具有多个从机的多个主机 I2C的优缺点 优点 缺点 文章参考 I2C 总线协议概述 I2C 总线广泛应用在 OL