通信串口协议介绍

以下内容根据学习总线过程中浏览的相关博主博文内容汇总而来。

总线是两个模块之间通信的线路,协议是双方遵循的规则,总线协议就是两个模块在通信线路上传输信息需要遵守的规则,双方按照协议来收发信息。

1.总表

总线接口串/并同步/异步速率工作方式用线总线拓扑结构信距离
I2C同步半双工2线SDA、SCL总线型(特殊的树形)
SPI同步全双工3线或4线SCLK、SIMO、SOMI、SS(片选)环形
UART异步慢波特率设置全双工2线Rx、TxRS485支持总线式、星形、树形远最远1200m
CAN异步20Kbps-1Mbps半双工2或1没有主从之分

1.1同步通信与异步通信

同步总线:指互联的部件或设备均通过统一的时钟进行同步,即所有的互联的部件或设备都必须使用同一个时钟(同步时钟),在规定的时钟节拍内进行规定的总线操作,来完成部件或设备之间的信息交换。

异步总线:指没有统一的时钟而依靠各部件或设备内部定时操作,所有部件或设备是以信号握手的方式进行,即发送设备和接受设备互用请求(request)和确认(acknowledgement)信号来协调动作,总线操作时序不是固定的。因此,异步总线能兼容多种不同的设备,而且不必担心时钟变形或同步问题使得总线长度不受限制。

串行与并行通信

1.串行通信指计算机与I/O设备之间数据传输的各位按顺序依次一位接一位进行传送。通常数据在一根数据线或一对差分线上传输。

2.并行通信是指计算机与I/O口设备间通过多条传输线交换数据,数据的各位同时进行传送。

3.串行通信传输速度慢,但使用传输设备成本低,适合于远程通信;并行通信的速度快,但传输设备成本高,适合于近距离通信。

串行通信数据传送方向

1.单工:是指数据传输仅能沿一个方向,不能实现反向传输。

2.半双工:是指数据传输可以沿两个方向,但需要分时进行传输。

3.全双工:是指数据可以同时进行双向传输。

2. 通信协议介绍

2.1 IIC

I2C(IIC,Inter-Integrated Circuit),两线式同步串行总线。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。其总线通过上拉电阻与电源相连接。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上,IIC是半双工通信方式。每个接到I2C总线上的器件都有唯一的地址。其中,主动发起操作的一方为主机Master,另外一方为从机SLAVE。

2.1.1 IIC通信协议

(1)空闲状态
I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。

(2)起始信号与停止信号
起始信号:当SCL为高期间,SDA由高到低的跳变。
停止信号:当SCL为高期间,SDA由低到高的跳变。

(3)应答信号ACK
应答ASK:是一个低电平信号。
非应答NASK:是一个高电平信号,也许,叫做应答非更合适。
两个信号的明显不同是来源不同。应答信号是当前从器件发出的,而非应答信号是由当前主器件发出,再者方向是相反的

(4)数据有效性
数据在SCL的上升沿到来之前就需准备好,并在在下降沿到来之前必须稳定。也就是要求数据在SCL高电平期间保持稳定。
在这里插入图片描述
传输方式:开始信号+7位设备地址+R/W+ASK+8bit数据+ASK+8bit数据+NASK+停止信号

数据传输开始时,需要发送一个起始信号;每8bit数据传输结束,都需要一个ACK。数据传输结束后,需要发送一个终止信号;起止信号都有Master发出,而ACK则可能由Master或者SLAVE来发出。

2.2 SPI

SPI(Serial Peripheral Interface)就是串行外围设备接口,是一种同步串行总线,由一个主设备和一个或多个从设备组成。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,4根线:

MISO:该引脚用于在SPI模块配置为从器件时将数据传输出SPI模块,并在配置为主器件时接收数据。

MOSI:该引脚用于在SPI模块配置为主器件时将数据传输出SPI模块,并在配置为从器件时接收数据。

SCLK:该引脚用于输出SPI传输数据或接收时钟的时钟。

SS:该引脚用于将选择信号从SPI模块输出到另一个外设,当配置为主机时,将其作为数据传输进行,当SPI配置为从机时,它用作接收从机选择信号的输入。

四条信号线:分别为 SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),SS(片选)。

片选:单片机学科词汇,可以理解成选片。多种芯片挂在同一总线上(像电脑里很多外设都是挂在总线上),但我们有时候需要对其中特定的某个芯片进行数据、地址或命令的独立传输,此时,我们需要有一个信号来告诉挂在总线上的芯片们,这些数据、地址是传给哪个芯片的。那这样的话,其他芯片就会对这些信号“漠不关心”,而目标芯片就知道这些数据是传给自己的从而做出反应。这个信号就叫做 片选信号 CS(chip select)或SS(slave select)。片选这个词即由此而来,指通过设置 跳线 ,利用与门、或门、非门的组合来决定到底是哪几部分进入工作状态。

2.2.1 SPI通信协议

(1)SPI总线可以实现多SPI设备互相连接。提供时钟的SPI设备为主设备(Master),其他设备为从设备(Slave)。SCLK信号线只由主设备控制,从设备不能控制信号线。

(2)在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机。主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。

(3)主从设备间可以实现全双工通信,收发独立,操作简单,数据传输速率较高,但需要占用主机较多的口线(每个从机都需要一根片选线),而且只支持单个主机,没有指定的流控制,没有应答机制确认是否接收到数据。

(4)普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。

在这里插入图片描述
杠cs表示片选信号

由于主从设备无应答机制,并且主设备通过控制sck时钟线来完成传输数据,所以只有当时钟跳变时,才传输数据。

2.3 UART

UART(Universal Asynchronous Receiver and Transmitter)通用异步收发器, 是一种通用串行数据总线,用于异步通信。该总线是一种低速的,全双工,双向通信总线。

2.3.1 UART通信协议

在这里插入图片描述
(1)起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。

(2)数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。

(3)奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

(4)停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

(5)空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

(6)波特率:数据传输的速率。有以下几个档位:300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200。在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。

2.4 CAN

CAN(Controller Area Network)控制器局域网总线,是一种用于实时应用的串行通讯协议总线。

2.4.1 工作原理

1.CAN总线没有主从节点之分,所有CAN总线上的节点都是地位等价的。当CAN总线上的一个节点发送数据时,它以报文的形式广播给网络中的而所有节点;这样对于每个节点来说,无论数据是否发给自己,都对其进行接收。

2.CAN总线每组报文开头的11位字符为标识符,定义了报文的优先级;在同一个总线中,标识符是唯一的,不可能有两个节点发送具有相同标识符的报文。当然接收节点也会根据标识符来判断是否接收这帧信息,一般称这项技术为报文滤波技术。

3.CAN总线接收节点可以通过远程数据请求发送远程帧请求发送节点发送相应的数据,回应节点传送的数据帧与请求数据的远程帧具有相同的标识符。

4.CAN总线的优先权由发送数据报文中的标识符决定报文占用总线的优先权;标识符越小,优先权越高。

5.CAN总线的仲裁机制:只要总线空闲,任何节点都可以向总线发送报文。如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。通过使用标识符逐位仲裁可以解决这个碰撞问题。而且当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。

6.目前CAN总线通信协议仅仅包括OSI七层互联参考模型中的数据链路层和物理层。

2.4.2 CAN通信协议

显性与隐性电平的解释:

CAN的数据总线有两条,一条是红色的CAN_High,一条是黑色的CAN_Low。当没有数据发送时,两条线的电平一样都为2.5V,称为静电平,也就是隐性电平。当有信号发送时,CAN_High的电平升高1V,即3.5V,CAN_Low的电平降低1V,即1.5V。

在这里插入图片描述
按照定义的:

CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。

CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。

2.4.3 数据传输

CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。

数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B)
在这里插入图片描述

帧起始

由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始;

帧结束

由7个隐形位(高电平)组成。

在这里插入图片描述

仲裁段

只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN使用了标识符的逐位仲裁方法可以解决这个问题。

CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。

在这里插入图片描述
帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。
在这里插入图片描述

控制段

控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成如图17所示。
在这里插入图片描述

数据段

一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合。

在这里插入图片描述
数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。

CRC段

CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成。
在这里插入图片描述

ACK段

当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

离离离谱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值