嵌入式开发常用的三种通信协议串口通信、SPI和IIC

2023-05-16

常用的三种通信协议串口通信、SPI和IIC

文章目录

  • 常用的三种通信协议串口通信、SPI和IIC
  • 一、通信分类
    • 1.1.同步通信和异步通信
    • 1.2.单工通信、半双工通信和全双工通信
    • 1.3.串行通信与并行通信
  • 二、串口通信
    • 2.1.UART
    • 2.2.RS232通信
    • 2.3.RS485通信
  • 三、SPI通信
  • 四、IIC通信

一、通信分类

1.1.同步通信和异步通信

发送方和接收方按照同一个时钟节拍工作就叫同步。发送方和接收方没有统一的时钟节拍、而各自按照自己的节拍工作就叫异步。
同步通信:
通信双方按照统一节拍工作,所以配合很好;一般需要发送方给接收方发送信息同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的节奏。同步通信用在通信双方信息交换频率固定,或者经常通信时。

异步通信:
在双方通信的频率不固定,传递的数据没有固定时间间隔约定,可以是不定时长的“空闲位”。异步通信时接收方不必一直在意发送方,发送方需要发送信息时会首先给接收方一个信息开始的起始信号,接收方接收到起始信号后就认为后面紧跟着的就是有效信息,才会开始注意接收信息,直到收到发送方发过来的结束标志。

1.2.单工通信、半双工通信和全双工通信

对于点对点之间的通信,按照消息传送的方向与时间关系,通信方式可分为单工通信、半双工通信及全双工通信三种。
单工通信:
发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。基于这种情况,数据信号从一端传送到另外一端,信号流是单方向的。如下图a所示
半双工通信:
可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。在这种工作方式下,发送端可以转变为接收端;相应地,接收端也可以转变为发送端。但是在同一个时刻,信息只能在一个方向上传输。因此,也可以将半双工通信理解为一种切换方向的单工通信。如下图b所示
全双工通信:
通信的任意时刻,线路上存在A到B和B到A的双向信号传输。 全双工通信允许数据同时在两个方向上传输,又称为双向同时通信,即通信的双方可以同时发送和接收数据。在全双工方式下,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在两个方向上传送,全双工方式无需进行方向的切换。如下图c所示
在这里插入图片描述

1.3.串行通信与并行通信

按数据传送的方式,通讯可分为串行通讯与并行通讯。

串行通信:
是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。
并行通信:
是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。
在这里插入图片描述
并行可以同时发送多位数据所以速度比串行的速度要快很多,但并行要的数据线也更多相对成本会更高,而且并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著影响通讯性能。

二、串口通信

串口通信属于全双工,串行通信,有同步和异步通信。
USART:通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换,既可以同步通信也可以异步通信。
UART:通用异步收发器(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能(时钟同步),只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。

2.1.UART

8051、STM32等MCU芯片的内部都集成了UART,两个MCU进行串口通信时,可将一个MCU的TX、RX引脚分别与另一个MCU的RX、TX引脚相连
在这里插入图片描述
UART进行串口通信使用TTL电平。5V工作电压的MCU,使用0 ~ 0.5V表示逻辑0,2.5V ~ 5V表示逻辑1;3.3V工作电压的MCU,使用0 ~ 0.5V表示逻辑0,2.5V ~ 3.3V表示逻辑1。

UART串口通信是异步,全双工,串行通信,所以通信双方必须事先约定好通信参数,这些通信参数包括:波特率、数据位、校验位、停止位。
在这里插入图片描述
1.起始位、数据位、奇偶校验位、停止位
串口通信时,收发是一个周期一个周期进行的,每个周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元由:起始位+数据位+奇偶校验位+停止位组成的。
起始位:表示发送方要开始发送一个通信单元,起始位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。
数据位:是一个通信单元中发送的有效信息位,是本次通信真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(可选的有6、7、8、9,一般都是选择8位数据位,因为一般通过串口发送的文字信息都是ASCII码编码,而ASCII码中一个字符刚好编码为8位)。
校验位:是用来校验数据位,以防止数据位出错的。
停止位:是发送方用来表示本通信单元结束标志的,停止位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。常见的有1位停止位、1.5位停止位、2位停止位等,一般使用的是1位停止位。
2.波特率
波特率,指的是串口通信的速率,也就是每秒钟可以传输多少个二进制位,单位为bit/s。譬如,每秒钟可以传输9600个二进制位,它传输所用的时间
在这里插入图片描述
也就是传输一个二进制位需要的时间是1/9600秒,也就是104us。
串口通信的波特率不能随意设定,而应该是在一些值中去选择。一般最常见的波特率是9600或115200(低端单片机如51常用9600,高端单片机和嵌入式SOC常用115200)。波特率不能随意指定,主要是因为:通信双方必须事先设定相同的波特率才能成功通信,如果发送方和接收方按照不同的波特率通信则根本收不到。

2.2.RS232通信

RS232标准使用+5 V ~ +15 V表示逻辑0,-5V ~ -15 V表示逻辑1。相比TTL电平,RS232电平提高了串口通信的抗干扰能力,增大了串口通信的距离。台式PC一般都带有RS232标准接口,MCU按RS232标准进行串口通信时,需加max232电平转换芯片
RS232

2.3.RS485通信

RS485标准使用差分电平表示逻辑0或1,当A与B的电压差为+2v ~ +6v 时表示逻辑1,当A与B的电压差为-2v ~ -6v时表示逻辑0。RS485为半双工通信,即通信节点不能同时进行数据的接收和发送。相比RS232电平,RS485电平使串口通信的抗干扰能力更强,通信距离更远。MCU按RS485标准进行串口通信时,需加max485电平转换芯片
在这里插入图片描述

此外串口通信除了UART、RS232、RS485,类似的还有Modbus协议,可以参考这篇文章:详解Modbus通信协议—清晰易懂。

三、SPI通信

SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。
RS485

SPI总线包括4条逻辑线,定义如下:

  • MISO:Master input slave output 主机输入,从机输出(数据来自从机);

  • MOSI:Master output slave input 主机输出,从机输入(数据来自主机);

  • SCLK :Serial Clock 串行时钟信号,由主机产生发送给从机;

  • SS:Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号。

需要注意,对于这几个SPI线的名称,不同的厂商可能不有不同的命名

MISO也可以是SIMO,DOUT,DO,SDO或SO(在主机端);
MOSI也可以是SOMI,DIN,DI,SDI或SI(在主机端);
SS也可以是CE,CS或SSEL;
SCLK也可以是SCK;

时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样。产生时钟的一侧称为主机,另一侧称为从机。总是只有一个主机(一般来说可以是微控制器/MCU),但是可以有多个从机(后面详细介绍);数据的采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低)。

整体的传输大概可以分为以下几个过程:
主机先将NSS信号拉低,这样保证开始接收数据;
当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);
由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度(稍后我们将讨论选择合适的时钟边沿和速度)。
主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;
主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;

四、IIC通信

IIC协议仅需要一个SDA和SCL引脚。SDA是串行数据线的缩写,而SCL是串行时钟线的缩写。这两条数据线需要接上拉电阻。
2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
1、开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
2、结束信号: SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
3、应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。这些信号中,起始信号是必需的,结束信号和应答信号, 都可以不要。
IIC 总线时序图:
IIC 总线时序图:
更加详细的讲解可以参考这篇文章:IIC原理超详细讲解—值得一看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式开发常用的三种通信协议串口通信、SPI和IIC 的相关文章

  • keras:tensor从全连接层输出到卷积层

    一 tensor从卷积层输出到全连接层 用过keras的都知道 xff0c 想从卷积层输出tensor到全连接层 xff0c 只需加一层 xff1a model add Flatten shape就不会出现错误 二 但是如果从全连接层输出t
  • 保研面试复习之数据结构篇

    数据项 数据元素和数据结构的概念 数据项是组成数据元素的 xff0c 有独立含义的 xff0c 不可分割的最小单位 数据元素是数据的基本单位 数据结构是带结构的数据元素的集合 数据结构包括逻辑结构和存储结构两个层次 数据结构的三要素是逻辑结
  • 视觉里程计的重定位问题1——SVO的重定位部分

    SVO的重定位部分代码解析与分析 SVO的重定位功能体现在 xff1a 运动跟踪丢失后通过与上一关键帧匹配以及地图点投影 xff0c 找回当前相机位姿 由于没有后端和回环 xff0c SVO的重定位并不是回环校正后的重定位 代码部分被放在运
  • 组合导航(一):定位技术分类与介绍

    组合导航 xff08 一 xff09 xff1a 导航定位技术分类与介绍 一 定位技术分类1 1 基于相对测量的定位 xff08 航位推算 xff09 1 2 基于绝对测量的定位1 3 组合定位 一 定位技术分类 1 1 基于相对测量的定位
  • git bash可以正常commit,但是 VSCode 里不能正常commit使用的解决方法

    问题描述 同一路径下的源码 xff0c 使用git bash可以正常commit xff0c 但是使用vscode提交commit就会一直卡住 xff0c 转圈圈 参考方案链接 xff1a VS CODE GIT 500 问题处理 pudn
  • 组合导航(四):惯性导航系统

    1 惯性导航系统的物理平台2 惯性测量单元IMU3 惯性传感器的测量值3 1静止状态下的加速度测量3 2静止与运动状态下的角速度测量 4 惯性传感器误差4 1 系统误差 xff08 可通过实验进行校正 xff09 4 2 随机误差4 3 惯
  • 组合导航(七):卡尔曼滤波

    Kalman滤波1 离散卡尔曼滤波2 卡尔曼滤波的流程2 1 预测与时间更新2 2 测量更新与校正 3 卡尔曼滤波 算法步骤4 非线性卡尔曼滤波4 1 线性化kalman滤波4 2 扩展kalman滤波 5 卡尔曼滤波发散控制5 1 KF过
  • 组合导航(八):INS/GPS组合导航

    INS GPS组合导航1 误差反馈1 1 开环INS GPS架构1 2 闭环INS GPS架构 2 组合导航的类型2 1 松耦合 的INS GPS组合导航2 2 紧耦合 的INS GPS组合导航2 3 深度耦合的 INS GPS组合导航 3
  • 组合导航(九):三维简化的INS/GPS组合导航系统

    简化INS与GPS组合系统在三维路面上的导航1 MEMS级IMU的三维定位的性能分析2 解决MEMS级IMU在路面导航中存在的问题3 三维简化的惯性传感器系统3 1 3D RISS概述3 2 xff08 轮式车辆 xff09 采用3D RI
  • PX4安装与编译

    第一步 xff1a 下载源码 下载方式一 xff1a git clone https github com PX4 Firmware git recursive 默认下载版本为master 下载时间比较长 xff0c 包含各种包以及依赖工具
  • PX4:【系统架构】

    PX4系统架构 由两个层组成 xff1a 一是飞行控制栈 xff08 flight stack xff09 二是中间件 xff08 middleware xff09 flight stack xff1a 集成了各种自主无人机的制导 导航以及
  • PX4:【uORB通讯机制】

    uORB xff1a Micro Object Request Broker PX4进程间的通讯机制 xff1a 多对多的信息发布与订阅方式 发布消息 xff1a 1 公告 advertise xff1a 相当于初始化 xff0c 在发布消
  • PX4:【传感器校准】

    sensor的校准校准步骤 xff1a 文件目录 xff1a 代码入口 xff1a 求解模型计算公式 sensor的校准 校准步骤 xff1a 首先通过地面站QGC进行校准 xff0c QGC将校准参数设置到sh文件中 此后再基于QGC的校
  • PX4:【sensor_combined】

    功能介绍消息内容sensor combined 产生机制 amp 代码流程 功能介绍 sensor combined 是一个冗余传感器集合的消息 xff0c 通过订阅多个传感器的数据 xff0c 将冗余的数据经过VoteSensorsUpd
  • PX4:【地面站传感器数据校准】

    上电 gt rsC 运行 sensor start commander start 入口函数 xff1a 位于commander文件夹中 Commader cpp Commander run xff08 xff09 commander lo
  • Windows和Linux双系统安装教程

    最近刚刚完成了Windows和Linux双系统 xff08 这里以Ubuntu安装为例 xff09 的安装 xff0c 应某奔同学要求 xff0c 这里简单记录下安装过程 系统启动盘准备Windows系统安装分出给Linux系统的磁盘空间安
  • MSCKF系列论文阅读与代码流程

    MSCKF原理与代码总结 算法原理前端理论 xff08 图像的特征提取与跟踪 xff09 后端理论 xff08 误差状态卡尔曼滤波模型 xff09 1 IMU状态预测1 1 IMU状态传播 xff08 p v q 4阶Runge Kutta
  • open_vins(二):rosbag精度测试

    一 xff0e ros读取与轨迹保存二 xff0e euroc数据集测试三 结论 一 xff0e ros读取与轨迹保存 运行open vins launch 读取ros数据包 xff1a roslaunch pgeneva ros eth
  • open_vins(三):imu静止初始化

    一 xff0e 静止初始化原理二 xff0e 理论公式三 xff0e 相关代码四 xff0e 小结 xff1a 初始化是指在系统启动阶段 xff0c 需要估计重力方向 gravity direction 加速度计以及陀螺仪biases ac
  • ros数据集录制:rosbag record

    1 查看话题 查看topic列表 xff1a rostopic list 打印topic内容 xff1a rostopic echo topic xff12 话题录制rosbag record 用于在ros系统中录取系统中其他ros节点发出

随机推荐