详解UART、I2C、SPI常用通信协议

本文详细介绍了UART、I2C和SPI三种经典的通信总线协议。UART是一种通用异步收发器,采用串行、异步通信;I2C是半双工的串行总线,适用于近距离、低速通信;SPI则是全双工、同步的串行通信协议,速度较快。各协议有其独特的帧格式、信号线和通信特性,适用于不同场景的需求。
摘要由CSDN通过智能技术生成

详解UART、IIC、SPI经典通信总线协议

一、通信基础——并行、串行、单工、双工(全双工半双工)

1.1 并行、串行、单工、双工(全双工半双工)

并行通信
在这里插入图片描述
串行通信

单工通信


双工通信(半双工同一时刻只可以有一个发送或接收、全双工同一时刻可以同时发送或接收)
在这里插入图片描述

1.2 波特率

波特率用于描述UART通信时的通信速度,其单位为bps (bit per second)即每秒钟传送的bit的数量

1.3 同步、异步

同步:发送方发出数据后,等接收方发回响应以后,才发下一个数据包的通讯方式。

异步:发送方发出数据后,不等接收方发回响应,接着发送下一个数据包的通讯方式。

二、UART 通用异步收发器

UART(Universal Asynchronous Receiver Transmitter,即通用异步收发器)是一种通用的串行、异步通信总线,拥有两条数据线,一根TXD用于发送,一根RXD用于接收,常用于主机与辅助设备之间的通信。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QeZkF84k-1687683074514)(C:/Users/zhaoxian.li/Documents/%E7%AC%94%E8%AE%B0/image/image-20230619142453678.png)]

UART帧格式

  1. 起始位:表示数据传输的开始,电平逻辑为“0” 。

  2. 数据位:可能值有5、6、7、8、9,表示传输这几个bit 位数据。一般取值为8,因为一个ASCII 字符值为8 位,先发低位后发高位。

  3. 奇偶校验位:用于接收方对接收到的数据进行校验,校验“1” 的位数为偶数(偶校验) 或奇数(奇校验),以此来校验数据传送的正确性,使用时不需要此位也可以。

  4. 停止位:表示一帧数据的结束。电平逻辑为“1”。

三、I2C总线

I2C总线是Philips公司在八十年代初推出的一种串行、半双工总线主要用于近距离、低速的芯片之间的通信,I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步,I2C总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。
在这里插入图片描述
时序图
在这里插入图片描述
说明:

  1. 开始结束:在SCL为高电平期间,SDA由高变低,即为start信号;在SCL为高电平期间,SDA信号由低变高,即为stop信号
  2. 应答信号:当检测到start信号后,在随后的8个时钟周期,SDA线进行一次8bit的数据传输,若接收到相应的8bit信号,则在第9个时钟周期拉低SDA信号,并视为一次ack应答信号

数据格式
在这里插入图片描述
3. 一次完整的IIC传输包含 Trans_data = Start + n * Bytes+ n * ack + Stop
4. 当检测到Start信号时,主机输出8bit的信号,其中前7bit表示从机的地址,为选中的从机信息,第8bit表示当前进行的读写操作,为’1’表示读操作,为’0’表示写操作,然后第9位为从机的应答ack信号,表示指定从机已接收到地址信号,以进行后续的传输;后续的传输以 8 bit + ack 的重复,即 n * Bytes + n * ack 信号来进行数据的传输,最后主机发出Stop信号,即当前的一次IIC传输结束

四、SPI

SPI(Serial Peripheral Interface)是串行外设接口的缩写,是一种高速的、全双工、同步的串行通信总线。它是由“单个主设备+多个从设备”构成的系统。

在系统中,只要任意时刻只有一个主设备是处于激活状态的,就可以存在多个SPI主设备。常运用于AD转换器、EEPROM、FLASH、实时时钟、数字信号处理器和数字信号解码器之间实现通信。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQ7U49ap-1687683074516)(C:/Users/zhaoxian.li/Documents/%E7%AC%94%E8%AE%B0/image/image-20230625162617171.png)]

为了实现通信,SPI共有4条信号线,分别是:

  1. 主设备出、从设备入(Master Out Slave In,MOSI):由主设备向从设备传输数据的信号线,也称为从设备输入(Slave Input/Slave Data In,SI/SDI)。

  2. 主设备入、从设备出(Master In Slave Out,MISO):由从设备向主设备传输数据的信号线,也称为从设备输出(Slave Output/Slave Data Out,SO/SDO)。

  3. 串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。

  4. 从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。

五、UART、SPI、I2C比较

  1. I2C线更少,比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。

  2. SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。

  3. IIC的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。

  4. UART一帧可以传5/6/7/8位,I2C必须是8位。I2C和SPI都从最高位开始传。

  5. SPI用片选信号选择从机,I2C用地址选择从机。
    以上资料来源于网络,如有侵权,告知删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值