0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你眼中简单的IIC,其实并不简单

电子工程师 来源:网易号 作者:创易栈 2021-04-03 11:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

01我们习以为常的IIC通常是什么样子?

在我们研发/应用工程师眼中,IIC的形象通常是如图这样的吧?(你们说是不是?)

JjEnei.png

nuEZZr.png

EJzmYz.png

是的,对于理想的硬件调程序,这个层面已经基本够用。(我是已经get到了)

02IIC还可以是这样的

Mn2m22.png

简单实用的IIC电平匹配电路,原理很简单、也很巧妙。

v2Qn2a.jpeg

Si8400芯片,做UART或者IIC隔离是很不错的。做隔离也有实际意义的:

比如涉及强电的板子,需要隔离后的UART口打印调试信息,方便debug;电容触摸按键调试中,某些产品采用隔离的IIC接口(如Azoteq,Cypress等芯片大部分采用IIC)调试能得到更准确的数据(原理上涉及到人体大地等构成的寄生电容,挺有意思,可以看创易栈的触摸按键相关内容)。

有朋友会问,我见过5V芯片和3V芯片,直接把IIC接在一起的,不需要做电压匹配呀?

这个不建议用。需要仔细看数据手册的:一般来说3V芯片的I/O都有如图的保护结构,导致SCL、SDA信号高电平被限制在3V+0.3V,5V芯片经常不能正确识别的。

EJZfem.png

03支持双电压的高速IIC接口

7zq6ra.jpeg

TI的TXS0102带OE功能的高速IIC接口芯片。

这个有什么好处呢?

当然有,除了支持电平匹配;从它的MOS结构也可以看出,对SCL和SDA的上升边缘有个加速过程,速度可以支持到2Mbps喔。

04触碰IIC的核心

每一个IIC总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管、输入缓冲为一只高输入阻抗的同相器[1]。这种电路具有两个特点:

①由于SDA、SCL为漏极开路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑;

②引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致。为 “时钟拉伸”和“总线仲裁”提供硬件基础。

jURJje.jpeg

I2C总线接口内部结构

IIC设备对总线的操作仅有“把线路拉到地”——输出逻辑0。基于IIC总线的设计,线路上不可能出现电平冲突现象。如果一设备发送逻辑0,其他发送逻辑1,那么线路看到的只有逻辑0。也就是说,如果出现电平冲突,发送逻辑0的始终是“赢家”。总线的物理接法允许主设备往总线写数据的同事读取数据。这样两主设备争总线的时候“赢家”并不知道竞争的发生,只有“输家”发现了冲突——当写一个逻辑1,却读到了0——而退出竞争。

时钟拉伸(Clock stretching)

如果被控器希望主控器降低传送速度可以通过将SCL主动拉低延长其低电平时间的方法来通知主控器,当主控器在准备下一次传送发现SCL的电平被拉低时就进行等待,直至被控器完成操作并释放SCL线的控制控制权。这样以来,主控器实际上受到被控器的时钟同步控制。可见SCL线上的低电平是由时钟低电平最长的器件决定;高电平的时间由高电平时间最短的器件决定。这就是时钟拉伸,它解决了I2C总线的速度同步。

7b2AN3.jpeg

总线仲裁

假设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。当主控器1发送第3位数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此主控器2就成为总线的唯一主宰者。

总结

① 对于整个仲裁过程主控器1和主控器2都不会丢失数据;

② 各个主控器没有对总线实施控制的优先级别;

③总线控制随即而定,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。

根据上面的描述,“时钟拉伸”与“总线仲裁”可以总结如下规律:

①主控器通过检测SCL上的电平来调节与从器件的速度同步问题——时钟拉伸;

②主控器通过检测SDA上自身发送的电平来判断是否发生总线“冲突”——总线仲裁。因此,I2C总线的“时钟同步”与“总线仲裁”是靠器件自身接口的特殊结构得以实现的。
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 硬件
    +关注

    关注

    13

    文章

    3692

    浏览量

    69261
  • IIC
    IIC
    +关注

    关注

    11

    文章

    311

    浏览量

    40843
  • IIC接口
    +关注

    关注

    0

    文章

    23

    浏览量

    12101
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    保温杯气密性测试仪,操作原来这么简单-岳信仪器

    提到保温杯气密性测试仪,很多人的反应是“专业设备,肯定很难操作”,其实不然。不管是保温杯厂家的质检人员,还是新手小白,只要掌握简单几步,就能轻松上手,快速检测保温杯的密封性能,告别漏水、漏气的烦恼
    的头像 发表于 05-16 10:46 88次阅读
    保温杯气密性测试仪,操作原来这么<b class='flag-5'>简单</b>-岳信仪器

    简单高效的鸿蒙编译提速技巧

    在鸿蒙应用开发中编译构建是开发者最频繁的操作,每一次编译提速都能显著提升项目整体开发效率。本次分享几个简单却高效的鸿蒙编译提速技巧,从编译配置、构建方式等维度进行优化,让的开发流程更快捷高效。 1
    的头像 发表于 03-04 16:09 341次阅读
    <b class='flag-5'>简单</b>高效的鸿蒙编译提速技巧

    linux-arm开发环境的简单配置

    linux-arm开发环境简单配置 关于linux-arm开发环境简单配置是ARM学习的第一步,很多初学者会在这问题上纠结很久都不能配置好开发环境。推荐大家看一下韦东山视频,讲得很详细,代码基本上
    发表于 01-13 07:56

    合科泰教你如何焊接简单LED闪烁电路

    是否曾好奇那些闪烁的LED灯背后的原理?今天教你用5分钟焊接一个简单的LED闪烁电路,无需编程,只需一把电烙铁、几个简单元件和基础的焊接技能,就能打造属于自己的电子小玩具。 这不仅能获得好玩的电子玩具,还是理解电路工作原理的实
    的头像 发表于 01-07 17:28 1444次阅读
    合科泰教你如何焊接<b class='flag-5'>简单</b>LED闪烁电路

    RA MCU众测宝典 | IIC之【RA2E1】IIC通信的OLED显示

    “RAMCU众测宝典”IIC专题上线啦!这次,瑞萨嵌入式小百科将和大家一起聚焦【瑞萨RA2E1】开发板,一步步玩转IIC通信的OLED显示。从IIC协议的核心原理、FSP中I2CMaster的配置
    的头像 发表于 01-01 10:04 3941次阅读
    RA MCU众测宝典 | <b class='flag-5'>IIC</b>之【RA2E1】<b class='flag-5'>IIC</b>通信的OLED显示

    通信协议IIC与SPI最全对比分析

    10Mbps。IIC最高的速度也就快速+模式(1Mbps)和高速模式(3.4Mbps),后面的模式还需要额外的I/O缓冲区,还并不是总是容易实现的。 优雅性 IIC常被称更优雅于SPI。公正的说,笔者
    发表于 12-10 06:04

    汉威科技薄膜铂电阻温度传感器到底有多强

    测量温度简单吗?简单却也不简单,为了测得准,人类已经努力了上千年!薄膜铂电阻温度传感器到底有多强?为何是高端温度传感器的代表?
    的头像 发表于 11-28 11:51 1100次阅读

    【LoRa模组】无卡有人感应开关怎么做?

    在智慧楼宇、宿舍、公寓、办公楼等场景中,一个看似简单的需求越来越普遍: “不刷卡、不按键,只要有人,就自动亮灯/开门;没人就自动关闭、节能。” 实现这个“真正自动”的开关,背后其实并不简单。尤其在
    的头像 发表于 11-25 16:36 801次阅读
    【LoRa模组】无卡有人感应开关怎么做?

    看似简单的自动泊车需要哪些技术支撑?

    [首发于智驾最前沿微信公众号]要实现自动泊车,背后需要哪些技术作为支撑?自动泊车作为现在很多车主应用非常多的一项功能,看似只是简单的入库操作,但想要完美入库,其实需要非常多的技术支持。   感知
    的头像 发表于 10-30 09:09 936次阅读
    看似<b class='flag-5'>简单</b>的自动泊车需要哪些技术支撑?

    蜂鸟E203简单分支预测的改进

    是最简单的静态分支预测,其预测的命中率并不是很高,因此流水线常常需要因为冲刷而浪费很多周期,导致CPU的性能下降。因此,针对题目通过对E203微架构进行优化提升处理器性能的要求,我们想到了对其分支预测
    发表于 10-24 07:45

    使用瑞萨RUHMI工具实现AI模型部署过程

    AI无处不在。在部署AI,的竞争对手也在部署AI,几乎所有人都在做AI。然而,AI并不简单,不仅在生成有效模型上复杂,在部署上同样充满挑战。
    的头像 发表于 10-17 10:00 3084次阅读
    使用瑞萨RUHMI工具实现AI模型部署过程

    LM3881系列 3轨简单功率定序器技术手册

    LM3881 简单电源定序器提供了控制上电和电源的最简单方法 多个电源(开关或线性稳压器)的关闭。通过错开启动 序列,可以避免可能影响 系统的可靠性。
    的头像 发表于 08-19 13:49 1225次阅读
    LM3881系列 3轨<b class='flag-5'>简单</b>功率定序器技术手册

    莱姆传感器接线指南:简单易懂的步骤

    实用的接线技巧和注意事项,让轻松上手!什么是莱姆传感器?首先,简单介绍一下莱姆传感器。莱姆传感器(LimeSensor)是一种用于监测土壤或水质的传感器,它能够实
    的头像 发表于 08-04 11:27 1055次阅读
    莱姆传感器接线指南:<b class='flag-5'>简单</b>易懂的步骤

    谐波怎么处理最简单的方法

    谐波问题是电力系统中常见的电能质量问题,它不仅影响设备正常运行,还可能造成能源浪费和设备损坏。针对谐波处理的最简单方法,我们可以从以下几个方面入手: 一、理解谐波产生的原因 谐波主要由非线性负载产生
    的头像 发表于 07-13 16:35 4505次阅读
    谐波怎么处理最<b class='flag-5'>简单</b>的方法

    一个简单的串联电池组充放电实验

    文章介绍了电池充放电中的数据采集并简单阶段了电池容量
    的头像 发表于 07-03 14:41 2008次阅读
    一个<b class='flag-5'>简单</b>的串联电池组充放电实验