Arduino 和 Proteus 模拟 - I2C 两个Arduinos 之间联系的例子

      最后更新:2021-10-27 19:33:04 手机定位技术交流文章

      两个Arduinos人通过I2C通讯。

      1、I2C介绍

      集成电路联运协议(I2C)是一项协议,允许许多“外围”数字集运线路(“chips”)仅使用两条信号线与一个或多个“控制器”芯片进行互动。

      在这里插入图片描述

      • SDA(单一数据存取):机器提供的主机和路线数据。
      • 时钟信号传输线

      I2C 和 SPI 一样, 是同步的, 这意味着位元的输出与按主机和时间钟在机器之间交换的信号的比特抽样同步。 主机总是负责时钟信号 。

      2. I2C数据构成

      数据以电文形式通过 I2C 传输。 信件分为数据框。 每条电文都包含一个存储站点二进制地址的地址框, 以及包含正在广播的数据的一个或多个数据框。 开始和停止条件、 读/ 写空格以及每个数据框之间的ACK/ NACK 比特也包含在信息中 :

      在这里插入图片描述

      • 起始条件:在SCL线从高压改为低压之前,SDA线从高压改为低压。
      • 停止条件:在将SCL线从低水平转换为高水平后,SDA线从低水平转换为高水平。
      • 当主台站希望与一个台站通信时,该台站的单7或10位数序列用于识别该台站。
      • 读写比特: 指出主机是逐个发送机器的数据( 低电压水平), 还是请求它提供数据( 高电压水平) 。
      • ACK/NACK 位数 : 在信件中的每个框架为确认/ 无确认位置之后。 如果成功接收到地址框架或数据框架, 接收设备会返回发件人 ACK 位数 。

      2)I2C寻址

      由于 I2C 缺少像 SPI 这样的机器选择线, 它需要另一种方法来告知机器它正在向它传输数据, 而不是另一个机器。 它通过查找位置来实现这一点。 地址框总是新信件开始后的第一个框架 。

      连接到主机的每台机器都收到它想要与主机互动的地址。 传输设备主设备的每个地址都与它自己的地址进行比较。 如果地址匹配, 则向主机发送低电压的ACK位元。 如果地址不匹配, 机器就什么都不做, 而自失能线则保持高水平 。

      3)读/写位

      地址框以一个位置结束,以显示数据是写给机器还是从机器收到。如果主机正在从机器发送数据,读/写空格为低电压水平。如果主机要求从机器获取数据,位置为高电压水平。

      4)数据帧

      一旦主机从机器中检测到ACK位置, 第一个数据框架就可交付 。

      数据框架总是8位长, 并在它们前面以最大有效性传输。 每个数据框架后面有一个 ACK/ NACK 位, 以此确认框架已成功接收 。 在传输下一个数据框架( 取决于提供数据的人) 之前, 主机或机器必须接收 ACK 位 。

      一旦所有数据框架都传输完毕,主机设备可以发送设备停止状态以终止传输。停止状态发生时,SDA线上的电压在SCL线上的电压从低变高后从低转换为高,但SCL线仍然处于高水平。

      3、I2C通信过程

      (1) 主机将机器的启动条件传送到每条连接,将自失能线从高线向低线转换,然后将SCL线从高线向低线转换。

      在这里插入图片描述

      2) 东道主将7或10个地址和阅读/书写地点传送给它希望与其联系的每个站点:

      在这里插入图片描述

      3) 机器比较了主机发送主机到自己地址的地址。 如果地址匹配, 机器会将SDA 线推倒一个, 从而返回 ACK 位置。 如果主机的地址与机器的地址不匹配, 请将SDA 线从机器上保持高水平 。

      在这里插入图片描述

      (4) 传输或接收数据框的主机:

      在这里插入图片描述

      (5) 每个数据框架传输后,接收装置又给发件人一小块背心,以证明正确接收了该框架:

      在这里插入图片描述

      6) 为停止数据传输,主机将停止将数据从机器中传输,在将自失能系统转换为高之前,将SCL转换为高:

      在这里插入图片描述

      4、I2C连接模式

      (1) 单一宿主/多宿主/多宿主/多宿主/多宿主/多宿主/多宿主/多宿主-多木-多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多木多

      自 I2C 进行位置搜索以来, 许多访问可从一个主机管理 。 您可以使用 128 (2 7) 个独特的地址来查找 7 位地址 。 使用 10 位地址并不常见, 但有 1,024 (210) 个不同的地址可以访问 。 请按以下方式将设备中的若干设备与单个主设备链接, 使用 4. 7K Om Force Retard 将 SDA 和 SL 线路连接到 Vcc :

      在这里插入图片描述

      (2) 许多主机/现代模式

      多个主机可以连接到计算机上的一个或多个主机。 当两个主机同时试图发送或接收SDA线上的数据时, 同一系统中的众多主要设备都会出现问题。 要解决这个问题, 每个主机必须在发送信件前检测低或高的SDA线。 如果SDA线是低水平的, 它表示总线由另一个主机控制, 而主机应该等待传输信息。 如果SDA线是高水平的, 传送信息是安全的。 使用下图用4. 7K Om Force Retard 将SDA和SCL线连接到 Vcc, 将许多主机的多个主机连接到 Vcc :

      在这里插入图片描述

      5、仿真电路原理图

      在这里插入图片描述

      6、仿真代码实现

      1)主机代码

      2)从机代码

      7、仿真结果

      在这里插入图片描述

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/12162.html

          热门文章

          文章分类