小白在线

爱生活 爱小白

超全的Arduino、ESP8266和ESP32的I2C接口使用方法教程

 

在本篇文章中,我们将更深入研究I2C通信协议。


我们将主要介绍以下内容:Arduino和ESP8266微控制器通过I2C连接设备需要哪些引脚、该通信协议的优缺点以及如何使用I2C多路复用器


Arduino/ESP8266与其他设备通信,例如OLED显示器、气压传感器等,可以使用I2C通信协议。也可以使用两外两个通信协议:SPI和UART。


I2C全称是Inter-Integrated Circuit,是1982年由飞利浦半导体公司(现在为NXP Semiconductors)发明的。I2C具有多种功能:

●    同步(Synchronous):通过主机和从机之间共享的时钟信号,位输出与位采样同步。

●    多主机(Multi-master):您可以有多个主机控制一个或多个从机。

●    多从机(Multi-slave):您可以将多个从机连接到单个主机,类似于SPI。

●    数据包交换(Packet switched):传输的数据分为包/消息,由数据头和有效负载组成。

●    单端(Single-ended):数据通过单线传输。

●    串行连接(Serial connection):数据通过单线一位一位地传输


I2C参考设计

在Arduino/ESP8266上,您将找到用于I2C通信的两个GPIO(SDA和SCL)。如果不确定是否找到相应的引脚,请参见以下图片


ESP8266(NodeMCU)

SDA:D2(I2C->数据);SCL:D1(I2C->时钟)

 


Arduino Nano开发板

SDA:A4;SCL:A5

 


I2C通信所需的两个引脚如下:

●    SDA(串行数据):主站和从站之间的连接,用于发送和接收数据。

●    SCL(串行时钟):在主机和从机之间共享时钟信号,其中主机始终控制时钟信号。

 


串行数据线和串行时钟线通过电阻上拉。因此,当总线上没有数据传输时,SDA和SCL处于高电平状态。典型电压为+ 5V和+ 3.3V,设备可以100 kHz或400 kHz进行通信。所有I2C器件都通过集电极开路或漏极开路引脚连接到总线,以将总线拉低。主机和从机之间的通信是通过拉低和释放高电平来切换总线而发生的。此外,位在时钟下降沿计时。


对于给定的总线设备,可能有四种潜在的操作模式,但是大多数设备仅使用单个角色,并且使用两种模式:

●    主机发送 – 主机正在向从机设备发送数据,

●    主节接收 – 主机正在从从机设备接收数据,

●    从机发送 – 从机设备正在向主机发送数据,

●    从机接收 – 从机设备正在从主机接收数据。


I2C消息协议

I2C消息协议根据位的电平分成固定的状态。在本文的以下部分,我们将仔细研究协议的六个不同状态。

 


1.    开始条件:SCL为高电平时,SDA:高→低

2.    停止条件:SCL为高电平时,SDA:低→高

3.    地址帧:地址帧是7或10位序列,用于标识主机的每个从机。该标识符在所有从站上都是唯一的。每个从机将从主机发送的地址与其自己的地址进行比较。如果地址匹配,它将向主机发送一个ACK位→0。如果地址不匹配,则从站不执行任何操作,并且SDA线保持高电平。

4.    读/写位

      写入:主机正在向从机发送数据:0

      读取:主机正在向从机请求数据:1

5.   ACK / NACK位。如果成功接收到地址帧或数据帧,则会从机设备向发送方返回ACK位→0。

6.    数据帧:主机检测到来自从机的ACK位后,即可发送第一个数据帧。数据帧始终为8位长,后跟ACK / NACK位以验证是否已成功接收到该帧。主机将以固定间隔继续产生时钟脉冲。


I2C写入通讯时序

 


I2C读取通讯时序

 


重复启动条件

 


时钟延长

在某些情况下,主机数据速率将超过从机提供所需数据的能力。因此,从机可以在主机释放SCL线后按住SCL线。主机将等待从机释放点击线,然后再继续下一帧。


物理层

与UART或SPI连接不同,I2C总线驱动器是“漏极开路”的,这意味着它们可以将相应的信号线拉低,但不能将其拉高。因此,当一台设备试图将线路驱动为高电平而另一台设备将其拉低时,则无法进行通信。这种架构避免了通信中的错误。


但是如何将信号线拉高?每条信号线都有一个上拉电阻,可在没有器件将其置为低电平时将信号恢复为高电平。根据经验,选择一个电阻为4.7kΩ。连接到I2C通信的设备越多,电阻就必须越小。


I2C在连接具有不同I / O电压的设备时具有一定的灵活性。对于以5V电压电平作为主设备的Arduino开发板,可以正常连接一个3.3V电压的从设备。但是,如果从机的电压低于3.3V(例如2.5V),则有可能需要I2C电平转换器。


I2C速度模式

●    低速模式:10 kbit / s

●    标准模式:100 kbit / s

●    快速模式:400 kbit / s

●    快速模式+:1 Mbit / s

●    高速模式:3.4 Mbit / s

●    超快速模式:5 Mbit / s


I2C通讯的优缺点

●    优点:仅使用两根电线;支持多个主机和多个从机;众所周知且被广泛使用的协议。

●    缺点:数据传输速率比SPI慢,数据帧的大小限制为8位

 


超全的Arduino、ESP8266和ESP32的I2C接口使用方法教程 https://www.yiboard.com/thread-1553-1-1.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«   2020年12月   »
123456
78910111213
14151617181920
21222324252627
28293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接
    • Z-BlogPHP
    • 订阅本站的 RSS 2.0 新闻聚合

    Powered By Z-BlogPHP 1.6.4 Valyria

    Copyright iXiaoBai.net Rights Reserved. 吉ICP备18001369号-1