I2C总结(单主机和多主机)

2023-10-27

I2C在使用过程中单个主机是不论是硬件I2C还是硬件I2C都不太难,理解好时序很容易实现。还有就是很多人认为硬件I2C有很多缺点,其实这是谬论吧,硬件I2C在稳定性上胜过软件I2C,而且不占用MCU时间,可以实现I2C中断。如果系统有硬件I2C,那一定选用硬件I2C。多主机I2C有点复杂,需要注意的就是时钟同步和总线仲裁。

一、I2C总结

主机发送数据到从机的状态下:主机控制SCL信号线和SDA信号线,从机只是在SCL线为高的时候去被动读取SDA线。
主机读取从机的数据的状态下:主机来发出时钟信号,从机只是保证在时钟信号为高电平的时候的SDA的状态而已。
SDA和SCL已经通过上拉电阻被上拉,master可以控制(拉低或者释放)这两条线,而slaver只能控制SDA线。当master发送数据时,master会适时地将SDA和SCL拉低或释放(拉高)。确切的时序应该是这样的:
当mater要发送一个start时,mater会将SDA拉低,这就可以了,因为此时的SCL一定是High。好了,一个start就这样发出去了。而slaver也会发现这个start信号的发生,slaver便会准备好接收接下来的数据了。紧接着,master要发送一个Byte的数据了,一位一位的发出这8个bits。这时master会先将SCL拉低,然后在SCL为低的状态下将一个bit准备好放到SDA上(比如要发送一个 0,master就会通过拉低SDA来放好这个0),然后master会把SCL拉高(释放),此时slaver会立刻检测到SCL的变化,由此聪明的slaver便知道master已经将要发送的那个bit准备好了,slaver便会在这个SCL的高电平期间尽快(maser不会等你很久的哦)去读取一下SDA,嗯读到了一个0,slaver就把这个0放到自己的移位寄存器中待后续处理。master会在一个设定好的时间后把SCL再次拉低,然后在SCL为低电平期间把下一个bit放到SDA上,然后再把SCL拉高,然后slaver在SCL的高电平期间再去读SDA。。。。。如此反复8次,一个Byte的传输便告结束。当这8个bit发完后,SCL是处于低电平的(被master拉低的),SDA是出于高电平的(master已经释放了SDA)。
当一个字节发送完毕后,master会释放SDA(拉高)并拉低SCL,此时slaver如果打算发出一个ACK的话,它必须在这个SCL被master拉低的短暂时间内去主动将SDA拉低并保持住 (此前我们说过,SDA此时已经被master释放,所以slaver才有机会去拉低这个SDA)。master会在一个确定的时间后再次将SCL拉高,并在拉高的期间去读取SDA线的状态,如果读到低电平,则认为收到了来自slaver的响应(ACK),否则认为slaver没有响应(NACK)刚才发送的那一个Byte。这个过程就是我们说的i2c通讯中的第9个时钟周期。当master读完这个ACK / NACK 后,会再次将SCL拉低,用以通知slaver:第9个时钟周期已经结束,你现在可以释放SDA了。而此时master也可以向SDA上准备下一个Byte的第一个bit。继而重复上述过程。。。。。或者,master也许想在接下来发送一个stop过去,那么master会在这个SCL为低的时间内将SDA拉低,而后再将SCL拉高,在SCL为高的期间再将SDA释放 (拉高) 。这样,一个STOP位就产生了。你会发现此后的SDA和SCL都是高,这就是是所谓的总线空闲了!
一句话:SCL是单向的,由master控制。而SDA是双向的,master可以控制,slaver也可以控制。
阅读上述过程时,始终牢记:SDA上的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化。(开始信号和结束信号例外)!

另外,需要注意的是,并非每传输8位数据之后,都会有ACK信号,有以下3种例外:
(1)当从机不能响应从机地址时(例如它正忙于其他事而无法相应I2C总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有被拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
(2)如果从机接收器在传输过程中不能接收更多的数据时,它也不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者发出一个S信号开始新的传输。
(3)主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。

二、I2C 总线的时钟同步与总线仲裁

I2C 总线的 SCL 同步时钟脉冲一般都是由主控器发出作为串行数据的移位脉冲。 每当 SDA 上出现一位稳定的数据后, 在 SCL 上发送一个高电平的移位脉冲。
1. SCL 信号的同步
时钟同步是通过 I2C 接口中 SCL 线的线与实现的。啥意思呢?
如果被控器希望主控器降低传送速度可以通过将 SCL 主动拉低延长其低电平时间的方法来通知主控器,当主控器在准备下一次传送发现 SCL 的电平被拉低时就进行等待, 直至被控器完成操作并释放 SCL 线的控制控制权。 这样以来, 主控器实际上受到被控器的时钟同步控制。 可见 SCL 线上的低电平是由时钟
低电平最长的器件决定; 高电平的时间由高电平时间最短的器件决定。 这就是时钟同步, 它解决了 I2C总线的速度同步。
在这里插入图片描述

2. I2C 总线上的总线仲裁
如果在同一个 I2C 总线系统中存有两个主控器, 其时钟信号分别为 SCK1、 SCK2, 它们都具有控制总线的能力。 假设两者都开始要控制总线进行通信, 由于“线与”的作用,在总线做出仲裁之前, 两个主控器都会以“线与”的形式共同参与 SCL 线的使用, 速度快的主控器 1 等待落后的主控器 2 。
对于 SDA 线上的信号的使用, 两个主控器同样也是按照“线与”的逻辑来影响 SDA 上的电平变化。 假设主控器 1 要发送的数据 DATA1 为“101 ……”; 主控器 2 要发送的数据 DATA2 为“1001 ……”。 总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测, 只要检测的电平与自己发出的电平一致, 他们就会继续占用总线。 在这种情况下总线还是得不到仲裁。 当主控器 1 发送第 3 位数据“1”时( 主控器 2 发送“0”) , 由于“线与”的结果 SDA 上的电平为“0”, 这样当主控器 1 检测自己的输出电平
时, 就会测到一个与自身不相符的“0”电平。 这时主控器 1 只好放弃对总的控制权; 因此主控器 2 就成为总线的唯一主宰者。

①对于整个仲裁过程主控器 1 和主控器 2 都不会丢失数据;
②各个主控器没有对总线实施控制的优先级别;
③总线控制随即而定, 他们遵循“低电平优先”的原则, 即谁先发送低电平谁就会掌握对总线的控制权。
根据上面的描述, “时钟同步”与“总线仲裁”可以总结如下规律:
①主控器通过检测 SCL 上的电平来调节与从器件的速度同步问题——时钟同步;
②主控器通过检测 SDA 上自身发送的电平来判断是否发生总线“冲突”——总线仲裁。
因此, I2C 总线的“时钟同步”与“总线仲裁”是靠器件自身接口的特殊结构得以实现的。

在这里插入图片描述

对于连续访问的数据数量是由主控器来控制的, 具体地说是通过向外围器件发送“非应答信号”来结束这个数据的操作。 对于数据块的“读、 写操作”要注意两点:
( 1) 在读操作中要发送两次命令字: 第一个是带有外围器件地址的“写”命令(R/W=0) , 作用是将后续发出的内部地址写入到外围器件中的“地址计数器”中, 第二个是发送带有外围器件的“读”命令( R/W=1),
开始真正的“读操作”。 两个命令字之间是一个“启动信号 S”来分割的;
( 2) 在写操作中, 某些外围器件( 如 EEPROM) 其连续写入的数据是受到限制的, 如 24C02 每次连续写入的数据不能超过 8 个字节( 这与其内部输入缓冲器的数量有关)。

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

I2C总结(单主机和多主机) 的相关文章

  • DNS 解析顺序是怎样的?

    1 DNS 解析过程 当客户端对域名发起访问时 会将解析请求发送给递归解析服务器 递归服务器会代替客户端进行全球递归查询 首先递归服务器会请求根域名服务器 根域名服务器根据域名后缀 告知对应的顶级域名服务器 递归服务器再向顶级服务器发起请求
  • Raspberry Pi 与Arduino SPI通信

    本教程介绍了使用SPI 串行外围设备接口总线 进行Raspberry Pi与Arduino通讯和控制的基本框架 SPI代表了一种非常完善的芯片间通信方法 该方法在两种设备的硬件中均实现 在这里 我们将详细探讨SPI 讨论硬件和软件注意事项
  • 随机过程第二章part2

    3有限维分布函数 4随机变量特征函数 5有限维特征函数 5 1定义 设随机过程 X X X 其有限维特征函数为对于 t 1
  • 5G 的三大应用场景——ITU-R原文

    每次写 5G 的材料时都会提及 5G 的三大应用场景 虽然这是一个众人皆知的常识 但是如果不引用一下的话有些不严谨 苦于一直没找到 ITU 的原文 之前引用的都是移动通信教材那本书 今天狠下心来花时间找了原文 功夫不负有心人 可算给我找到了
  • 基于D-S证据理论的数据融合研究与应用

    1 课题背景及研究的目的和意义 1 1课题背景 证据理论源于20世纪60年代美国哈弗大学的数学家A P Dempster 利用上 下概率来解决多值映射问题方面的研究工作 后来他的学生G Shafer对证据理论引入了信任函数和似然函数的概念
  • QT UDP简单的通信示例

    UDP user datagram protocol 即用户数据协议 是一个轻量级的 不可靠的 面向数据报的无连接协议 在qt中提供了QUdpSocket类来进行UDP数据报的发送和接收 在Pro中加入network模块 因为upd是无连接
  • 基于证据理论的多源数据融合仿真实验matlab代码

    matlab源码链接见文章末尾 基于D S证据理论的数据融合方法的基本思想 D S证据理论是一种不确定性推理方法 所处理的数据信息大多是具有不确定性的 该方法能够摆脱对先验概率的依赖 把难以下手分析和处理的完整问题分解成很多易于处理的子问题
  • android中跨进程通讯的4种方式

    android中跨进程通讯的4种方式 转自 http www androidsdn com article show 137 由于android系统中应用程序之间不能共享内存 因此 在不同应用程序之间交互数据 跨进程通讯 就稍微麻烦一些 在
  • Qt实现Http通信

    Qt学习需要http传值 研究了好几天终于可以了这里只是一个最简单的通信 我的Qt是5 7 1 在Pro内添加 QT network widget h中的源码 ifndef WIDGET H define WIDGET H include
  • MCP2515独立控制器

    1 简介 MCP2515 是一款独立控制器局域网络 Controller Area Network CAN 协议控制器 完全支持 CAN V2 0B 技术规范 该器件能发送和接收标准和扩展数据帧以及远程帧 MCP2515 自带的两个验收屏蔽
  • RS485通信(Modbus)丢包解决经验(基于ARM/Linux和STM32平台)

    1 RS485通信属于半双工通信 即发送和接收不能同时进行 需要切换 一般定义一根GPIO做RTS切换 2 ARM Linux平台有Linux底层驱动做自动切换 比如应用程序发送完成后 一般会在底层驱动自动切换接收 3 但是STM32平台基
  • 优化理论

    版权声明 原创作品 整理不易 转载请标明出处 本篇推送更详细的内容介绍 可参见本人微信公众号 优化与博弈的数学原理 公众号二维码参见文末 或参见以下网址 优化理论 Time Sharing Condition 编者按 OFDM系统中的功率分
  • 拥塞控制域流量控制

    流量控制 也就是管理两端的流量 以免任一方向上因发送过块导致接收端溢出 或者因接收端处理太快而浪费时间的状态 具体包括 1 发送端的进程产生数据很慢 时不时的来个1字节数据 那么TCP就会1字节1字节的发送 效率很低 解决办法是建立一个时基
  • IM即时通讯实现原理

    即时通讯 Instant Messenger 简称IM 软件多是基于TCP IP和UDP进行通讯的 TCP IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议 前 者是以数据流的形式 将传输数据经分割 打包后 通过两台机器之间建立起
  • Linux进程通信:命名管道FIFO小结

    Linux下进程之间通信可以用命名管道FIFO完成 命名管道是一种特殊类型的文件 因为Linux中所有事物都是文件 它在文件系统中以文件名的形式存在 在程序中 我们可以使用两个不同的函数调用来建立管道 include
  • QTcpSocket 发送数据心得

    遇到不会用的函数前 最好还是看看手册QAQ 今天居然吃了这个大亏 先交代一下背景 在做TCP客户端的发送数据功能 要和服务器程序进行TCP IP通信 且根据通信协议要发送数组或者结构体 并且数组的每一个位都是有效数据位 因此不能像大多数人一
  • Nakagami-m 信道

    Nakagami m 分布是日本学者Nakagami 在1960年的一篇论文中提出的快衰落模型 Nakagami m 的表达式 我们遵照参考文献 1 的说法1 假设接收信号表示如下 r n g
  • TIME_WAIT机理

    注 本文系转载 尊重原作者原文链接 TIME WAIT状态原理 通信双方建立TCP连接后 主动关闭连接的一方就会进入TIME WAIT状态 客户端主动关闭连接时 会发送最后一个ack后 然后会进入TIME WAIT状态 再停留2个MSL时间
  • [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览

    目录 前言 第1章 什么是信息与通信 第2章 为啥要编制信息与通信发展规划 第3章 信息与通信如何高质量发展 重点 3 0 发展目标 编辑 3 1 建设新型数字基础设施 3 1 1 移动通信网 无线接入层 1G到5G 3 1 2 固定宽带网
  • 图片详解TCP连接的三次握手,四次断开基本原理

    图片详解TCP连接的三次握手 四次断开 作者 林子 Blog http blog csdn net u013011841 时间 2014年8月 出处 http blog csdn net u013011841 article details

随机推荐

  • 使用shell脚本执行oracle sql语句示例

    脚本内容如下 bin bash sqlplus emuser emuser ctmdb lt lt EOF update GENERALAUTHORIZATIONS set isaccountlocked 0 where username
  • mybatis 大于小于号 <和>

    Mybatis中的sql语句中的 lt 和 gt 号要用转义字符 lt 和 gt 否则会报错 SELECT count id FROM housing record where adiut state lt 3 and admin id i
  • python中安装pyinstaller库的方法

    最近 在学习python过程中运用到了一个python的第三方库pyinstaller 是一个可以把程序打包为一个可执行文件 用户可以直接运行 一 pyinstaller库的安装 1 pip包安装 因为在配置python环境中自带了一个下载
  • Vuepress 文档脚手架(vue 3.x+vuepress2.x+vite+ts)

    在项目扩展到一定程度 我们会对项目中大量的公共业务做封装 当多人开发时就带来一个问题 如何让所有人快速使用封装好的组件 降低学习成本 这里提供一个解决方案 那就是Vuepress框架 最新的 Vuepress2 x 框架已经蓄势待发 支持V
  • 请用ST语言写一个6轴搬运机器人的底层程序

    ST语言是指Structured Text语言 它是一种PLC 可编程控制器 编程语言 用于编写工业自动化控制程序 以下是一份可以用于编写6轴搬运机器人的底层程序的示例 PROGRAM main VAR posX posY posZ REA
  • 【蓝牙串口通讯基础知识

    蓝牙串口通讯基础知识 一 串口 串行接口简称为串口 也叫串行通信接口 一般也叫COM口 这是一个统称 采用串行通信的接口都叫作串口 串口是一个硬件接口 UART是UniversalAsynchronous Receiver Transmit
  • layui子页面中退出登录使父页面跳转到登录页面

    在layui的iframe模板中 因为页面都是通过iframe方式引入的 所以在子 iframe 页面中使用location href user login html 后 跳转的页面依然显示在内联框架中 而不是父页面跳转 parent lo
  • 无人驾驶系统Autoware与仿真环境LGSVL Simulator联合配置

    在此 把在Ubuntu 16 04中 搭建无人驾驶系统Autoware编译环境 配置无人驾驶仿真环境LGSVL Simulator 并进行联合测试的步骤 记录下来 以备查阅 系统配置 我所用的配置 需要两个系统 一个Ubuntu系统 一个W
  • 服务器如何安装虚拟机,服务器如何安装虚拟机

    服务器如何安装虚拟机 内容精选 换一换 确认虚拟机使用的网卡安全组配置是否正确 在弹性云服务器详情页面查看网卡使用的安全组 查看安全组是否已放行100 125 0 0 16网段的地址 如果没有放行 请添加100 125 0 0 16网段的入
  • java/lang/NoClassDefFoundError: java/lang/Object

    一 问题描述 本地原来已经安装了JAVA JDK1 7并配置好了环境变量 然后又安装了JDK1 8 想2个版本并存 然后发现eclipse 打不开 闪退 在命令行执行以下语句 C Users Administrator gt java ve
  • ECU-TEST 快速入门

    ECU TEST 是由位于德国德累斯顿的TraceTronic公司开发的一款用于嵌入式系统测试验证软件工具 自从2003年首次发布ECU TEST 该软件成为了汽车ECU开发的标准工具 同时也逐步成为了重型机械和工业自动化开发的标准工具 该
  • 数学建模竞赛培训:华为杯、高教社杯和数学建模国赛全面指南

    文章目录 赛事介绍 参赛好处 辅导比赛 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛 该竞赛旨在通过实际问题的建模和解决 培养研究生的创新能力和团队合作精神 推动科技创新和应用 华为杯竞赛分为初赛
  • git commit报did not match any file known to git

    使用到以下命令时 git commit m project initialized 回车之后报错了 报了以下的错误 error pathspec initialized did not match any file s known to g
  • hive截取字符串substr和substring的用法

    第一种用法 substr string A int start 和 substring string A int start 用法一样 功效 返回字符串A从下标start位置到结尾的字符串 第二种用法 substr string A int
  • “最强”博士论文答辩阵容:6位院士,副院长任答辩秘书!

    点击 凹凸域 马上关注 更多内容 请置顶或星标 十二月份前后 是不少研究生毕业答辩的时间段 在社交媒体上 关于论文答辩的热度也逐渐上升 与此同时 也有网友注意到一些答辩委员会的阵容非常强大 比如 就有微博用户表示 其导师请了足以给博士生论文
  • layui table的实现以及详细解释

    老规矩先看效果 这里用的主要是layui 的弹框和table数据表格 第一 引入的文件 百度网盘地址 https pan baidu com s 1neZbcX8IieMgiBdcVPhO1g 提取码 rqdc 改成本地路径 这里也可以用l
  • 从 Vision 到 Language 再到 Action,万字漫谈三年跨域信息融合研究

    本文作者为阿德莱德大学助理教授吴琦 他在为雷锋网 AI 科技评论投递的独家稿件中回顾了他从跨领域图像识别到 Vision to Language 相关的研究思路 如今正将研究领域延伸到与 Action 相关的工作 雷锋网 AI 科技评论对文
  • 6.63 猜数字之生成随机数

    1 生成 m n 的随机数 m n 的元素个数为 n m 1 若利用模进行 n m 1 运算 其结果为 0 n m 此时左右两边同加 m 其结果为 m n void TestRand 生成 m n 的随机数 rand n m 1 m sra
  • Django图书商城系统实战开发 - 实现个人中心管理

    Django图书商城系统实战开发 实现个人中心管理 介绍 在本项目中 我们已经实现了登录注册 商品详情查看 购物车购买 个人订单管理 评价功能 接下来 我们将完成个人中心管理的模块 包括个人密码修改 个人地址管理和注销功能 本文将详细介绍如
  • I2C总结(单主机和多主机)

    I2C在使用过程中单个主机是不论是硬件I2C还是硬件I2C都不太难 理解好时序很容易实现 还有就是很多人认为硬件I2C有很多缺点 其实这是谬论吧 硬件I2C在稳定性上胜过软件I2C 而且不占用MCU时间 可以实现I2C中断 如果系统有硬件I