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

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

3天内不再提示

Arduino常用的三种通信协议 1

jf_78858299 来源:爱上Arduino 作者:小B 2023-02-13 10:30 次阅读

UARTI2C和SPI是嵌入式世界里最常见的三种通信协议。在阅读教程,或者购买模块时常常看见“这个模块是用I2C协议驱动的”, “两个设备之间数据走SPI”诸如此类的描述,很多新手觉得是什么高阶的知识就一知半解得略过去略了。今天小编简略地为大家介绍一下这三种协议,以及它们各自的优缺点。

什么是通信协议

白话点说,通信协议就是通信时候双方约定的规则。打个类比,就像你跟另外一个人交流,你们之间需要一种交流的约定,就是语言。要么都说中文,要么都说英文。通信协议就类似于硬件之间交流的语言。

串行通信和并行通信

在硬件通信里,一般有两种通信方式:串行通信(Serial Communication)和并行通信(Parallel Communication)。这两种通信方式的区别从字面理解也很简单:串行就是数据一个接一个的发送;并行就是所有数据都同时发出。

图片

但由于并行通信在线路成本和同步困难方面的问题使其在实际应用上面远不如串口通信来得广泛。本文介绍的UART, I2C和SPI三种通信协议都属于串口通信。

单工,半双工,双工

根据串行数据的传输方向,我们可以将通信分为单工,半双工,双工。

  • 单工:

    是指数据传输仅能沿一个方向,不能实现反向传输。

  • 半双工:

    是指数据传输可以沿两个方向,但不能同时进行传输。

  • 全双工:

    是指数据可以同时进行双向传输。

图片

同步通信和异步通信

根据串行数据传输方式,我们又可以分为:同步通信和异步通信。

图片

同步通信是指发送端和接收端必须使用同一时钟,是一种连续传送数据的通信方式。由于发送和接收的双方都采用同一时钟,这样接收方就可以通过时钟信号来确定每个信息位。

异步通信不需要双方使用同一时钟,并且它是一种不连续的传输通信方式,一次通信只能传输一个字符数据(字符帧)。而字符帧之间的间隙可以是任意的。但由于不知道对方什么时候发送数据,所以发送方要在数据的开始后结束都要加一些辅助的信息,比如开始要有起始位,结束要有结束位等。

同步通信的通信效率比异步通信高,可以传输较大的数据量但对于时钟同步要求比较高,而异步通信不需要同步时钟,通信实现简单,设备相对简单,但是传输速率不高,某些通讯中还需要双方约定数据的传输速率,以便更好地同步。

了解了上面的几个基本概念,我们再来按个看一看UART、I2C和SPI三种协议。

图片

UART协议

UART的全称叫 Universal Asynchronous Reception and Transmission通用异步收发。从名字我们就可以知道,UART是异步串行通信的。利用UART协议传输数据时,需要两个数据引脚,一个用于传输数据的TX,另一个用于接收的RX。

Arduino板上默认的RX和TX引脚分别是Pin0和Pin1。UART硬件层和软件层的功能都是Arduino集成的,一般我们不需要从底层操作数据。一个UART口(一组RX和TX)只能连接一个UART设备进行通信,我们需要这样就接线:

图片

注意,一个设备的TX接的是另一设备的RX,反之RX接TX,最后需要将两个设备共地,共地是让它们的参考电压一致。

下面,我们用两块Arduino实际实践一下。如图连接两个Arduino:

图片

我们在Arduino A里烧录以下代码:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
    char s[]="I am Arduino A";//每隔1s发送一次字符数组s
    Serial.print(s);
    delay(1000);
}

再在Arduino B里烧录以下代码:

String a=""; //定义字符串,接收数据


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}
void loop() {
   while(Serial.available())//当发现缓存中有数据时,将数据送至字符数组a中
   {
     a+=char(Serial.read());
     delay(3);
   }
   if (a.length() > 0){
      Serial.println(a)
      a = ""
   }
}

这样就A就通过UART向B发送了“I am Arduino A”消息,B接收到以后输出。当然你可以修改A的代码实现双向数据传输,这里我们就点到即止了。

UART是最常见的通信协议之一,它可以实现全双工传输,但它的传输速度比较慢,而且只能支持一对一的设备。

I2C协议

I2C是Philips公司在1980年代发明的一种协议,全称是Inter-Integrated Circuit。I2C最常被应用于模块或者传感器之间的通信,因为I2C基于二根传输线,同步通信的半双工协议,而且协议也非常简单可靠。I2C使用两根传输线实现一个主设备与多个从设备,甚至是多个主设备与对应从设备之间的通信。 这两根通讯线一根为控制时钟线,称之为SCL,用于同步设备间的数据传输时钟; 另一根为数据线,称之为SDA,用于携带数据。理论上,一条I2C总线上能支持挂载128台设备。

图片

Arduino UNO的I2C引脚是A4(SDA), A5(SDL)。Arduino对I2C协议也进行了库封装:

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

    关注

    17

    文章

    1628

    浏览量

    90109
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1385

    浏览量

    121407
  • uart
    +关注

    关注

    22

    文章

    1166

    浏览量

    100384
收藏 人收藏

    评论

    相关推荐

    局域网通信协议详解及选择原则

    通信协议实际上是一组规定和约定的集合,我们常用的计算机就离不开。本文将介绍局域网中的三种通信协议以及选择网络通信协议的原则。
    发表于 01-06 15:45 5079次阅读

    常用的串口通信协议之SPI协议简析

    SPI(serial peripheral interface)也是一种同步串行通信协议。这里为啥要说“也”呢,回想上一篇介绍的PS/2不也是同步串行通信协议吗。SPI由一个主设备和 一个或多个
    发表于 07-07 09:33 3762次阅读

    浅谈Modbus通信协议

    Modbus通信协议是一种工业现场总线协议标准,常用的Modbus协议有以下三种类型:Modbus TCP、Modbus RTU、Modbu
    发表于 09-20 15:56 1660次阅读
    浅谈Modbus<b class='flag-5'>通信协议</b>

    常用通信协议有哪些

    ;      TCP/IP是一可选择路由的通信协议。它具有很强的灵活性,可支持任意规模的网络
    发表于 06-03 15:21

    智能插座常用的两通信协议是什么?

    智能插座常用的两通信协议是什么?
    发表于 09-26 09:18

    单片机系统中最常用三种通信协议

    UART、 I2C 和 SPI 是单片机系统中最常用三种通信协议1、初步介绍SPI 是一高速的、全双工、同步
    发表于 11-18 09:22

    嵌入式领域中常用的5通信协议是什么

    文章目录嵌入式领域中常用的5通信协议嵌入式领域中常用的5通信协议串口
    发表于 12-14 06:22

    三种常见嵌入式设备通信协议是什么?

    三种常见嵌入式设备通信协议是什么?
    发表于 12-23 08:17

    单片机系统中最常用通信协议有几种

    )、MOSI(主机输出从机输入Master Output/Slave Input)和MISO(主机输入从机输出Master Input/Slave Output)。单片机系统中最常用通信协议三种,分...
    发表于 02-17 07:43

    单片机系统中最常用三种通信协议是什么?

    单片机系统中最常用三种通信协议是什么?
    发表于 02-17 06:03

    串口通信协议的相关资料分享

    的建立、建立STM32与PC之间的通信基础1、串口助手的使用2、效果呈现一、串口通信协议1、UART简介嵌入式开发中,UART串口
    发表于 02-22 07:16

    STM32的三种串口通信协议介绍

    本文首先介绍了STM32串口硬件电路及串口编程,其次介绍了STM32的三种串口通信协议,最后介绍了STM32串口通信程序设计要点。
    发表于 05-25 09:33 3.8w次阅读
    STM32的<b class='flag-5'>三种</b>串口<b class='flag-5'>通信协议</b>介绍

    Arduino UNO上的SPI通信协议

    电子发烧友网站提供《Arduino UNO上的SPI通信协议.zip》资料免费下载
    发表于 11-09 10:24 0次下载
    <b class='flag-5'>Arduino</b> UNO上的SPI<b class='flag-5'>通信协议</b>

    Arduino常用三种通信协议 2

    UART、I2C和SPI是嵌入式世界里最常见的三种通信协议。在阅读教程,或者购买模块时常常看见“这个模块是用I2C协议驱动的”, “两个设备之间数据走SPI”诸如此类的描述,很多新手觉得是什么高阶的知识就一知半解得略过去略了。今
    的头像 发表于 02-13 10:31 2512次阅读
    <b class='flag-5'>Arduino</b><b class='flag-5'>常用</b>的<b class='flag-5'>三种</b><b class='flag-5'>通信协议</b> 2

    Arduino通信协议教程

    今天,我们将讨论arduino通信协议的有关内容。设备往往需要相互通信以中继所处环境相关信息,显示其状态变化,或请求执行辅助操作。
    的头像 发表于 02-23 10:40 2451次阅读
    <b class='flag-5'>Arduino</b><b class='flag-5'>通信协议</b>教程