通信协议与接口知识参考文章:
【通信理论知识】数据传送的方式:串/并行;传输方向:单工、半/全双工;传输方式:同步/异步
【串口通信详解】USART/UART、RS232、RS485标准接口与协议特点解析
【同步串行通信接口】IIC(Inter-Integrated Circuit)通信总线协议详解
【通信总线协议】SPI串行外设接口通信详解
【CAN总线协议】CAN通信入门总览:常见协议优劣、CAN应用、协议组成与标准、传输原理的实现、仲裁机制、传输与时序初探
进阶:
【通信模块】简单玩转WiFi模块(ESP32、ESP8266)
【通信模块】WiFi&Bluetooth简介与对比
【通信模块】LoRa与LoRaWAN简介
【通信协议】硬件通信协议速率对比
总体概述
本文档主要讲述:常见协议优劣、CAN应用、协议组成与标准、传输原理的实现、仲裁机制、传输与时序初探
基本概念
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在北美和西欧,CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。
通讯方式
UART:(Universal Asynchronous Receiver Transmitter:通用异步收发器/异步串行通信口),是一种通用的串行数据总线,用于异步通信,支持全双工。它包括了RS232、RS499、RS423、RS422,RS232等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。
IIC总线协议:I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
SPI总线协议:SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。
RS232接口缺陷:
(1)接口的信号电平值较高( +/-12V),易损坏接口电路的芯片。
(2)传输速率较低,在异步传输时,波特率0为20Kbps。
(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱
(4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。
RS485是对RS232的改进,特点包括:
①接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2 ~ 6)V表示,逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片。
②传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输速度可达100Kbps。
③抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
④传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以 达到128个或者256个节点,最大的可以支持到400个节点。
同步即在同一个时钟驱动下数据通信,半双工即接受与发送不能同时进行
CAN总线 通信系统是串行通信的一种,要优于RS485总线,是目前比较常用的一种工业总线,如汽车的电气部分就采用CAN总线实现通信, 异步半双工通讯;
CAN汽车工业应用
汽车的电子控制单元逐渐增多。各电控单元之间的信号交换导致汽车线束的级数增加,复杂粗大的线束与汽车有限的布线空间之间矛盾越来越突出,繁多的线束导致电气系统可靠性下降,同时增加了重量。
CAN总线将汽车内部各电控单元之间连接成一个局域网络,实现了信息的共享,大大减少了汽车的线束,如下面的示意图:
比如上图中,每个部分的多个器件都挂载在CAN总线上(一个CAN总线上的所有器件通讯速率必须相同),各个部分再汇集到网关,由网关分配实现各个不同速率的部分之间通讯,实现对汽车整体电控部分的检测与控制。
数据通信的稳定性和正确性要求极高,因为设备的工作环境既有振荡、高温、辐射等各种不定因素。CAN通信还有许多优秀的特点,比如多主控制、故障封闭功能等,非常适用于工控领域方面。
CAN的协议及组成
CAN控制器+CAN收发器
ISO标准化
ISO11898标准: 125Kbps~1Mbps的高速通信标准(闭环)
IS011519-2标准: 125Kbps以下的低速通信标准(开环)
CAN的组成两种方式
-
CPU与CAN控制器集成到一起、再外接CAN收发器
- STM32中就是采用第一种方式,将CAN接口集成在芯片内,使用的时候再外接CAN收发器,常用的有TJA1050或者82C250
-
CPU与CAN控制器分开的,使用的时候需要配置CAN接口电路
- CAN收发器是用于TTL电平与差分电压信号相互转换的,TTL电平即单片机引脚直接提供的电平,逻辑0代表低电平,逻辑1代表高电平;而差分电压信号则为固定的电压值
CAN的通讯过程
以ISO11898 标准的高速、短距离闭环网络为例,总线最大长度为 40m,通信速度最高为 1Mbps
在 CAN 总线的起止端有一个 120Ω的终端电阻,是用来来做阻抗匹配,以减少回波反射
数据传输原理实现
CAN_High + CAN_Low
- CAN_High - CAN_Low < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1",即高电平。
- CAN_High - CAN_Low > 0.9V 时候为显性的,逻辑信号表现为"逻辑0",即低电平。
发送数据
没有数据发送或者发送数据0时,两条线的电平一样都为2.5V,两条线的电压差小于0.5V;
当发送数据1时,CAN_High电压升高,CAN_Low电压降低,两条线电压差大于0.9V时,认为数据为逻辑0;
差分信号
差分信号稳定性更好;因为即使环境问题导致电压发送变化,CAN_H|L会发送同等变化,两者做差即可抵消。
优先级特性
隐性、显性之间存在天然的优先级特性**显性(逻辑0)的优先级比隐性(逻辑1)高;**该优先级的特性,可以用来进行多主机的仲裁;
CAN的收发器 ☆☆☆☆☆
CAN_Rx和CAN_Tx分别是从MCU中接出来的引脚,比如MCU要发送一个逻辑1,则只要将CAN_Tx设置为1,经过CAN收发器转换,CAN_High和CAN_Low 线上的电压均为 2.5v,即传到总线的电压差 Vh-Vl=0V,总线上的状态则就是逻辑1
当CAN_High和CAN_Low 读取到 CAN总线电压分别3.5V和1.5V,即压差为2V,经过收发器转换,MCU则可通过CAN_Rx读取到信号0
通信的整个过程
对数据或操作命令进行打包
/* 通过一个节点的MCU向总线上那么多节点中的某个节点进行发送信息;
一个节点因此知道某个信息是发给自己的或者不是发给自己; */
空闲状态
-
先规定空闲状态,空闲状态就是指没有节点正在传输数据的时候;
-
连续11位隐性电平(两根线电压差小于0.5V),表示总线就处于空闲状态。
-
对于任一节点,只要监听到总线上连续出现11位隐性电平,那么该节点就会认为总线当前处于空闲状态
开始数据传输
发送数据前
节点都会监听总线的状态,如果总线状态为空闲时,它就会立即向总线上发送自己的数据包;
数据包
包括数据,还有本身的ID信息或者其他的控制指令,应称为数据包(数据帧),也叫做报文;
当报文被传输到其它节点时,只要这些节点按格式去解读,就能还原出原始数据。
/* 在原始数据段的前面加上传输起始标签、片选(识别)标签、控制标签,
在数据的尾段加上 CRC 校验标签、应签和传输结束标签。
类似这样的数据包就被称为 CAN 的数据帧。
为了更有效地控制通讯,CAN 一共规定了 5的帧,帧也称为报文。 */
CAN数据帧
-
以一个显性位(逻辑 0)开始,以 7 个连续的隐性位(逻辑 1)结束;
-
在它们之间,分为仲裁段、控制段、数据段、CRC 段和 ACK 段,以标准数据帧为例:
比如总线上有3个节点,节点1设置ID为000101 00010,节点2验收滤波ID表中有节点1的ID号,而节点3中的验收滤波ID表中没有节点1的ID号,节点1向节点2发送1字节的信息。
报文信息:0 000101 00010 0 0 0 0001 0101 1000 XXXXXXXXXXXXXXX 1 1 1 1111111
通过总线发送时,在ID信息发送阶段,只有节点2才能收到总线上的数据,因为节点3的验收滤波ID表中没有节点1的ID号
在报文发送到ACK槽时,会等待并回读节点2的反馈,从节点2的角度看,此时总线为空闲状态,当验证CRC正确,则向总线发送显性电平,接着当节点1回读到显性电平,才会继续发送剩下的EOF
仲裁机制
运用到线与机制和回读机制:节点1和节点2同时向节点3发送数据
判定先后(0多即胜)
采用非破坏性位仲裁机制,即对各个消息的标识符(即ID号)进行逐位仲裁(比较);
若某节点发送的消息仲裁获胜,则将获取总线发送权,仲裁失败节点则立即停止发送并转变为监听(接收)状态;
0多即胜
- 仲裁的过程由硬件实现
- 仲裁段 = 报文 ID + RTR + IDE + SRR
可以理解为一种回读和线与机制,即显性能够将隐性覆盖;
将自己要比较的位与总线上的状态相与,只有线与的结果与本身一致时,仲裁才能够通过;
显性的优先级高于隐性,即仲裁比较的就是哪个ID中的0多,0最多的那个就可以获得发送权,比如 000000 00010 就比 000000 00011 的优先级要高,仲裁的过程由硬件实现;
仲裁段 = 报文 ID + RTR + IDE + SRR (在拓展模式中,下文价绍),当ID全都一样时,会继续比较接下来的几位。
验收滤波
其实在报文发送上去的过程,采用的是广播的方式;
在节点1和节点2总裁的同时,总线上所有的节点都能够监听到它们的ID号;
同时进行验收滤波,只有监听到的ID号存在ID表中,该节点才会选择继续监听后面的报文;
位时序
-
CAN 使用位同步的方式来确保通讯时序,对总线的电平进行正确的采样;
-
位速率:发送单元在非同步的情况下发送的每秒钟的位数;
-
CAN总线通讯协议每个数据帧可看作一连串电平信号,每个电平信号代表一位(一个字节8位的位)
-
一位又分为4段, 同步段(SS)、传播时间段(PTS)、相位缓冲段 1(PBS1)、相位缓冲段 2(PBS2)
数据传输举例
…
以上只是CAN入门的入门!!!
后续协议(帧、填充、时序)知识跟着瑞萨科技CAN 入门书学习
学完后面可以根据江科大进行三个can的通信
后面再接触CANon可以尝试做一个小项目
参考链接:
http://t.csdnimg.cn/pgVV7
http://t.csdnimg.cn/WkHiF
个人学习笔记,如有侵权,联系删除,转载请标明出处;