打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
串口通信————UART、I2C、SPI详解(总结篇)

B站账号:小光学嵌入式

⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大二学生。

⏩最近开始系统性补习STM32基础知识,规划有:串口通信,Github,Ucos等等。

⏩今天总结一下串口通信,后面再在代码实现做讲解。

串口通信

1.工作原理

1.工作原理

2.传输步骤

3.UART优缺点

1.传输步骤

2.SPI优缺点

1.同步通信

2.异步通信

1.全双工:

2.半双工

1.串行通信

2.并行通信

串行与并行

全双工与半双工

同步通信和异步通信

一.SPI通信

二.UART通信

三.I2C通信

总结

串行与并行

1.串行通信

位通过单根线一一发送,下图显示了二进制(01000011)中字母“C”的串行传输。

当时钟线为高电平时,接收数据位,高电平为1,低电平为0。

2.并行通信

数据位在导线中同时传输,下图显示了二进制(01000011)中字母“C”的并行传输:

的当时钟线为高电平时,8个数据位同时接受数据,高电平为1,低电平为0

所以UART、SPI、I2C都是串口通信,因为它们都是通过一根线作为数据线传输数据。

全双工与半双工

1.全双工:

简单来说,比如我们在打电话时,我们可以在同一时间说话,这就是全双工通信;

2.半双工

相对的,虽然半双工也可以互相的通信,但是在同一时间只能单方向传输数据;

UART和SPI都是全双工通信方式,因为他们的数据线都有两根,即可以在同一时间A发数据给B,B也可以在这个时间发数据给A。如I2C通信,因为他只有一根数据线,所以他不能在同一时间双向传输数据。

同步通信和异步通信

同步是阻塞模式,异步是非阻塞模式。

1.同步通信

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

2.异步通信

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

所以SPI和I2C都是同步通信,因为他们都有时钟线,UART是异步通信方式,他只有两个数据线,发送完数据不会确认你是否接收到。

一.SPI通信

SPI可以无中断传输数据,可以连续地发送或接收任意数量的位。但是I2C和UART中,数据以数据包的形式发送,有限定位数。

在SPI设备中,设备分为主机控制设备(通常是微控制器)和从机(通常是传感器,显示器和存储芯片)设备,从机从主机那获取指令。

SPI信号线有四种:

MOSI-信号线:主机输出,从机输入;

MISO-信号线:主机输入,从机输出;

SCLK-时钟信号;

SS/CS-片选信号;

SPI协议特点

实际上,从机的数量受系统负载电容的限制,它会降低主机在电压电平之间准确切换的能力。

时钟信号

每个时钟周期传输一位数据,因此数据传输的速度取决于时钟信号的频率。 时钟信号由于是主机配置生成的,因此SPI通信始终由主机启动。

设备共享时钟信号的任何通信协议都称为同步。SPI是一种同步通信协议,还有一些异步通信不使用时钟信号。 例如在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。

片选信号

主机通过拉低从机的CS/SS来使能通信。主机可以与存在多个CS/SS引脚,允许主机与多个从机进行通信。

1.传输步骤

1.主机输出时钟信号

2.主机拉低SS/CS引脚,激活从机

3.主机通过MOSI将数据发送给从机

4.如果需要相应,则从机通过MISO将数据返回给从机

2.SPI优缺点

优点:无起始位和停止位,因此数据可以持续传输不会中断;数据传输速率快(比I2C快几乎两倍)。独立的MISO、MOSI可以同时发送和接收数据。

缺点:使用四根线(I2C使用两根线),没有信号接收成功的确认(I2C由此功能),没有任何形式的错误检查(UART中的奇偶校验位)。

二.UART通信

两个UART直接相互通信。发送UART将控制设备(如CPU)的并行数据转换位串行形式,以串行的形式将其发送到接收UART。只需要两条线即可在两个UART之间传输信息:

UART属于异步通信,没有时钟信号。它会在数据包中增加开始和停止位。这些位定义了数据包的开始和结束,因此接收UART知道何时读取这些数据。

当接收UART检测到起始位时,它将以特定的波特率的频率读取(数据传输速度的度量),以每秒比特数(bps)表示。两个UART必须以大约相同的波特率工作,发送的接收UART之间的波特率只能相差约10%。

1.工作原理

UART数据包包含有一个起始位,5到9个数据位(取决于UART),一个可选择的奇偶检验位以及一个或两个停止位:

screen-capture

起始位

UART数据传输线通常在不传输数据时保持在高电平电平。开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平,当接收UART检测到高电压转换时,他开始以波特率的频率读取数据帧中的位。

数据帧

数据帧内包含正在传输的实际数据。使用奇偶校验位是5-8位,不使用最多可以是9位。

校验位

奇偶校验位是接收UART判断传输期间是否有任何数据更改的方式。接收UART读取数据帧后,它将对值为1的数进行技术,并且检查总数是偶数还是奇数,是否与数据相匹配。

停止位

向数据包的结尾发出信号,发送UART将数据传输线从低电压驱动到高电压至少两位的时间。

2.传输步骤

1.发送UART从数据总线并行接收数据

2.发送UART将起始位、奇偶校验位和停止位添加到数据帧。

3.整个数据包从发送UART串行发送到接收UART。接收UART以预先配置的波特率对数据线进行采样。

4.接收UART丢弃数据帧中的起始位、奇偶校验位和停止位:

5.接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线:

3.UART优缺点

优点:

1.仅使用两根线

2.异步通信,无需时钟信号

3.具有奇偶校验位以允许进行错误检查、

4.只要双方都设置好数据包的结构

缺点:

1.数据帧的大小最大为9位

2.不支持多个从属系统或多个系统

3.每个UART的波特率必须在彼此的10%之内

三.I2C通信

半双工通信,它结合了SPI和UART的优点,可以将多个从机连接到单个主机(如SPI),也可以多个主机控制一个或多个从机。

接线:

SDA–数据线

SCL–时钟线

串行通信协议,需要时钟同步信号并且由主机控制。

1.工作原理

I2C的数据传输是以多个msg的形式进行。每个msg包括:从机二进制地址帧、以及一个或者多个数据帧、开始条件和停止条件,读/写位和数据帧之间的ACK/NACK位:

*

启动条件

当SCL为高电平时,SDA从高电平向低电平切换

停止条件

当SCL是高电平时,SDA由低电平向高电平切换

地址帧

每个从属设备唯一的7位或10位序列,用于主从设备之间的地址识别。

读/写位

一位,如果主机是向从机发送数据则为低电平,请求数据则为高电平

ACK/NACK

消息中的每个帧后均有一个ACK/NACK位。如果成功接收到地址帧或数据帧,接收设备会返回一个ACK位用于表示确认。

寻址

不同于SPI的片选线,它是寻址确认从机设备。

主机将要通信的从机地址发送给每个从机,然后每个从机将其与自己的地址进行匹配比较,如果匹配,他就向主机发送一个低电平ACK位。不匹配不执行操作,SDA保持高电平。

读/写位

位于地址帧的末尾。如果主机要向从机发送数据,则为低电平。如果是主机向从机发送请求数据,则为高电平。

数据帧

当主机检测到从机的ACK位后,就可以发送一个数据帧了。数据帧始终为8位,每个数据帧后紧跟一个ACK/NACK,未验证接收状态。发送完数据发送停止条件。

传输步骤

1.在SCL线为高电平时,主机通过将SDA线从高电平切换到低电平来启动总线通信。

2.主机向总线发送要与之通信的从机的7位或10位地址,以及读/写位

3.每个从机将主机发送的地址与其自己的地址进行比较。如果地址匹配,则从机通过将SDA线拉低一位返回一个ACK位。如果主机的地址与从机的地址不匹配,则从机将SDA线拉高。

4.主机发送或接收数据帧;

5.传输完每个数据帧后,接收设备将另一个ACK位返回给发送方,以确认已成功接收到该帧;

6.随后主机将SCL切换为高电平,然后再将SDA切换为高电平,从而向从机发送停止条件。

I2C优点

1.仅仅使用两根线

2.支持多个主机和从机

3.硬件比UART更简单

I2C缺点

1.数据传输比SPI慢

2.数据帧大小限制为8位

总结

在不同的时候可以选择使用不同的通信方式去完成一个项目,或者在使用一些传感器的时候,他就是特定的通信方式,所以这些通信方式都要去了解去学习和实现的。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【嵌入式物联网常用的通信协议UART、RS
接口IIC
UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-W...
大话SPI通信--基础巩固篇
SPI、I2C、UART(即串口)三种串行总线详解
超全!UART、SPI、I2C通信协议入门教程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服