UART、SPI、I2C、CAN、RS485、RS232、RS422通信协议总结

一、并行和串行

1.并行通讯:同一时刻,可以传输多个bit位的信号,有多少个信号位就需要多少根信号线。

并行通讯的效率高,但是对信号线路要求也很高,一般应用于快速设备之间采用并行通信,譬如CPU 与存储设备、存储器与存储器、主机与打印机等都采用并行通讯。

2.串行通讯:同一时刻,只能传输一个bit位的信号,只需要一根信号线。

串行通讯效率较低,但是对信号线路要求低,抗干扰能力强,同时成本也相对较低,一般用于与计算机与外部设备,或者长距离的数据传输。

二、异步和同步

  1. 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。收发双方时钟同步。
  2. 异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。收发双方时钟不同步。
  3. 同步通信与异步通信区别:
  1. 同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
  2. 同步通信效率高;异步通信效率较低。
  3. 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
  4. 同步通信可用于点对多点;异步通信只适用于点对点。

三、全双工和半双工

  1. 全双工通信:称为双向同时通信,即通信的双方可以同时发送和接收信息的信息交互方式。
  2. 半双工通信:指数据可以沿两个方向传送,但同一时刻一个半双工总线结构信道只允许单方向传送,因此又被称为双向交替通信。
  3. 单工通信:是指消息只能单方向传输的工作方式,只能有一个方向的通信而没有反方向的交互。

四、UART协议

1.UART简介

通用异步收发器,是一种通用的串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收在嵌入式系统中常用于主机与辅助设备之间的通信。

2.UART接口

TXD:发送数据;RXD:接收数据;CTS:清除发送、允许发送;RTS:请求发送。

RTS/CTS协议即请求发送/允许发送协议,相当于一种握手协议,主要用来解决"隐藏终端"问题。"隐藏终端"是指,基站A向基站B发送信息,基站C未侦测到A也向B发送,故A和C同时将信号发送至B,引起信号冲突,最终导致发送至B的信号都丢失了。"隐藏终端"多发生在大型单元中(一般在室外环境),这将带来效率损失,并且需要错误恢复机制。当需要传送大容量文件时,尤其需要杜绝“隐藏终端”现象的发生。IEEE802.11提供了如下解决方案。在参数配置中,若使用RTS/CTS协议,同时设置传送上限字节数,一旦待传送的数据大于此上限值时,即启动RTS/CTS握手协议:首先,A向B发送RTS信号,表明A要向B发送若干数据,B收到RTS后,向所有基站发出CTS信号,表明已准备就绪,A可以发送,其余基站暂时“按兵不动”,然后,A向B发送数据,最后,B接收完数据后,即向所有基站广播ACK确认帧,这样,所有基站又重新可以平等侦听、竞争信道了。

3.UART帧格式

空闲位:数据线在空闲的时候,数据线的状态为高电平;

起始位:表示一次通信的开始;

数据位:串口协议规定,先发低位、后发高位;可以发送5-8位数据;

校验位:校验数据的正确性,若数据位1的个数为偶数,则检验位为1,否则为0;检验位只能发现错误,但不能纠错。

停止位:表示一次通信的结束,数据线的状态为高电平。

五、I2C协议

1.I2C物理层特点

(1)它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。

(2)一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。

(3)每一个连接总线的设备都有一个独立的地址,主机可以通过这个地址进行选择连接总线的设备与之通信。

(4)总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。

(5)多个主机同时使用总线时,为了防止多个设备发送数据冲突,会利用仲裁方式决定由哪个设备占用总线。

(6)具有三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s,快速模式+为1Mbit/s,高速模式下可达3.4Mbit/s,但目前大多I2C设备尚不支持高速模式。

(7)连接到相同总线的 IC 数量受到总线的最大电容 400pF限制。

2.字节格式

SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB),SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。

3. 7-bit寻址数据传输

常见的传输方向及格式有如下两种:

(1)主机写数据——从机接收,传输方向不变

要进行数据写入从机,首先主机发送START条件+从机地址+R/W=0(写操作,设置为0),从机读取到该地址后回应ACK,主机将继续发送需要操作的寄存器地址,从机继续回应ACK,表示从机准备完毕。之后主机发送寄存器的数据(可能是1byte也可能是多个byte),每个byte从机都会回应ACK,发送完成后,主机发送STOP命令,将总线释放,完成写操作。如下图示意:

(2)主机读数据-从机发送,传输方向改变

读数据与写数据相似,但读数据会多几个步骤。要想从从机读取数据,首先要知道从机地址以及寄存器地址,这两部需要进行读操作来实现,和写操作一致。读操作完成后,主机发送重复开始+从机地址+R/W=1(读操作,设置为1),从机返回ACK,此时主机释放SDA线转由从机控制,主机读取SDA总线进行数据接收,每发送1 byte数据,主机会响应ACK表示还需要再接收数据。当主机接收完想要的数据后,主机将会返回NACK,告诉从机释放SDA总线,随后主机发送STOP命令,将总线释放,完成读操作。如下图示意:

4.SCL同步和SDA仲裁

SCL线的同步(时钟同步)

SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理。

SDA仲裁

SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线。

六、SPI协议

1.SPI简介

SPI是串行外设接口,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。

SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。

MISO:主设备数据输入,从设备数据输出;

MOSI:主设备数据输出,从设备数据输入;

SCLK:时钟信号,由主设备产生;

CS/SS:从设备使能信号,由主设备控制,一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。     一主设备一从设备模式

SPI主设备和从设备都有一个串行移位寄存器,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输。

  1. SPI数据通信的流程
  1. 主设备发起信号,将CS/SS拉低,启动通信。
  2. 主设备通过发送时钟信号,来告诉从设备进行写数据或者读数据操作(采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低)),它将立即读取数据线上的信号,这样就得到了一位数据(1bit)。
  3. 主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(缓存长度不一定,看单片机配置),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
  4. 从机(Slave)也将自己的串行移位寄存器(缓存长度不一定,看单片机配置)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

  1. SPI时钟特点

主要包括:时钟速率、时钟极性和时钟相位三方面。

时钟速率

SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。从理论上讲,只要实际可行,时钟速率就可以是你想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。

时钟极性

根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。

CKP可以配置为1或0。可以根据需要将时钟的默认状态(IDLE)设置为高或低。极性反转可以通过简单的逻辑逆变器实现

CKP = 0:时钟空闲IDLE为低电平 0;

CKP = 1:时钟空闲IDLE为高电平1。

时钟相位

根据硬件制造商的不同,时钟相位通常写为CKE或CPHA。顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;

CKE = 0:在时钟信号SCK的第一个跳变沿采样;

CKE = 1:在时钟信号SCK的第二个跳变沿采样。

4.SPI四种MODE

根据SPI的时钟极性和时钟相位特性可以设置4种不同的SPI通信操作模式,它们的区别是定义了在时钟脉冲的哪条边沿转换输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低),详情如下所示:

Mode0:CKP=0,CKE =0:当空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。

Mode1:CKP=0,CKE=1:当空闲态时,SCK处于低电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

Mode2:CKP=1,CKE=0:当空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

Mode3:CKP=1,CKE=1:当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

5.SPI优缺点

优点:

无起始位和停止位,因此数据位可以连续传输而不会被中断;

没有像I2C这样复杂的从设备寻址系统;

数据传输速率比I2C更高(几乎快两倍);

分离的MISO和MOSI信号线,因此可以同时发送和接收数据;

极其灵活的数据传输,不限于8位,它可以是任意大小的字;

非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

缺点:

使用四根信号线(I2C和UART使用两根信号线);

无法确认是否已成功接收数据(I2C拥有此功能);

没有任何形式的错误检查,如UART中的奇偶校验位;

只允许一个主设备;

没有硬件从机应答信号(主机可能在不知情的情况下无处发送);

没有定义硬件级别的错误检查协议;

与RS-232和CAN总线相比,只能支持非常短的距离。

  • CAN协议

1.CAN简介

CAN总线简称——控制器局域网络,是一种串行的差分总线,并且这种差分总线只传递数据信息。CAN总线已经是国际上的一种通信标准(ISO11519),它具有高可靠性、良好的错误检测能力、总线仲裁等优良特点,被广泛应用在汽车控制系统、环境恶劣场所、电磁辐射强、干扰性大等场所中。

CAN是一种异步的通信方式,它的通讯不需要时钟进行同步,线路上只有CAN_H、CAN_L两根通信线,数据以差分信号的方式进行传输。

  1. CAN的闭环通信网络

CAN控制器 -- CAN收发器 -- 滤波电路

最高速度可达1Mbps,总线最大长度为40m;总线的两端要求各有一个120欧姆的电阻。

  1. CAN的开环通信网络

最高的通信速度为125Kbps,是一种低速通信的连接方式;最大的通信距离可达1Km;两根总线独立,且要求每根总线上要串联一个2.2K欧姆的电阻。

  1. CAN总线

CAN总线的数据传输使用的是差分信号的方式进行的。这两根线中的信号振幅相等,相位相反,逻辑1 和 逻辑0 通过两根信号线的电压差值表示出来。在CAN的应用中,逻辑1也称为隐性电平,逻辑0也称为显性电平。

CAN总线上,在同一个时刻只能处于隐性电平(逻辑1)或者显性电平(逻辑0)中的一个状态,且显性电平相比隐性电平具有优先权。比如:CAN总线上有两个节点,在同一个时刻,一个输出隐性电平,一个输出显性电平,这个时候总线上是显性电平状态。

  1. CAN 的位同步

在CAN中使用了 “位同步” 的方式来抵抗干扰、吸收误差,实现对总线电平信号的正常采样,确保通讯正常进行。同时,这个位同步也是用于调节通信过程中的采样点的。

CAN实现位同步的过程中,会把每一个数据位的时序进行分解,会分解成SS段、PTS段、PBS1段、PBS2段,这四个段加起来就是一个CAN的数据位长度。分解后的最小时间单位为Tq。它们分别如下:

同步段(SS段):该段的大小固定为1Tq。

当总线上的节点在SS段的范围内检测到总线上信号发生了跳变,就认为该节点与总线的时序是同步的。当节点与总线同步时,在采样点采集到的总线电平即可以确认为该位的电平。

传播时间段(PTS段):该段的大小为 1Tq ~ 8Tq。

这个时间段是用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。

相位缓冲段1(PBS1):该段的大小为 1Tq ~ 8Tq。

主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。

相位缓冲段2(PBS2):该段的大小为 1Tq ~ 8Tq。

是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。

上图是对CAN通信中的逻辑0进行分解的说明示意图。图中就表示每个数据位的长度为19Tq(SS 段占 1Tq,PTS 段占 6Tq,PBS1 段占 5Tq,PBS2 段占 7Tq),信号的采样点位于 PBS1 段与 PBS2 段之间,通过控制各段的长度,可以改变采样点的位置。

  1. CAN的帧种类和用途

CAN总线的数据帧

数据帧一般由 7 个段构成,即:

(1) 帧起始。表示数据帧开始的段。

(2) 仲裁段。表示该帧优先级的段,即ID信息。

(3) 控制段。表示数据的字节数及保留位的段。

(4) 数据段。数据的内容,一帧可发送 0~8 个字节的数据。

(5) CRC 段。检查帧的传输错误的段。

(6) ACK 段。表示确认正常接收的段。

(7) 帧结束。表示数据帧结束的段。

  • RS485,RS422,RS232的接口协议
  1. RS485简介

RS485是通信物理层的标准接口,一种信号传输方式,OSI(开放系统互连)模型的第一级。创建 RS-485 是为了扩展 RS-232 接口的物理功能。RS485采用半双工工作方式。

关键特性:

(1)接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2–6)V表示;逻辑“0”以两线间的电压差为-(2–6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片。

(2)传输速率高。最高传输速率为:10Mbps

(3)抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。

(4)传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。

2.RS232简介

RS232接口被广泛用于计算机串行接口外设连接。连接电缆和机械、电气特性、信号功能及传送过程。

RS232特点:

(1)接口的信号电平值较高,易损坏接口电路的芯片。

(2)传输速率较低,在异步传输时,比特率为20Kbps。

(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱

(4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在15米左右。

  1. RS422简介

RS422标准全称是"平衡电压数字接口电路的电气特性"”,它定义了接口电路的特性。实际上还有一根信号地线,共5根线。由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS422支持点对多的双向通信。

RS422和RS485电路原理基本相同,都是以差动方式发送和接收,不需要数字地线。差动工作是同速率条件下传输距离远的根本原咽,这正是二者与RS232的根本区别,因为RS232是单端输入输出,双工工作时至少需要数字地线。发送线和接受线三条线(异步传输),还可以加其它控制线完成同步等功能。

RS422通过两对双绞线可以全双工工作收发互不影响,而RS485只能半双工工作,发收不能同时进行,但它只需要一对双绞线。

RS422的电气性能与RS485完全一样。主要的区别在于:RS422有4根信号线:两根发送(Y、Z)、两根接收(A B)。由于RS422的收与发是分开的所以可以同时收和发(全双工)﹔RS485有2根信号线:发送和接收。

4.RS485,RS422,RS232的接口协议的区别

(1)RS232是全双工的,RS485是半双工的,RS422是全双工的。

(2)RS485与RS232仅仅是通讯的物理协议(即接口标准)有区别,RS485是差分传输方式,RS232是单端传输方式,但通讯程序没有太多的差别。

(3)PC机上已经配备有RS232,直接使用就行了,若使用RS485通讯,只要在RS232端口上配接一个RS232转RS485的转换头就可以了,不需要修改程序。

(4)RS-232只允许一对一通信(单站能力),RS-485接口在总线上是允许连接多达128个收发器(具有多站能力)。

  • 31
    点赞
  • 390
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于嵌入式开发来说,确实需要熟悉这些接口。 1. UART(通用异步收发传输器):一种串行通信接口,是一种点对点通信协议,常用于连接微控制器和其他外设,如传感器、WiFi模块等。 2. I2C(Inter-Integrated Circuit):一种串行通信接口,是一种多主从设备共享总线的通信协议,常用于连接多个设备,如存储器、传感器、LCD屏幕等。 3. SPI(Serial Peripheral Interface):一种串行通信接口,是一种点对点或多点通信协议,常用于连接微控制器和外设,如Flash存储器、LCD屏幕、数字转换器等。 4. TTL(Transistor-Transistor Logic):一种数字电平标准,常用于数字电路中。 5. RS232(Recommended Standard 232):一种串行通信标准,常用于连接计算机和外设,如调制解调器、串口打印机等。 6. RS422(Recommended Standard 422):一种串行通信标准,常用于长距离通信,如工业自动化中的传感器和执行器之间的通信。 7. RS485(Recommended Standard 485):一种串行通信标准,常用于长距离通信和多点通信,如工业自动化中的多个设备之间的通信。 8. CAN(Controller Area Network):一种串行通信协议,常用于汽车和工业领域中的通信,如车载电子控制系统、工业自动化中的传感器和执行器之间的通信。 9. USB(Universal Serial Bus):一种通用串行总线,常用于连接计算机和外设,如鼠标、键盘、打印机、USB存储器等。 10. SD卡(Secure Digital Card):一种存储卡标准,常用于嵌入式系统中的存储,如摄像头、音频播放器、移动电话等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值