器件通信协议系列文章之 I2C

传感器技术 2020-06-09 00:00



“如何与模块进行通信,试试 I2C 如何?


“I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由 NXP(原 PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。连接到总线的 IC 数量只是受到总线的最大负载电容 400pf 限制。


I2C 支持 0kHz~5MHz 的设备:


普通模式(100kHz)、快速模式(400kHz)、快速模式+(1MHz)、高速模式(3.4MHz)和超高速模式(5MHz)。


两根数据线:SDA,SCL,均为漏级开路结构。一般接上拉电阻,形成“线与”逻辑(只要一方为低电平,则此线即为低电平)。当 SDA,SCL 为高电平时,表示总线空闲。一般来说,主机发起传输之前都要检查总线的电平状态(称为仲裁),以确定是否进行数据传输(当总线上只有一个主机时,可以不用)。如果 I/O 口既能输入也能输出,可以配置成开漏输出,但是必须外接拉电阻;如果 I/O 不能配置成开漏输出,则可以转换 I/O 输入输出方向,输出采用推挽输出,输入使用上拉输入即可。注意使用转换方向的方式时必须先转换方向之后才开始释放总线。


支持多主控,但是同一时间只能有一个主控。每个设备都有自己的设备地址(共 7bit,有的是 10bit),用于区分挂在在总线上的设备,广播地址 0x00。最低位用于读写控制位,1 表示读数据,0 表示写数据。



开始信号


当开始进行一次数据传输时,需要向从设备发送一个开始信号,表示数据传输开始。


SCL 为高电平期间,SDA 由高到低表示开始信号。



结束信号


当结束一次传输时,需要发送结束信号


SCL 为高电平期间,SDA 由低到高表示结束信号。


(若主机在对一个从机操作之后,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址)



数据位


当传输数据位时,在 SCL 为低时改变 SDA,在 SCL 为高时保持 SDA 稳定。高位先传输。



应答位


数据的第 9 位为应答位。


应答:第 9 个 CLK 时钟为高电平期间,如果 SDA 为为低电平,则为应答信号。


非应答:第 9 个 CLK 时钟为高电平期间,如果 SDA 为为高电平,则为非应答信号。


主机每向从机发送一个字节数据,从机都需要发送一个应答信号,而主机每接收一个字节都需要发送一个应答信号,当主机不准备接收下一个字节时,发送一个非应答信号,也就是说,非应答信号是由主机发送的,从机只能发送应答信号。应答位的数据状态则遵循“谁接收谁产生”的原则,即总是由接收器产生应答位


可以通过发送设备地址后由应答位确定该设备是否存在。


注意:任何在 SCL 为高电平期间的 SDA 上的电平改变都会被认为是起始或者停止信号,所以数据线 SDA 必须要在时钟线 SCL 为低电平时改变


如下为传输一个字节的情况:



所有数据传输的发起者都是主设备,从设备只能被动接受主设备的请求。


实际上发送一个字节之后就马上发送停止信号一般是不能实现一次完整的数据传输的,那么正常传输流程应该是怎样的呢?


因为 I2C 总线上可能挂在了很多设备,所以首先需要在总线上发送一个设备地址,并且指明本次传输的方向。然后又因为一个设备里面有很多寄存器,所以还要再发送一个寄存器地址,最后才是发送寄存器的内容。


• 发送数据(橘色为从机发送应答位)



• 接收数据(灰色部分为主机应答)



以上这些理论知识只是和 I2C 有关的,实际使用的时候根据驱动器件的不同又会有所不同。比如 AT2402,只能连续发送 8 个字节的寄存器内容(类似 8 字节缓存),下次再发送的话需要重新发送开始信号,另外,进行下一次数据的传输时,需要延时一段时间,让器件将 8 字节缓存的内容实际写入 EEPROM 中才可,否则会将缓存内容覆盖,导致写入错误。



通过编写 I2C 驱动程序,并利用 KEIL 的仿真功能可以得到如下波形:



这是一个发送设备地址 0xA0 的波形,因为没有从机,所以在第 9 个 CLK 的高电平期间 SDA 为高。当总线上有设备地址为 0xA0 的从机时,SDA 应被从机设置为低电平。


以上知识实际上是比较简单的,基础的,适合用于单主机的情况下,如果是多主机通信,远比单主机复杂的多,涉及到时钟同步和总线仲裁,有兴趣的同学可以自行研究。


更多关于 I2C 的问题,可以查阅《I2C 总线规范》。


关于总线死锁问题:


“总线死锁主要是因为主从设备中的主机异常复位造成从机始终处于应答状态(应答状态时 SDA 为低电平,只有在 SCL 变为低电平的时候,才会变为高电平,从而释放 SDA),解决方案可在链接中找到。”



STM32 的硬件 I2C 有缺陷,但是可以通过一些方法避免,具体寻找网上的方法。



以上部分文字摘自网上,已用引号进行标记。


------------------------------------------------------------------------------------------Osprey 2018-09-02


一直以为可以连续写入数据,每写入一个数据加入写入延时,给 EEPROM 写入时间,当写完最后一个数据之后发送一个写入停止信号即可,可实际是上是必须要有一个停止信号,EEPROM 在收到这个停止信号后才会进行写写入操作,否则必然导致写入出错。正是因为有这样错误的认识,所以在读取数据的时候读出的数据和自己想要的数据不一致,而这个数据刚好用于指针索引,好巧不巧的是因为这指针错误的指向,刚好将某个函数指针地址改变了,导致程序一直运行不正常。后来花了半天时间调试,才发现了函数指针数据被更改。但是我又奇怪为什么我的程序又能运行(正是因为能运行而不是直接死在某一个地方,才让自己寻找 bug 的方向错了)。后来才想通,虽然我的函数指针指向错误,运行出错,但是因为我开启了看门狗,所以当函数运行出错后,程序无法喂狗,导致成程序自动复位,又重新运行了,但是表明上看程序又运行到起来了,实际上呢,它已经从程序的最开始重新运行了。记录此教训,以提醒后来人。


还有一点就是单字节写入数据效率特别低,如果写入数据超过两个字节,在内存足够的情况下,最好开启一个页缓冲区,以加快写入速度。但是如果你认为写入数据是你可以接受的,那么不需要这个页缓冲区了,毕竟一旦加入页缓冲,也是要加入不少逻辑去维护的。


再介绍一个页写入的算法,之前看了一些页写入的算法,发现实在是太麻烦了。我就在想肯定有一种更为简单的算法的,直到这次更新笔记的时候才偶然发现了该算法。



自行理解吧,不是很难的逻辑思路。


来源:鱼鹰谈单片机



免责声明:本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,我们将根据您提供的证明材料确认版权并按国家标准支付稿酬或立即删除内容!本文内容为原作者观点,并不代表本公众号赞同其观点和对其真实性负责。

 
  

为您发布产品,请点击“阅读原文”

 
传感器技术 制造业的未来是智能化,智能化的基础就是传感器; 互联网的方向是物联网,物联网的基石也是传感器; 关注传感器技术,获得技术资讯、产品应用、市场机会,掌握最黑科技,为中国工业导航。
评论
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 50浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 141浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 83浏览
  •         在有电流流过的导线周围会感生出磁场,再用霍尔器件检测由电流感生的磁场,即可测出产生这个磁场的电流的量值。由此就可以构成霍尔电流、电压传感器。因为霍尔器件的输出电压与加在它上面的磁感应强度以及流过其中的工作电流的乘积成比例,是一个具有乘法器功能的器件,并且可与各种逻辑电路直接接口,还可以直接驱动各种性质的负载。因为霍尔器件的应用原理简单,信号处理方便,器件本身又具有一系列的du特优点,所以在变频器中也发挥了非常重要的作用。  &nb
    锦正茂科技 2024-12-10 12:57 76浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 79浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 109浏览
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 71浏览
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 84浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 71浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 88浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 102浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 51浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦