常见通信协议总结

本文深入而全面地概述了嵌入式领域内七种经典串行通信协议:UART、RS232、RS485、I2C、SPI、CAN和I2S。这些协议能够适应不同的应用需求,包括通信速度、传输距离、系统复杂度和成本等多个方面。

一、UART

通用异步收发器(Universal Asynchronous Receiver Transmitter),常见的串行异步通信总线,两条数据线Tx、Rx,实现全双工通信,常用于主机与外设的通信,点对点

UART帧格式:

关键点:

  • 串行、异步
  • 需要双方约定好传输的波特率(因为没有时钟线)
  • 空闲位是高位
  • 不能连续发数据,一次最多发5-8位(防止误差累计,因为没有时钟线)

TX接RX,RX接TX

一般串口监视器里面,设置好这几个参数就行,默认是这样,基本就改改波特率。

二、IIC

串行、半双工。两根线SDA(数据线)、SCL(时钟线
近距离、低速,硬件结构简单,成本低

最大特点:多主机

主机有权发起和结束一次通信,从机只能被主机呼叫。
主线上有多个主机时,IIC具备冲突检测仲裁功能。
每个IIC总线上的器件都有一个唯一的地址(7bit),每个器件可以作为主机也可以作为从机(同一时间只能有一个主机)

I2C通信过程

  1. 主机发送起始信号启用总线(其他主机收到后就知道现在总线被占用)
  2. 主机发送一个字节数据指明从机地址(7bit)和后续字节的传送方向(1bit,0:主到从,1:从到主)
  3. 被寻址的从机发送应答信号回应主机
  4. 发送器发送一个字节数据
  5. 接收器发送应答信号回应发送器 (循环步骤4、5)
  6. 通信完成后主机发送停止信号释放总线

寻址方式(主机给从机发的第一个字节数据):

一次通信时发送器可以发任意多个字节数据给接收器。上面第一个字节数据的最后一位决定了发送器是主机还是从机。

IIC具体通信过程

空闲时SCL和SDA都是高电平

规定每次传一个字节(8bit),先发高位,

发送器发完一个字节后,接收器必须发送1位应答位,所以一帧共有9位。应答位为低电平。

同步信号:
SCL为低电平时,发送器向数据线发一位数据,在此期间数据线上信号允许发送变化。
SCL为高电平时,接收器从数据线读取一位数据,在此期间数据线上信号要稳定。

典型I2C时序

A表示应答,A非表示非应答,S表示起始信号,P表示终止信号

三、SPI

Serial Peripheral Interface(SPI),串行外设接口
高速、全双工、同步
一个主机,若干个从机

至少4根线:
MISO(master in server out)
MOSI(master out server in)
SCLK(时钟)
CS (片选,通过使能它来选中不同的从机,有n个从机,主机就需要n条CS线)

SPI具体通信过程

先发高位 (MSB:most significant bit,LSB:least significant bit)

SPI传完一个字节后,不需要应答!可以直接发下一个字节。
没有起始信号,也没有终止信号!

CLK下降沿发数据,上升沿收数据
或者
CLK上升沿发数据,下降沿收数据
(由极性和相位一起决定)

SPI极性和相位

SPI总线有四种不同的工作模式,取决于极性(CPOL) 和 相位(CPHL) 这两个因素。为了满足不同场合,不同芯片的需求。

CPOL表示SCLK空闲时的状态
CPOL=0,空闲时SCLK为低电平
CPOL=1,空闲时SCLK为高电平

CPHA表示采样时刻
CPHA=0,每个周期的第一个时钟沿采样
CPHA=1,每个周期的第二个时钟沿采样

I2C与SPI异同

相同点

  1. 串行、同步
  2. TTL电平,传输距离不长
  3. 主从方式

不同点:

  1. I2C为半双工,SPI全双工
  2. I2C有应答,SPI无应答
  3. 寻址方式:I2C通过向总线广播从机地址寻址,SPI通过使能不同CS引脚寻址
  4. I2C时钟极性和相位固定,SPI有4种模式

因为SPI无应答、快速寻址等优势,所以SPI速率比I2C快很多,几M到几十Mbps。
I2C一般几百kbps,超高速模式下能5Mbps。

UART的问题

1. 电气接口不统一

UART只是对信号的时序进行了定义,而未定义接口的电气特性;UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异, 高电平和低电平的具体定义不一样,所以不同的处理器使用UART通信时一般不能直接相连。

2. 抗干扰能力差,通信距离短

TTL信号表示0和1,数据传输的时候很容易出错,最多1、2m。
只能用于一个电路板上两个不同芯片之间的通信。

四、RS232

用于串行通讯的标准。
依赖UART串口协议,在电气层面做处理,统一了标准,能传得更远和更快。编程的话没有任何区别,就是串口通信。

RS232的问题:

  1. 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。
  2. 通信速度较低,易产生共模干扰,抗噪声干扰性较弱,传输距离较短(15m)

五、RS485

与RS232类似,也是个基于串口的标准,但是是半双工
与RS232相比最大特点:远距离(1500m),抗干扰强,速度更快(几百kbps到10 Mbps),允许接收多个收发器(可以组建设备网络)

使用差分信号进行数据传输,有效减少共模干扰,因为外部电磁干扰会同时影响到这两条线,而差分信号的接收方只关心两条线之间的电压差,从而有效抵消了干扰。(通信用双绞线,抗干扰强)
高电平(逻辑1):两线之间电压差为+2v到+6v
低电平(逻辑0):两线之间电压差为-2v到-6v

采用两线制,因为用的差分信号,所以两根线表示一个信号,只能半双工。是不是感觉和I2C很像?只是I2C规定好了主机怎么管理从机,在编程RS485时完全可以仿照I2C的主从逻辑,避免冲突。

一般也还是要在MCU后接一个TTL转485的芯片(单端传差分),比如MAX485

六、CAN

CAN(Controller Area Network,控制器局域网)总线协议是一种高度可靠的、多主机的消息广播系统,广泛用于汽车和工业自动化领域进行设备之间的通信。

汽车中最小的控制模块叫ECU

CAN总线大大促进了ECU之间的高效通讯

CAN像RS485一样采用差分信号通信,双线制(CAN_High,CAN_Low)物理上用双绞线抗干扰强

MCU与外界需要一个TTL转CAN信号的芯片(单端转差分)

CAN总线数据帧

有11位识别码,区分多达2048个设备;
RTR为了区分数据帧或远程请求帧;
控制码有6位,第一位区分标准帧和拓展帧(识别位有29位),第二位是空闲位,接下来4为是DLC,控制数据码的长度,0001表示数据有8位,1000表示数据有64位;
CRC是循环冗余校验码,检测到错误时会自动重传;
CRC界定符为了把后面信息隔开;
后面2位分别是ACK(接收1则发送0)和ACK界定符;
最后7位是结束位;

优先级控制: CAN协议通过识别码实现优先级控制。ID较低的消息具有较高的优先级,能够在网络忙时优先传输。

CAN总线的数据传输速率可根据网络长度和节点数进行调整,一般情况下,速率可以从几kbps到1Mbps不等

位定时

数据在CAN总线上的传输和采样过程涉及到位定时(Bit Timing),这是确保数据准确同步和传输的关键因素。
位定时包括若干部分,如同步段、传播时间段、相位缓冲段1和相位缓冲段2,其中采样点(Sample Point)是位时间内的一个特定点,用于决定何时对传输的位进行采样。

在CAN协议中,数据位的采样通常发生在位时间的某个固定点上,这个点被配置为尽可能靠近位时间结束前,以允许信号在总线上传播并稳定。这意味着数据的采样不直接依赖于时钟信号的上升沿或下降沿,而是依赖于位时间内预先配置的采样点。

由于CAN总线使用非归零(Non-Return to Zero, NRZ)编码,连续的位之间没有自动的同步点(例如,没有时钟信号的显式传输),因此,CAN总线协议通过硬件和位定时配置来确保所有节点在位时间内正确地同步和采样数据。

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值