串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】

(1)I2C

集成电路互连总线接口(Inter IC):同步串行半双工传输总线,连接嵌入式处理器及其外围器件。

支持器件:LCD驱动器、Flash存储器

特点

①有两根传输线(时钟线SCL、双向数据线SDA)、GAN接地。

  ②主从模式:通信双方为主设备(Master)和从设备(Slave),在总线上的每一个设备都可以作为主设备或从设备,但一个总线上一般只有一个主设备和多个从设备。主设备是用来产生允许传输的时钟信号,并初始化总线的数据传输,所以主设备通常是CPU,而从设备只能被动相应主设备发起的通信请求,所以各种I2C接口芯片作为从设备使用。

  ③I2C上每个从设备都有7bit的物理地址(MSB),且该地址是唯一的,固化在芯片上,可以从datasheet中获取。I2C地址中全0为广播地址,所以I2C总线上理论可以有2^7-1个从设备

设计用于低速设备的连接,速度不及SPI,快于串口通信,接线简单

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第1张图片

总体上主设备是先发送地址,再发送或接受数据

iic是同步通信方式,允许不定长度的数据,也就是每一对起始信号和终止信号中间可以传输多个8bit数据。

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第2张图片

主机发送数据流程

1、当总线空闲的时候,主机发送一个起始信号S,代表开始通信
2、主机接着发送一个从机的物理地址7bit和一位读写控制位(0为写、1为读)
3、从机进行地址匹配,匹配成功后发送一个应答信号ACK(低电平为0)
4、主机收到应答信号,接着开始发送第一个字节的数据
5、从机收到数据后返回一个ACK
6、主机收到应答信号后,接着发送下一个字节

7、当主机发送完最后一个字节,并且接收到从机的应答信号时,接着发送一个停止信号P结束通信,并且释放总线
8、从机收到P信号之后也退出和主机之间的通信

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第3张图片

主机接收数据流程

当总线空闲的时候,主机发送一个起始信号S,代表开始通信
主机接着发送一个从机的物理地址7bit和一位读写控制位(0为写、1为读)
从机进行地址匹配,匹配成功后发送一个应答信号ACK Acknowledge低电平为0),接着开始发送第一个字节数据
主机收到数据之后向从机返回一个ACK
从机收到应答信号后,接着发送下一个字节
当主机接收完数据之后,向从机发送一个NAK信号Not Acknowledge,从机收到非应答信号后停止发送数据
主句发送ACK之后,发送一个停止信号结束通信,并释放总线
串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第4张图片

 串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第5张图片

字节格式

SDA数据线上的每个字节必须是8位,对于每次传输的字节数没有限制。每个字节(8位)数据传送完后紧跟着应答信号(ACK,第9位)。数据的先后顺序为:高位在前 。 

 串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第6张图片

 (2)SPI

SPI(Serial Peripheral Interface串行外设接口)。SPI总线是同步、全双工双向4线式串行接口总线。它是由“单个主设备+多个从设备”构成的系统。

SPI是一个同步的数据总线,也就是说它是用单独的数据线一个单独的时钟信号来保证发送端和接收端的完美同步

时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样

4条逻辑线

MISO:Master input slave output 主机输入,从机输出(数据来自从机);

MOSI:Master output slave input 主机输出,从机输入(数据来自主机);

SCLK :Serial Clock 串行时钟信号,由主机产生发送给从机; 

SS:Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号


 

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第7张图片

整体的传输过程

1、主机先将NSS信号拉低,这样保证开始接收数据;

2、当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);

 注:由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度(。

3、主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;

4、主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;

时钟极性和时钟相位

时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;

  • CKP = 0:时钟空闲IDLE为低电平 0
  • CKP = 1:时钟空闲IDLE为高电平1
  • CKE = 0:在时钟信号SCK的第一个跳变沿采样;
  • CKE = 1:在时钟信号SCK的第二个跳变沿采样;

其中黑色线为采样数据的时刻;

蓝色线为SCK时钟信号;

模式编码

SPI的时钟极性和相位的配置通常称为 SPI模式,所有可能的模式都遵循以下约定;具体如下表所示

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第8张图片

 多从机模式

多NSS

 

 菊花链

菊花链的最大缺点是因为是信号串行传输,所以一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了;
另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况;

 优缺点

  • 全双工串行通信;
  • 高速数据传输速率。
  • 简单的软件配置;
  • 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
  • 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)
  • 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
  • 通常仅支持一个主设备;
  • 需要更多的引脚(与I2C不同);
  • 没有定义硬件级别的错误检查协议;
  • 与RS-232和CAN总线相比,只能支持非常短的距离;

(3)UART

UART(Universal Asynchronous Receiver Transmitter:通用异步收发器),是电脑硬件的一部分,它把将要传输的资料在串行通信与并行通信之间加以转换,UART通常被集成于其他通讯接口的连接上。UART即我们通常说的“串口”。该总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第9张图片

 对于发送设备和接收设备来说,两者的串行通信配置应该设置为完全相同

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第10张图片

 UART帧格式串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第11张图片

空闲位:不进行传输数据时,默认为逻辑1,为高电平
起始位:先发出一个逻辑“0”,表示消息帧的开始
数据位:紧接着起始位之后,可由5~8位组成,通常传输8位即一个字节发送数据的位,后发送数据的高位;
奇偶校验位:紧接着数据位后面(可有可无),使得“1”的位数应为偶数(偶校验)或奇数(奇校验),校验数据传输是否正确;
停止位:它是消息传输结束的标志,它可以是1位、1.5位、2位的高电平, 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
波特率:是衡量数据传输速率的指标,表示每秒钟传输的位数。例如设置串口的波特率为9600,则表示是1s传输9600个bit的数据,则传送每个位的时间为 1s / 9600 ≈ 104us,从而区分消息帧中每个位传输的数据;

缺点:UART一般直接使用TTL信号来表示0和1,但TTL信号抗干扰能力较差,数据在传输过程中很容易出错;且TTL信号的通信距离也很短

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第12张图片

UART和USART 

USART(universal synchronous asynchronous receiver and transmitte): 通用同步异步收发器。

USART是指单片机的一个端口模块,可以根据需要配置成同步模式(SPI,I2C),也可以将其配置为异步模式,后者就是UART。所以说UART姑且可以称之为一个与SPI,I2C对等的“协议”,而USART则不是一个协议,而是更应该理解为一个实体。 

U是通用,A是异步,S是同步

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第13张图片

 UART只是对信号的时序进行了定义,而未定义接口的电气特性

(4)RS232

现在工业控制的RS-232接口一般只使用RXD、TXD、GND三条线,且PC机一般采用DB-9连接器;串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第14张图片

 特性:
工作方式:单端(非平衡
节点数:点对点通讯(1收1发)
最大传输距离:50ft ( 50 * 0.3048 = 15.24m
最大传输速率:20kbit/s
连接方式:点对点(全双工)
电气特性:-3V ~ -15V表示逻辑1,3V ~ 15V表示逻辑0
常用芯片有max232、SP232等
缺点:通信距离短,速率低,而且只能点对点通信,无法组建多机通信系统,且容易受外界电气干扰导致信息传输错误

由于单片机接口一般是TTL电平,如果接232电平的外设,就需要加TTL转RS232的模块。如下图,可用芯片MAX232进行转换。

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第15张图片

(5)RS422 

RS-422有4根信号线:两根发送、两根接收和一根地线。全双工通信。

它有一个主设备,其余为从设备,从设备之间不能通信,所以RS-422支持点对多的双向通信

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第16张图片

RS-422标准定义了一种平衡通信接口,改变了RS-232标准的单端通信的方式,总线上使用差分电压进行信号传输。传输速率提高到10Mbit/s,传输距离长达4000ft=1219.2m(速率低于100kbit/s时),而且运行总线上最多连接10个接收器。

特性:
工作方式:差分(平衡)
节点数:点对多通讯(1发10收)
最大传输距离:4000ft ( 4000 * 0.3048 = 1219.2m
最大传输速率:10Mbit/s
连接方式:一点对多点(四线制,全双工
电气特性:2V ~ 6V表示逻辑1,-2V ~ -6V表示逻辑0
缺点:连接的设备少,抗干扰能力不强,无法完全满足工业需求。
常用芯片有max232、SP232等

(6)RS485

RS-485标准运行连接多个收发器,即具有多站能力,增加了多点、双向的通信能力

RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。

采用两线半双工传输,最大速率10Mb/s,电平逻辑是两线的电平差来决定的,提高抗干扰能力,传输距离长(几十米到上千米)。

特性:
工作方式:差分(平衡);
节点数:点对多通讯(1发32收);
最大传输距离:4000ft ( 4000 * 0.3048 = 1219.2m);
最大传输速率:10Mbit/s;
连接方式:多点对多点(两线制,半双工);
电气特性:2V ~ 6V表示逻辑1,-2V ~ -6V表示逻辑0;
常用芯片有max485、SP3072EEN等,以SP3072EEN收发器芯片的典型应用电路如下

 TTL转成RS-485很常见,比如MAX485,参考电路如下

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第17张图片

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第18张图片

 

(7)CAN

CAN(Control Area Network)是控制器局域网络的简称,是一种能够实现分布式实时控制的串行通信网络。CAN总线的功能复杂且智能。主要用于汽车通信。目前是国际上应用最广泛的现场总线之一

CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻。

每一个设备既可做主设备也可做从设备。CAN总线的通信距离可达10千米(速率低于5Kbps),速度可达1Mbps(通信距离小于40M)。

串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第19张图片串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】_第20张图片

 主要特性


1、数据传输距离远(最远10km);

2、数据传输速率高(最高数据传输速率1Mbit/s);

3、具备优秀的仲裁机制

4、使用筛选器实现多地址的数据帧传递;

5、借助遥控帧实现远程数据请求;

6、具备错误检测与处理功能;

7、具备数据自动重发功能;

8、故障节点可自动脱离总线且不影响总线上其它节点的正常工作
 

CAN的通信帧

(1)数据帧


用途:用于发送单元向接收单元传送数据

数据帧由7个段构成
帧起始:表示数据帧和远程帧的起始,他仅由一个“显性电平”位组成。
仲裁段:是表示帧优先级的段标准帧的仲裁段由11bit的标识符ID和RTR(远程发送请求)位组成;扩展帧的仲裁段由29bit的标识符ID、SRR(替代远程请求位)、IDE位和RTR为构成。
控制段:是表示数据的字节数和保留位的段,标准帧与扩展帧的控制段格式不同。
数据段:用于承载数据的内容,它包含0~8B的数据,从MSB(最高有效位)开始输出。
CRC段:是用于检查帧传输是否错误的段,它由15bit的CRC序列和1bit的CRC界定符(用于分隔)构成。
ACK段:是用于确认接收是否正确的段,它由ACK槽和ACK界定符(用于分隔)构成,长度为2bit
帧结束:用于表示数据帧的结束,它由7bit的隐性位构成。

 (2)遥控帧

用于接收单元向具有相同ID的发送单元请求数据

(3)错误帧

用于当检测出错误时向其他单元通知错误

(4)过载帧

用于接收单元通知发送单元其尚未做好接收准备

(5)帧间隔

用于分隔数据帧和遥控帧的帧
帧间隔的构成元素有三个:
一是间隔,它由3bit的隐性位构成。
二是总线空闲,它由隐性电平构成,且无长度限制。只有在总线处于空闲状态下,要发送的单元才开始访问总线。
三是延迟传送,它由8bit的隐性位构成。

你可能感兴趣的:(STM32学习笔记,单片机,嵌入式硬件)