详解UART、USART、SPI、IIC、CAN,以太网等通信协议

详解UART、USART、SPI、IIC、CAN,以太网等通信协议

基本通信知识

通信协议分类

串行和并行

串行通信是指利用一条传输线将数据一位位地顺序传送。

并行通信是指利用多条传输线将一个数据的各位同时传送。

同步和异步

对单方面来说,指两种不同的数据传输方式)

在同步传输中,数据传输是按照定时信号进行的。发送方和接收方都需要遵守同样的时序规则,以确保数据能够正确地传输。发送方按照固定的时间间隔发送数据,接收方则按照相同的时间间隔接收数据。由于同步传输需要一定的时序同步,因此在高速传输和长距离传输时,同步传输具有较好的抗干扰能力和可靠性。(同步就是通信双方按照一定时序规则收发数据,常用于高速、长距离通信

在异步传输中,数据传输没有固定的时间间隔。发送方和接收方可以按照自己的节奏进行数据传输,发送方发送数据时不需要等待接收方的响应。因此,异步传输的速度相对较慢,但可以在低速传输和短距离传输时使用,例如串口通信。(异步就是通信双方想发送就发送,常用于低速短距离通信,如串口通信

全双工和半双工

对双方来说,指通信双方在数据传输时的传输模式)

在全双工通信模式下,通信双方可以同时进行发送和接收数据,彼此之间不会产生干扰。也就是说,通信双方可以同时发送和接收数据,就像两个人同时打电话交流一样,可以在通信中同时传输数据。(全双工就是通信双方都可以发送或接收数据、适用于需要高速、可靠的数据传输场合,如打电话)

在半双工通信模式下,通信双方只能单向地发送和接收数据,不能同时进行。例如,当一方发送数据时,另一方必须等待接收完成后才能发送数据。这种通信方式就像人们交替交谈,每次只有一个人能够说话,而另一个人必须等待。(半双工就是通信双方只能单向发送或接收数据,适用于一些数据传输量较小,对实时性要求不高的场合,如对讲机)。

另外还有单工,单工即数据传输只在一个方向上传输,方向是固定的,不能实现双向通信。比如收音机和广播。

波特率

波特率BR是单位时间传输的数据位数
单位:bps 1bps = 1bit/s。

采用异步串行,互相通信甲乙双方必须具有相同的波特率,否则无法成功地完成数据通信,

而在同步串行中,发送和接收数据是由同步时钟触发发送器和接收器而实现的。

注:同步通信中数据传输的同步时钟频率就是波特率;而在异步通信中,时钟频率可为波特率的整数倍。

注意:关于通信协议,我们通常需要考虑四个点:
1.有无clock
2.一次传多少数据位
3.是否支持同时收发
4.是否需要回复ack

主要的片上通信协议:UART(同步串行)、USART(异步串行)、IIC、SPI、PCI和PCIE等。

还有:CAN、以太网等。

UART

常用于调试、主控或外设

一般是9针插口和USB接口
rx和tx两个信号线

帧格式:
image

USART

USART,即通用同步/异步收发传输器(Universal Synchronous/Asynchronous Receiver/Transmitter),简称串行通信。

它是一种串行通信协议,可以在同步和异步模式下进行数据传输,用于将数据从一个设备传输到另一个设备。它支持全双工和半双工通信模式,并且可以通过中断方式或DMA方式进行数据传输

** 每一帧包含起始信号、数据信息、停止信息、校验信息。**

SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写,顾名思义就是串行外围设备接口。

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。SPI数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。
image

SPI总线只需四条线(如图所示)就可以完成MCU与各种外围器件的通讯:

(1)MOSI – 主(Master)器件数据输出,从(Slave)器件数据输入

(2)MISO – 主(Master)器件数据输入,从(Slave)器件数据输出

(3)SCLK –时钟信号,由主(Master)器件产生

(4)SS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)

SPI是单主设备(single-master)通信协议,这意味着总线中的只有一支中心设备能发起通信。当SPI主设备想读/写从设备时,它首先拉低从设备对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。
image

IIC

IIC 即Inter-Integrated Circuit(集成电路总线)。它是一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

每个连接到总线的设备都有一个独立的地址,主机正是利用该地址对设备进行访问。

与SPI的单主设备不同,IIC是多主设备的总线,IIC没有物理的芯片选择信号线,没有仲裁逻辑电路,只使用两条信号线——serial data(SDA)和serial clock(SCL)。

IIC协议规定:

  1. 每一支IIC设备都有一个唯一的七位设备地址。数据帧大小为8位的字节。数据(帧)中的某些数据位,用于控制通信的开始、停止、方向(读写)和应答机制。

  2. IIC数据传输速率有标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps),另外一些变种实现了低速模式(10kbps)和快速+模式(1Mbps)。

  3. 物理实现上,IIC总线由两根信号线和一根地线组成。两根信号线都是双向传输的,参考图3。IIC协议标准规定发起通信的设备称为主设备,主设备发起一次通信后,其它设备均为从设备。

IIC通信过程大概如下。首先,主设备发一个START信号,这个信号就像对所有其它设备喊:请大家注意!然后其它设备开始监听总线以准备接收数据。接着,主设备发送一个7位设备地址加一位的读写操作的数据帧。当所设备接收数据后,比对地址自己是否目标设备。如果比对不符,设备进入等待状态,等待STOP信号的来临;如果比对相符,设备会发送一个应答信号——ACKNOWLEDGE作回应。

当主设备收到应答后便开始传送或接收数据。数据帧大小为8位,尾随一位的应答信号。主设备发送数据,从设备应答;相反主设备接数据,主设备应答。当数据传送完毕,主设备发送一个STOP信号,向其它设备宣告释放总线,其它设备回到初始状态。

基于IIC总线的物理结构,总线上的START和STOP信号必定是唯一的。另外,IIC总线标准规定:SDA线的数据转换必须在SCL线的低电平期,在SCL线的高电平期,SDA线的上数据是稳定的。

CAN

CAN总线通信是汽车电控领域最典型的通信方式,从上世纪80年代博世发明该通信方式以来,一直占据着汽车通信中的老大位置。

结构:CAN是总线(Bus)通信方式,网络拓扑如下图。总线的意思就是所有节点都连接到同一个传输媒介中,也就是说传输媒介中的电信号会影响到所有的节点。总线通信中一条CAN线上会挂多个节点,所以一般我们会说CAN Bus 或 CAN Network。

image

收发方式:CAN总线为广播式通信,一个节点发送信息会占据所有通信媒介,发送节点只管自己发送,不关心谁去接收,总线上所有通信节点都会收到信息。接收节点则根据自身的情况来决定是否接收信息。这就类似于在会议室里开会,一个人发言所有人都能听见,发言内容与谁相关,谁去关注就OK了。
image

以太网

以太网是交换机式(Switched Network)通信方式,网络拓扑如下图。网络中有终端节点,简单理解为一个节点上只有一个以太网端口;和交换机节点,简单理解为一个节点上有多个以太网端口,其主要作用是转发信息。

结构:交换机式通信指的是所有的终端节点都要通过交换机才能连接到一起,所有传递的信息都需要交换机进行转发。交换机式通信中一条网线上只有两端与两个端口相连,没有分叉。所以一般我们不说以太网总线,而是说以太网网络(Ethernet Network)。
image

收发方式:以太网的交换机式通信,则是点对点的通信方式。发送节点在发送信息前,会首先想好信息要发送给谁,然后会把自己的地址和接收方的地址放到报文里去。节点A需要发送信息给节点B,可以简单理解为交换机内部把端口1和端口2给连起来了,因此信息就从A传到了B。在A和B收发的过程中,C/D/E节点都没有收到信息,他们之间的通信媒介也没受到影响。这就类似于打电话,一个人拨通另一个人的电话号码,就只有这两个人互相通话。那么如果有信息需要从发送节点发给多个节点,相当于召开多方电话会议,怎么办呢?这就有了多播和广播的概念。
image

多播指一对多的信息发送,广播指一对所有的信息发送。如果A节点希望发送信息给多个节点,则需要将自己的地址和多个接收方的地址(是一个提前设置好的多播地址)放到报文里去,此时可以简单理解为交换机把发送方的端口同多个接收方的端口连接起来了,因此信息就从A传到了多个节点。如果A节点希望发送信息给所有节点,则需要将自己的地址和所有接收方的地址(是一个提前设置好的广播地址)放到报文里去,此时可以简单理解为交换机把发送方的端口同所有端口连接起来了,因此信息就从A传到了所有节点。

参考资料:
https://zhuanlan.zhihu.com/p/166103763
https://blog.csdn.net/m0_47334080/article/details/106939302

posted @ 2023-08-10 13:44  我好想睡觉啊  阅读(869)  评论(0编辑  收藏  举报