目录
一、CAN
1、CAN简介
Controller Area Network 控制器局域网络,一种串行数据通信协议。CAN是一种异步通
讯,只有CAN_high和CAN_low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
CAN通讯节点由一个CAN控制器及CAN收发器,CAN 控制器用于实现实现CAN总线的协议底层以及数据链路层,用于生成CAN帧并以二进制码流的方式发送,在此过程中进行位填充、添加CRC校验、应答检测等操作;将接收到的二进制码流进行解析并接收,在此过程中进行收发比对、去位填充、执行CRC校验等操作。此外还需要进行冲突判断、错误处理等诸多任务。CAN收发器(有时也叫做驱动器),用于将二进制码流转换为差分信号发送,将差分信号转换为二进制码流接收。
(1)CAN电平
232总线:逻辑0:+3V到+15V;逻辑1:-15V到-3V
485总线:逻辑0:-2V到-6V;逻辑1:+2V到+6V
CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平(逻辑0):CAN_H电压为3.5V、CAN_L为1.5V,压差为2V和 隐性电平(逻辑1):CAN_H和CAN_L电压均为2.5V,电压差为0V。发送方通过使总线电平发生变化,将消息发送给接收方。
在总线上显性电平具有优先权,只要有一个单元(也就是节点)输出显性电平,总线上即为显性电平。而隐性电平则具有包容的含义,只有所有的单元都输出隐性电平,总线上才为隐性电平。那么可以知道,CAN通讯是半双工的,收发数据需要分开来进行,由于是公用总线,在整个网络中,同一时刻只能由一个通讯节点发送信号,其余的节点在该时刻只能接收。
一般STM32内部集成CAN控制器,只需在外部加个CAN收发器
上图右边为闭环总线网络,2端接个120Ω的电阻,最大长度40m,最高速度1Mbps;左边为开环总线网络,每根线串联一个2.2Ω的电阻,最大传输距离1km,最高125kbps。
位于物理层和数据链路层,CAN总线进行端接:一条总线至少2个端接,2端接个120Ω的电阻(消除总线终端处的信号反射、确保总线得到正确的直流电平)
注:*1 LLC : Logical Link Control (逻辑链路控制)
*2 MAC : Medium Access Control (媒介访问控制)
MDI、PMA、PLS
(2)多主方式工作
不分主从,最先访问总线的单元可获得发送权(CSMA/CA 方式,Carrier Sense Multiple Access / Collision Avoidance);废除站地址编码,采用报文标识符;点对点、一点对多点和全局广播;
(3)采用非破坏性总线逐位仲裁技术
根据标识符(Identifier 以下称为 ID)决定优先级,仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
(4)通信速度
在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号。最大10km、1Mbit/s(40m);
(5)其他优点
短帧结构,传输时间短,具有错误检测、错误通知和错误恢复功能,受干扰概率低;CRC检验。节点在错误严重的情况下具有自动退出总线的功能、该消息不包含源地址和目标地址,仅使用标志来指示功能信息和优先级信息、如果传输的信息已损坏,则可以自动重新传输、可根据报文的ID 决定接收或屏蔽该报文
(6)滤波功能
2、物理层——位时序、同步、NRZ
(1)4个段、采样点
由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。
• 同步段(SS)
• 传播时间段(PTS)
• 相位缓冲段1(PBS1
• 相位缓冲段2(PBS2)
由称为 Time Quantum(以下称为Tq)的最小时间单位构成。Tq又由振荡器周期的倍数构成
所谓采样点是读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。
(2)NRZ
CAN 协议的通信方法为NRZ(Non-Return to Zero)方式。各个位的开头或者结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。
(3)硬同步
接收单元在总线空闲状态检测出帧起始时进行的同步调整。
(4)再同步
在接收过程中检测出总线上的电平变化时进行的同步调整。
3、数据链路层
(1)逻辑链路控制子层LLC
• 验收过滤。有一个滤波器查找表,接收报文后,先扫描验收查找表,若匹配则将接收报文放入 接收缓冲,然后将ID索引值放入接收帧状态寄存器中,最后产生接收中断。减少CPU的负担。
• 超载通知。
• 恢复管理。
(2)介质访问控制子层MAC
位填充。当同样的电平持续 5 位时则添加一个位的反型数据。插入补码的原因是重同步的需要
发送单元的工作。在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续5 位,在下一个位(第6 个位)则要插入1 位与前5 位反型的电平。
接收单元的工作。在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续5 位,需要删除下一个位(第6 个位)再接收。如果这个第6 个位的电平与前5 位相同,将被视为错误并发送错误帧。
4、帧的种类
通信是通过以下 5 种类型的帧进行的。
另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11 个位的标识符(Identifier: 以下称ID),扩展格式有29 个位的ID。
(1)数据帧
SOF:1 个位的显性位。
RTR:远程发送请求,用于识别帧是数据帧还是远程帧,上图为一个显性位
IDE:识别扩展位,有一个显性位
CRC:一个隐形位,CRC 界定符
(2)遥控帧(远程帧)
RTR:为隐性位
当带有相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁,这是因为其紧随标识符的RTR位为显性。
(3)错误帧
• 错误标志
主动错误标志:6 个位的显性位。
被动错误标志:6 个位的隐性位。
• 错误界定符
(4)过载帧
• 过载标志。6 个位的显性位。
• 过载界定符。8 个位的隐性位。
(5)帧间隔
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
延迟传送(发送暂时停止)。只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。
5、错误的种类以及处理
错误处理图片:
6、BUS OFF
总线关闭(bus off)是 CAN 节点比较重要的错误处理机制