CAN总线学习——物理层、数据链路层、CANopen协议

1、CAN总线介绍

1.1、CAN总线描述

(1)CAN总线支持多节点通信,但是节点不分区主从,也就是不存在一个节点来负责维护总线的通信;这点可以和I2C总线对对比,I2C是一主多从模式;
(2)是差分、异步、串行总线,采用双绞线传输,抗干扰能力强;
(3)总线仲裁机制是非破坏性仲裁;
(4)采用短帧结构,每帧包含有效数据0-64个字节,可达到实时性响应要求;
(5)数据帧具有帧ID,帧ID越小,优先级越高,可进一步满足实时性要求;
(6)CAN总线具有CRC校验功能,数据传输可靠性高;
(7)具有出错自动重传机制;
(8)节点在出错状态下,可自动脱离总线,不影响总线的正常工作;
(9)CAN总线传输距离长,可达10KM(5Kbps以下),通信速率最高就是几兆的速度,距离越长支持通信速率越低;

1.2、CAN总线应用场景

(1)CAN总线突出“实时性”和“抗干扰性”,但是通信速率不高,只有几百KB到几兆,所以适合用在对实时性和抗干扰性要求高,但是通信数据量不大的场景;
(2)CAN总线常用在工业领域和汽车领域;

1.3、4种CAN总线协议

(1)CAN总线分为经典CAN标准帧(CB)、经典CAN扩展帧(CE)、CAN FD标准帧(FB)、CAN FD扩展帧(FE);
(2)标准帧和扩展帧的区别:标准帧的帧ID是11位,扩展帧的帧ID是29位;
(3)CAN FD和经典CAN(CAN2.0)的区别:
a)、每个数据帧中数据长度从经典CAN的8字节扩展到最大64字节;
b)、CAN FD和经典CAN是兼容的;
c)、CAN FD在仲裁端的时钟频率和数据段的时钟频率可以不同;在仲裁段的时钟频率和经典CAN保持一致,在数据段时提高时钟频率,由此可以提高CAN FD的通信速率;
d)、CAN FD的数据帧格式也和经典CAN不一致,这里不详细描述;
总结:CAN FD每帧能传送的数据字节更多,通信速率更快,并且兼容经典CAN;

2、物理层

2.1、CAN总线接口

CAN总线学习——物理层、数据链路层、CANopen协议_第1张图片>CAN总线采用差分信号,对外接口是两根双绞线CANH、CANL;

2.2、CAN总线信号电平

CAN总线学习——物理层、数据链路层、CANopen协议_第2张图片

2.3、CAN总线的终端电阻

CAN总线学习——物理层、数据链路层、CANopen协议_第3张图片>在线束两端添加120欧的电阻,防止信号反射造成通信紊乱;一般高速CAN都会添加这两个电阻;

2.3、CAN总线信号采样点

(1)CAN总线是异步总线,各个节点之间是没有共用的时钟线,所以各个节点间的时钟频率可能不是完全一样,有一定的误差;
(2)如果收发双方的时钟频率不一致,误差累计下来会导致数据解析出错;

2.4、规避波特率误差带来的通信错误

CAN总线学习——物理层、数据链路层、CANopen协议_第4张图片

(1)CAN总线规定在信号的跳变沿时刻进行同步,将累计误差限制在两个跳变沿;
(2)CAN总线上需要发送多个相同位的数据,连续相同的bit位不会产生跳变沿,这样会导致误差累计,所以采用填充位的方式,在连续5个相同位后插入一个相反位,产生跳变沿,用于同步;

2.5、CAN总线仲裁机制

参考博客:《CAN总线竞争与仲裁机制分析》;

3、数据链路层

3.1、数据帧分类

帧类型 功能
数据帧 用于发送节点向接收节点传送数据,是使用最多的帧类型
远程帧 用于接收节点向某个发送节点请求数据,比如A节点发送远程帧,要求B节点回数据
错误帧 用于当节点检测出错误时向其他节点通知错误的帧
过载帧 用于接收节点向发送节点通知自身接收能力的帧
帧间隔 将数据帧或远程帧与前面的帧分离的帧,可以理解成插入一些空白时间段,防止帧粘连导致区分不出两个帧

3.2、数据帧

3.2.1、帧格式

CAN总线学习——物理层、数据链路层、CANopen协议_第5张图片

3.2.2、DLC编码

CAN总线学习——物理层、数据链路层、CANopen协议_第6张图片

DLC段由4个bit组成,DLC表明后面数据域的字节个数;上面是经典CAN的DLC编码对应关系,如果是CAN FD则数据段最多是支持64字节;

4、为什么CAN总线响应速度快?

(1)CAN总线是非破坏性仲裁机制,相对于其他总线,不会在仲裁上花费额外的时间;
(2)CAN总线上的数据帧有帧ID,帧ID越小优先级越高,可以给重要且紧急的数据赋予小的帧ID,这样能保证在CAN总线空闲时,紧急的数据先被发送出去;

5、为什么CAN的数据帧最多包含8个字节(经典CAN)或者64字节(CAN FD)有效数据?

(1)数据帧携带太多的数据会在发送阶段花费较多的时间,如果在数据帧发送阶段时突然来了一帧紧急的数据帧,这时紧急的数据帧就要等待上一帧发送结束才能发送,降低总线的响应。(仲裁只发生在总线空闲时,紧急的数据帧不会打断正在发送的数据帧)
(2)如果数据帧发送时错误需要重发,数据帧携带的有效数据太多,也会导致出错时花费的时间太多,降低总线实时性;

6、CANopen协议

参考系列博客:《虹科分享 | 简单实用的CANopen介绍,看完你就明白了(1)——CANopen基础概念》;

参考资料

(1)B站的视频:https://www.bilibili.com/video/BV1LV4y1j77s/?spm_id_from=444.41.top_right_bar_window_custom_collection.content.click&vd_source=6ae699e4ea314cc5a50ae4f74ad5e566;
(2)朱有鹏的《智能汽车课程》;

你可能感兴趣的:(智能汽车,学习,网络)