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

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

3天内不再提示

I2C使用最少引脚的多设备通信

星星科技指导员 来源:嵌入式计算设计 作者:Jeremy S. Cook 2022-07-04 09:45 次阅读

I 2 C 也经常拼写为 I2C,并且(很少)扩展为完整的“内部集成电路”绰号,是飞利浦半导体(现为 NXP)于 1982 年发明的设备到设备通信协议。

从那时起,I2C 一直用于计算设备及其外围设备之间的通信,并且自 2006 年 10 月 6 日起,它可以免费实施,无需支付任何许可费用。

电阻器以保持线路正常高电平。在其最基本的用法中,您可能有一个 I2C 设备,例如 Arduino 板,充当主设备(控制器),而单个从设备(外围设备)设置为发出信号,甚至在发出请求时发回数据。

我已经在许多设置中使用此接口进行基本的一对一通信——例如我的JC Pro Macro 计算机输入设备上的显示——但实际上大量设备可以使用单个总线来传递消息。 该协议包括一个寻址字节,随后传输附加数据。128 个设备通常可以通过 7 个寻址位来访问,因为第 8 位用于指示是否要启动读取或写入操作。

这是对协议工作原理的非常详细的介绍,如果您想深入了解,TI 在此处更深入地解释了详细信息。通过 i2c-bus.org还可以获得大量信息。从概念的角度来看,这是一项有趣的技术,但如果您只是想让事情正常运行,好消息是使用它的许多细节都可以通过预先编写的库来处理。

为什么选择 I2C?

如前所述,I2C 的最大优势在于其接线简单,同时仍允许在多个设备之间进行通信。另一种选择是 SPI,它速度更快,能够进行一对多传输,但需要四根线。RS-232 就其本身而言,甚至比 I2C 更简单,因为它不需要上拉电阻,但只能进行一对一通信。值得注意的是,许多 I2C 设备已经包含上拉电阻,因此在这种情况下,您甚至不必添加额外的组件。

人们可能还听说过TWI(双线接口)和SMBus(系统管理总线)这两个术语,它们都是 I2C 的子集。I2C 横幅中还有多种样式,具有不同的功能,包括 8 位和 10 位寻址方案以及从 100kbit/s 到 3.2Mbit/s 的时钟速度。好消息是,经过 39 年的开发和标准化,如果你有一个类似 I2C 的设备,并且你把它扔到总线上,它很有可能会工作。在基于 Arduino 的系统的上下文中,传输是通过预定义引脚上的Wire 库处理的,这使得这更加简单。

Arduino I2C 示例

如上图所示,JC Pro Macro 2可以在其 I2C 引脚上安装 OLED 显示器以获取用户反馈,这些引脚从其“Arduino” Pro 微控制器上的引脚 2 (SDA) 和 3 (SCL) 断开。此处的设置主要是从 Adafruit ssd1306 库示例中复制/粘贴的。我设计了这个设备,我必须做的一个更改是将第 36 行从 0x3D 更改为 0x3C,因为我使用的 eBay 购买的屏幕地址与Adafruit 销售的不同。

poYBAGLCRmyAaMXPAABn9AejjMQ984.png

在研究本文时,我将 Adafruit 示例代码(地址更改)直接加载到控制我的键盘的 Pro Micro 上。没有任何进一步的修改,它开始在屏幕上显示 Adafruit 示例。请注意,上面显示的代码中的第 35 行不是问题,即使我没有连接复位引脚。不管是不是这个结果,在开发板重置后似乎确实需要一段时间才能重新开始工作,但这通常不是什么大问题。如前所述,如果您的地址正确,一切似乎都可以正常工作。

I2C 扫描仪:轻松获取正确的 I2C 地址

pYYBAGLCRnKACkrUAACZphgh3CY589.png

如果您没有正确的地址,一切都不会丢失,并且您不必在在线论坛上闲逛和/或猜测。使用这款 Arduino I2C 扫描仪实际上很容易找到。要安装,只需在 Arduino IDE 库管理器中搜索i2c 扫描仪。将执行示例代码加载到您的开发板上并打开您的串行监视器。如果您有任何 I2C 设备连接到您的 Arduino,它们的地址将通过串行监视器显示。这是一个肯定可以节省大量挫败感的工具!

可以用了!

虽然这个简短的概述应该让您开始您的 I2C 之旅,但仍有大量的设备和技术可供探索。I2C 是一种在设备与设备之间以合理速度进行通信的好方法,适用于许多应用程序,同时使用最少的 GPIO 引脚。

审核编辑:郭婷

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

    关注

    60

    文章

    1278

    浏览量

    183964
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1484

    浏览量

    123599
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186922
收藏 人收藏

    评论

    相关推荐

    飞凌嵌入式ElfBoard ELF 1板卡-i2c与从设备通讯编程示例之i2c设备通信编程

    ,定义了一个结构体类型struct_i2c_param,包含了一些与i2c通信相关的参数,包括设备地址、寄存器地址、数据长度和数据缓冲区。 main.
    发表于 11-01 11:28

    RISC V的I2C操作

    。tsuData中,1代表10ns;Timeout中,1表示10nstLow和tHigh的1代表10ns10.1.3 软件部分(Risc V)l  I2C通信主要包括以下几个部分:1、主设备发送起始位(Start
    的头像 发表于 11-01 11:06 191次阅读

    物联网嵌入式软件中的I2C总线设计详解

    基本概念、特点、通信协议,以及在不同场景下的高级应用和最佳实践。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C
    的头像 发表于 09-29 16:21 363次阅读
    物联网嵌入式软件中的<b class='flag-5'>I2C</b>总线设计详解

    I2C基本指南

    电子发烧友网站提供《I2C基本指南.pdf》资料免费下载
    发表于 09-10 09:40 0次下载
    <b class='flag-5'>I2C</b>基本指南

    I2C总线上拉电阻的必要性

    数据线加上拉电阻。这一设计不仅关乎技术的实现,更涉及系统安全和信号传输效率的优化。本文将深入探讨在I2C总线上加上拉电阻的必要性及其带来的技术优势。 我们需要理解I2C总线的基本架构。I2C总线是一种
    的头像 发表于 09-09 17:16 983次阅读

    简单认识I2C通信协议

    I2C(Inter-Integrated Circuit)通信协议是由飞利浦公司(现为恩智浦半导体)开发的一种简单、双向二线制同步串行总线协议。自1982年发布以来,I2C协议因其高效、灵活和易于实现的特点,在电子
    的头像 发表于 07-25 18:06 1423次阅读

    I2C、SPI、UART的通信过程还可以这样理解

    到目前为止,I2C、SPI和UART等仍然是电子嵌入式设备中最常用的通信协议,本文,我们将剖析这三种协议,让大家清楚、直观的了解它们的功能、优点和局限性,并辅以GIF动图展示。一、IIC协议I
    的头像 发表于 05-23 08:10 7080次阅读
    <b class='flag-5'>I2C</b>、SPI、UART的<b class='flag-5'>通信</b>过程还可以这样理解

    I2C通讯为什么要用开漏输出和上拉电阻?

    每个设备都可以将线拉低(Ground),但不能将线拉高(Vcc)。这种设计使得多个设备可以共享同一条总线,以进行通信。二、I2C接口接外部上拉电阻的原因
    的头像 发表于 05-16 08:10 6381次阅读
    <b class='flag-5'>I2C</b>通讯为什么要用开漏输出和上拉电阻?

    SPI和I2C通信协议:应用与区别

    本文深入解析了SPI和I2C这两种通信协议的特点、工作原理和应用场景。SPI适用于高速数据传输,常用于存储器芯片和显示器驱动等领域;I2C适用于低速控制和传感器数据传输,常用于温度传感器和ADC
    的头像 发表于 04-22 16:45 1793次阅读

    逼真动画展示I2C、SPI、UART的通信过程

    串行通信协议,通常用于连接低速设备,如传感器、存储器和其他外设。它使用两根线(SCL和SDA)来实现双向通信,具有地址定向性和主从模式。优点:设备
    的头像 发表于 04-12 08:27 973次阅读
    逼真动画展示<b class='flag-5'>I2C</b>、SPI、UART的<b class='flag-5'>通信</b>过程

    什么是I2C协议 I2C总线的控制逻辑

    在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。
    发表于 03-12 09:17 1043次阅读
    什么是<b class='flag-5'>I2C</b>协议 <b class='flag-5'>I2C</b>总线的控制逻辑

    什么是I2C接口?什么是I3C接口?I2CI3C的区别

    I2C接口是一种串行通信协议,全称为Inter-Integrated Circuit,即集成电路间总线。它是一种双向、两线制(SCL和SDA)的串行通信接口,主要用于连接微控制器和其他外围设备
    的头像 发表于 02-17 14:39 6163次阅读
    什么是<b class='flag-5'>I2C</b>接口?什么是<b class='flag-5'>I3C</b>接口?<b class='flag-5'>I2C</b>与<b class='flag-5'>I3C</b>的区别

    PSOC6如何通过I2C与外围设备通信

    PSOC6 如何通过 I2C 与外围设备通信? 我不太明白这一系列芯片 CAN 如何向上或向下拉动?我根据例程编写了一个与I2C通信的外围
    发表于 01-31 06:08

    蓝牙串口通讯总线——I2C/SPI/UART

    嵌入式工程师在做串口通信调试工作的时候,会经常用到I2C、SPI、UART这3条总线,I2C、SPI、UART这三种通信总线在嵌入式领域很常见,目前主流的SOC芯片都内置了这三种总线的
    的头像 发表于 01-22 09:41 1604次阅读
    蓝牙串口通讯总线——<b class='flag-5'>I2C</b>/SPI/UART

    i2c接口和spi接口区别

    I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)都是用于设备通信的串行接口标准。它们在很多方面有着相似之处,但也有一些
    的头像 发表于 12-25 15:02 3974次阅读