当前位置: 首页 > news >正文

UART、SPI、IIC、CAN几种通信协议的简述与对比

前置概念理解

串行/并行

  • 串行

    数据按位传输

    UART、SPI、IIC、CAN

  • 并行

    数据在多根信号线上同时传输

    计算机内部总线等

同步/异步

  • 同步

    通信双方共享时钟信号(线),通过一致的频率实现信息同步

    IIC;SPI;

  • 异步

    通信双方分别有自己的时钟,通过起始位/停止位等实现信息同步

    UART;CAN

全双工/半双工/单工

  • 全双工

    双向通信,双方都可发送数据,且可同时进行

    UART;SPI

  • 半双工

    双向通信,双方都可发送数据,但同一时刻只能一方发送,一方接收

    IIC;CAN

  • 单工

    单向通信,只能由一方发送数据,一方接收数据



通讯协议对比

UART

串行(单向只有一根数据线发送数据)、异步(无时钟线)、全双工(收发在不同线上)

速率受传输距离等外部环境影响

  • 信号线与接线方式

    • TX
    • RX
    • GND
    img
  • 通信结构

    点对点式:1对1

  • 信号类型与抗干扰能力

    单端信号(相对GND);抗干扰能力有限

    不包括RS-485

  • 数据通信格式

    按数据帧传输,一个字节数据:起始位+数据位+奇偶校验位+停止位

    使用起始位和停止位表示数据帧的开始和结束

    加上起始位/停止位,这一个字节数据不止8位

  • 使用场景

    计算机与外部设备通信,如计算机和蓝牙模块、无线模块等

    适用于速率有限,简单的点对点通信

SPI

串行(单向只有一根数据线发送数据)、同步(有时钟线)、全双工(收发在不同线上)

速率受信号干扰布线长度等外部环境影响

  • 信号线与连接方式

    • MOSI(Master Out Slave In)
    • MISO(Master In Slave Out)
    • SCLK(Serial Clock)
    • CS/SS(Chip Select / Slave Select)
    img
  • 通信结构

    主从式:1对多

  • 信号类型与抗干扰能力

    单端信号(相对GND);抗干扰能力有限

  • 数据通信格式

    因为有片选线,时钟线,因此没有一帧的概念;通过数据线和时钟线配合完成通讯

    img img
  • 设备选择

    单主设备:使用片选信号线(SS)

  • 使用场景

    高速数据传输,如读取SD卡等

    适用于高速数据传输,一主多从的情况

IIC

串行(单向只有一根数据线发送数据)、同步(有时钟线)、半双工(收发在同一根线上)

速率受总线负载、线缆长度、设备数量等外部环境影响

  • 信号线与连接方式

    • SDA(Serial data)
    • SCL(Serial clock line)
    img
  • 通信结构

    多主多从:多对多

    多个主设备可同时尝试访问总线,由总线仲裁机制确定谁可以获得总线控制权

  • 信号类型与抗干扰能力

    单端信号(相对GND);抗干扰能力有限

  • 数据通信格式

    • 开始信号

      SCL保持高电平,SDA由高电平变为低电平后,延时(>4.7us),SCL变为低电平。

      img
    • 停止信号

      SCL保持高电平。SDA由低电平变为高电平

      img
    • 应答信号

      主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答

      低电平0表示应答,1表示非应答

    • 数据传送

      IIC信号在数据传输过程中,当SCL=1高电平时,数据线SDA必须保持稳定状态,不允许有电平跳变

      只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化

      img

      其中ACK应答由从机产生,其余均由主机产生

      img

      image-20240818234352494

      img

      image-20240818234409072

  • 使用场景

    与低速设备通信,如单片机与低速外设(温度传感器等)

    适用于低速通信应用,多主多从的情况

CAN

串行(差分信号,近似一根线发送数据)、异步(无时钟线)、半双工(收发都在差分信号线上)

通信速率相对较低,长距离

  • 信号线与连接方式

    • CAN_High
    • CAN_Low
    img
  • 通信结构

    多主多从:多对多

    所有节点均平等,任何节点都可作为主节点,发送的数据可广播到其它所有节点

    当多个主节点都尝试发送消息时,由can协议的仲裁机制来避免冲突

  • 信号类型与抗干扰能力

    差分信号;抗干扰能力较强

  • 数据通信格式

    较复杂,使用时注意波特率等;详情另行查阅

  • 应用场景

    多个控制单元之间通信,如汽车

    适用于长距离、抗干扰要求高、多主多从的情况



文章主要参考:

串口的认识(COM接口)_com串口-CSDN博客

SPI原理超详细讲解—值得一看-CSDN博客

IIC原理超详细讲解—值得一看-CSDN博客

秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4 CAN!_程序获取 can协议所有id-CSDN博客

【一看就懂】UART、IIC、SPI、CAN四种通讯协议对比介绍_uart、can、spi、i2c通信协议-CSDN博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 简洁清新个人博客网页模板演示学习
  • EasyPoi使用指定的模板导入导出excel
  • Grafana学习笔记
  • 线性代数:每日一题1/特征值与相似对角化
  • 【Unity开发】几种空值判断的性能测试
  • TS简单总结
  • 基于微信小程序的书籍销售预测系统的设计与实现(论文+源码)_kaic
  • 前后端项目交互异步请求JSON数据类型后端标准响应数据格式
  • 斗破C++编程入门系列之四:运算符和表达式
  • 手撕C++入门基础
  • Java Sream中自定义Collector实现复杂数据收集方法
  • Java 向上转型小白学习总结
  • hive benchmark
  • zdpvue_primeadmin 登录相关界面的代码梳理和优化,一款Vue3开发的后台管理系统模板
  • IDEA如何进行断点调试
  • 【391天】每日项目总结系列128(2018.03.03)
  • CODING 缺陷管理功能正式开始公测
  • gcc介绍及安装
  • golang中接口赋值与方法集
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JS笔记四:作用域、变量(函数)提升
  • js学习笔记
  • Mithril.js 入门介绍
  • Rancher如何对接Ceph-RBD块存储
  • React-redux的原理以及使用
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • vue脚手架vue-cli
  • 仿天猫超市收藏抛物线动画工具库
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于字符编码你应该知道的事情
  • 精彩代码 vue.js
  • 学习JavaScript数据结构与算法 — 树
  • ​补​充​经​纬​恒​润​一​面​
  • ​批处理文件中的errorlevel用法
  • ​如何在iOS手机上查看应用日志
  • !$boo在php中什么意思,php前戏
  • # Panda3d 碰撞检测系统介绍
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #NOIP 2014# day.2 T2 寻找道路
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (7) cmake 编译C++程序(二)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Java)【深基9.例1】选举学生会
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .gitignore文件---让git自动忽略指定文件
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core Redis 使用有序集合实现延迟队列
  • .Net MVC + EF搭建学生管理系统
  • .pop ----remove 删除
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)