【通信协议】UART、I2C和SPI通信协议详解(二)

引言

在现代嵌入式系统和电子设备中,通信协议起着至关重要的作用。无论是微控制器之间的互联,还是传感器、显示设备等外设的连接,都离不开通信协议的支撑。UART、I2C和SPI是其中最常见的三种通信协议,各有优缺点和适用场景。今天就带你一文彻底搞懂UART、I2C和SPI通信协议。

本文将深入分析它们的工作原理、通信流程及应用场景,并通过表格对比它们的特点,以便读者在实际应用中选择合适的通信协议。

一. UART通信协议

1.1 UART概述

UART(Universal Asynchronous Receiver/Transmitter,通用异步接收器/发送器)是一种异步通信协议,常用于串口通信。与SPI和I2C不同,UART不需要时钟信号,而是通过在数据包中加入起始位和停止位来定义数据帧的边界。

在这里插入图片描述

一般情况下处理器中都会集成UART控制器我们使用UART进行通信时候只需对其内部的相关寄存器进行设置即可。

1.2 UART通信流程

UART通信的基本过程如下:

  1. 起始位传输:发送UART将数据线从高电平拉低至低电平,接收UART检测到这一变化时开始数据读取。
  2. 数据帧传输:数据帧包含5-9个数据位,决定实际传输的数据量(低位先行)。
  3. 校验位(可选):用于检查数据传输的完整性。
  4. 停止位传输:发送UART将数据线从低电平拉至高电平,表示数据传输结束。

在这里插入图片描述

1.3 波特率计算与误差容忍度

在UART通信中,发送方和接收方的波特率需保持一致。波特率(Baud Rate)表示每秒传输的比特数,其典型值包括9600、19200和115200等。波特率误差需保持在10%以内,否则接收方可能会出现比特位读取错误,导致数据包接收失败。在硬件设计时,需根据UART设备的时钟频率计算波特率,并通过配置寄存器的分频系数来调节波特率。

1.4 UART优缺点

优点

  • 使用两根信号线(Tx和Rx),硬件电路设计简单。
  • 支持奇偶校验位,用于数据的错误检查。
  • 无需时钟信号,异步通信更灵活。

缺点

  • 传输速率受波特率限制,通常较低。
  • 不支持多从机通信和设备地址寻址。
  • 发送和接收双方波特率要求一致,否则可能产生误码。

二. I2C通信协议

2.1 I2C概述

I2C(Inter-Integrated Circuit,集成电路互连)Philips公司在八十年代初推出的一种串行、半双工总线主要用于近距离、低速的芯片之间的通信:IC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。

  • SDA (Serial Data Line):用于传输数据。
  • SCL (Serial Clock Line):用于生成时钟信号。
    在这里插入图片描述

2.2 I2C通信流程

I2C通信由主机发起,并以消息(msg)的形式传输数据。其典型传输流程如下:

  1. 起始位:主机将SDA线拉低,同时SCL保持高电平,表示通信开始。
  2. 地址帧传输:主机发送目标从机地址帧,并附带读/写控制位。
  3. 数据帧传输:从机在收到地址帧并匹配后,发送或接收数据帧(高位先行)。
  4. ACK/NACK响应:数据帧每传输一字节,从机响应ACK表示成功接收,否则为NACK表示接收失败。
  5. 停止位:主机释放SDA线,并在SCL保持高电平时将SDA拉高,结束通信。

起始信号和停止信号
起始信号SCL为高电平时,SDA由高变低表示停止信号SCL为高电平时,SDA由低变高表示
出,起始信号产生后总线处于占用状态起始信号和停止信号都是由主机发停止信号产生后总线处于空闲状态

在这里插入图片描述

字节传送与应答
IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位

在这里插入图片描述

同步信号
IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定

在这里插入图片描述

2.3 从机地址冲突及其解决

I2C协议中,每个从机都有一个唯一的地址,但由于7位地址编码的限制,最多只能支持128个从机。当出现地址冲突时(两个从机地址相同),可以通过以下方法解决:

  1. 使用不同I2C总线或者改变其中一个从机的硬件地址配置。
  2. 通过软件配置动态改变从机地址,避免冲突。

在这里插入图片描述

2.4 I2C的优缺点

优点

  • 仅使用两根信号线,支持多个主机和从机,硬件复杂度低。
  • 通过地址帧可寻址多个从机设备,支持总线型拓扑结构。

缺点

  • 数据传输速率低于SPI,典型值为100kbps和400kbps。
  • 数据帧大小固定为8位,传输长数据时需分帧处理。

三. SPI通信协议

3.1 SPI概述

SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行通信协议,SPI是一种高速的、全双工、同步的串行通信总线,SPl需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选),SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议。

  • MOSI (Master Output/Slave Input):主机输出,从机输入的数据线。
  • MISO (Master Input/Slave Output):主机输入,从机输出的数据线。
  • SCLK (Serial Clock):时钟信号线,由主机产生时钟信号。
  • SS/CS (Slave Select/Chip Select):片选信号线,用于选择从机。

寻址方式当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该从设备

在这里插入图片描述

3.2 SPI通信流程

SPI通信的整个过程由主机主导,并通过以下步骤实现数据的发送与接收:

  1. 主机产生时钟信号:主机在通信开始时首先生成时钟信号。
  2. 片选信号拉低:主机将SS/CS引脚拉低,以激活目标从机。
  3. 数据传输:主机通过MOSI发送数据给从机,同时从机可通过MISO将数据传回给主机(高位先行)。
  4. 通信结束:当数据传输完成后,主机将片选信号拉高,终止通信。

SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑’1’,低电平表示逻辑’0’;一个字节传送完成后无需应答即可开始下一个字节的传送:SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。

在这里插入图片描述

在实际应用中,SPI的通信还涉及到时钟极性(CPOL)和时钟相位(CPHA)这两个参数,它们决定了数据在时钟上升沿或下降沿的采样方式。通常,CPOL和CPHA有四种不同的组合模式(模式0至模式3),选择不同的模式可以适应不同外设的时序要求。

CPOL表示SCLK空闲时的状态

  • CPOL=0,空闲时SCLK为低电平
  • CPOL=1,空闲时SCLK为高电平

CPHA表示采样时刻

  • 每个周期的第一个时钟沿采样CPHA=1
  • 每个周期的第二个时钟沿采样CPHA=0

需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式,我们在使用该设备时就必须保证主设备的工作模式和该从设备保持一致,否则是无法进行通信的。

3.3 SPI优缺点

优点

  • 无起始位和停止位限制,可以实现数据的连续传输。
  • 支持双向通信(MOSI和MISO),全双工传输效率高。
  • 数据传输速率快,通常比I2C高出近两倍。

缺点

  • 使用四根信号线,硬件连接复杂。
  • 缺乏错误检查机制,如无奇偶校验和ACK信号确认。
  • 不适合多从机应用,无法进行从机地址选择。

3.4 多从机配置与片选信号

SPI在多从机通信时,可以采用独立片选信号线或菊花链拓扑结构。当多个从机使用独立的CS引脚时,每个从机的片选信号均由主机控制,硬件布线复杂。菊花链结构通过将多个从机的MISO与MOSI相连,只使用一个片选信号,但这种方式的通信延时更高。


四. UART、I2C和SPI对比

以下表格总结了UART、I2C和SPI三种通信协议的主要特点,以便读者在实际应用中快速选择合适的协议。

参数UARTI2CSPI
信号线数量2 (Tx, Rx)2 (SDA, SCL)4 (MOSI, MISO, SCLK, SS)
数据传输速率低 (115kbps - 1Mbps)中 (100kbps - 400kbps)高 (1Mbps - 10Mbps)
通信模式异步通信同步半双工同步全双工
硬件复杂度简单较简单复杂
多从机支持不支持支持(通过地址帧)支持(通过独立片选引脚)
数据完整性有奇偶校验有ACK/NACK确认无内置校验机制
典型应用场景PC串口通信、调试接口传感器阵列、多节点通信存储器、显示器、ADC/DAC
数据传输低位先行高位先行高位先行

总结

本文详细分析了UART、I2C和SPI三种通信协议的工作原理、优缺点及其适用场景。在实际应用中,工程师应根据具体项目需求选择最合适的通信协议,以确保系统的性能和可靠性。


希望这篇博客能够帮助大家深入理解UART、I2C和SPI通信协议。如果你有任何问题或见解,欢迎在下方留言讨论!别忘了点赞和关注哦! 😊
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ahual_cici

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值