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

UART和SPI区别

简单来说:

  • ​UART​​:像两个人打电话(​​异步​​,全双工,一对一)。注重简单和通用,适合​​远距离​​、​​点对点​​的数据传输。
  • ​SPI​​:像老师对多个学生点名(​​同步​​,全双工,一对多)。注重​​高速​​和​​高效率​​,适合​​板级器件​​之间的短距离通信。

下面是详细的对比:


对比表格

特性UARTSPI
​全称​Universal Asynchronous Receiver/TransmitterSerial Peripheral Interface
​中文名​​通用异步收发传输器​​串行外设接口​
​通信方式​​异步​​ (无时钟线,双方需约定波特率)​同步​​ (有时钟线,由主设备产生)
​数据线​​2根​​: TX (发送), RX (接收)​至少3根(主从1对1时)​​:
- ​​SCLK​​ (时钟)
- ​​MOSI​​ (主出从入)
- ​​MISO​​ (主入从出)
​+ 每增加一个从机需1根SS线​
​拓扑结构​​点对点​​ (1对1)​一主多从​​ (1对N),通过片选信号(SS/CS)选择从机
​速度​较低 (常用波特率:9600, 115200 等)很高 (可达几十甚至上百 MHz)
​数据格式​数据包格式:起始位 + 数据位 (5-9) + 可选的奇偶校验位 + 停止位 (1-2)没有固定的数据包格式,只是连续的时钟脉冲下传输数据位
​优缺点​​优点​​:硬件简单、所需线少、可实现远距离通信 (如RS-485)
​缺点​​:速度慢、有时钟误差积累问题、效率较低
​优点​​:速度极快、协议简单灵活、无时钟误差问题
​缺点​​:需要更多硬件线(尤其是多从机时)、无硬件错误校验、占用主机更多IO口
​典型应用​连接计算机终端、GPS模块、蓝牙/Wi-Fi模块、旧的传感器、通过RS-232/RS-485转换芯片进行工业通信连接Flash存储器、SD卡、显示屏、ADC/DAC转换芯片、高速传感器等需要快速传输数据的片上外设

核心区别详解

1. 同步 vs. 异步

这是两者最根本的区别。

  • ​SPI (同步)​​:有一根独立的时钟线 (​​SCLK​​)。主设备控制时钟,从设备在时钟的上升沿或下降沿读取数据。​​通信双方无需事先约定速率,也绝不会因为时钟频率微小误差而丢失数据​​。

    • ​好比​​:两个人踩着同一个节拍器跳舞,步调绝对一致。
  • ​UART (异步)​​:​​没有时钟线​​。通信双方必须​​事先精确约定​​一个通信速率(即波特率,如9600bps)。发送方在数据前加上一个“起始位”来告知接收方数据开始,接收方则根据这个约定的波特率来采样数据。如果双方时钟有微小误差,长时间通信可能会产生错位。

    • ​好比​​:两个人约好每秒走一步,但各自用自己的手表计时,时间长了可能就会不同步。
2. 硬件连接与拓扑
  • ​UART​​:非常简单,只需要​​两根数据线​​(TX和RX交叉连接)和一根共地线。​​严格的一对一​​通信。
  • ​SPI​​:线更多。基本需要​​4根线​​(SCLK, MOSI, MISO, SS)。它的优势在于可以​​一对多​​通信。主设备通过控制不同的​​片选信号 (SS/CS)​​ 来选择与哪个从设备通信。挂载的设备越多,需要的片选线就越多。
3. 速度与效率
  • ​SPI​​:由于是同步通信且协议开销极小(没有起始位、停止位等),它的​​速度远高于UART​​,是高速数据交换(如读写SD卡、显示屏刷新)的首选。
  • ​UART​​:协议中有起始位、停止位等额外开销,有效数据占比更低,因此​​效率较低,速度也慢​​。但它足以应对像传感器每分钟发送一次读数,或者打印调试信息这类不要求高速的场景。

如何选择?

  • ​需要高速、板内通信​​? -> ​​选SPI​​。 (例如:连接Flash芯片、TFT屏幕)
  • ​需要远距离、简单、一对一通信​​? -> ​​选UART​​。 (例如:连接电脑串口调试、GPS模块)
  • ​从设备支持​​? -> 很多芯片可能只支持其中一种,所以最终选择往往由​​外设本身决定​​。
http://www.xdnf.cn/news/19075.html

相关文章:

  • ros2--topic/话题--接口
  • 多线程图像发送处理器的设计与实现
  • 12、做中学 | 初一上期 Golang函数 包 异常
  • cssword属性
  • ubuntu 安装 vllm
  • Linux笔记13——shell编程基础-7
  • 基于SpringBoot和Thymeleaf开发的英语学习网站
  • ubuntu24.04 QT中配置opencv4.12
  • FreeRTOS基础知识记录
  • MySQL 中有哪些锁类型?
  • 华为交换机S5700设置acl
  • 衡石SENSE 6.0技术解析:Workflow到Agent模式如何重塑计算框架
  • ADC模数转换
  • Android init 进程部分理论
  • 解决使用OSS的multipartUpload方法上传大文件导致内存溢出的问题
  • 设计模式-行为型模式-命令模式
  • 【编号513】2025年全国地铁矢量数据
  • 从混乱到高效:ITSM软件如何重塑企业IT管理的新格局
  • 淘宝四个月造了一个超越美团的“美团”
  • 对接印度股票市场 数据源API
  • 逻辑漏洞 跨站脚本漏洞(xss)
  • 滚珠导轨如何赋能精密制造?
  • 【技术分享】系统崩溃后产生的CHK文件如何恢复?完整图文教程(附工具推荐)
  • 采用机器学习的苗期棉株点云器官分割与表型信息提取
  • DINOv3:自监督视觉模型的新里程碑!
  • Matlab实现基于CPO-QRCNN-BiGRU-Attention注意力多变量时间序列区间预测
  • Rust:所有权
  • 音视频学习(五十九):H264中的SPS
  • 使用STM32CubeMX使用CAN驱动无刷电机DJI3508
  • VisualStudio 将xlsx文件嵌入到资源中访问时变String?