CAN笔记

一、为什么需要总线

1、人类需要交换信息的时候可以通过语言、文字,机器、电器设备之间需要交流该如何呢?是的需要一门他们能够读懂的语言,那就是通信协议,这也是在最早的汽车上都是使用了大量的线束,后来慢慢的通过各类的总线进行信息的交换。

2、人类的交流手段:文字、语言、动作 -> 视频、书信

3、ECU的交流手段:线束、电平 -> 各类总线(CAN、LIN、Ethernet、MOST等等)

二、什么是CAN总线

CAN全称Controller Area Network;是二十世纪八十年代初德国Bosch(博世)公司为解决现代汽车中众多电控单元(ECU)之间的数据交换而开发的一种串行通信协议。

三、为什么是CAN总线

1、人类需要交换信息的时候可以通过语言、文字,机器、电器设备之间需要交流该如何呢?是的需要一门他们能够读懂的语言,那就是通信协议,这也是在最早的汽车上都是使用了大量的线束,后来慢慢的通过各类的总线进行信息的交换。
2、人类的交流手段:文字、语言、动作 -> 视频、书信
3、ECU的交流手段:线束、电平 -> 各类总线(CAN、LIN、Ethernet、MOST等等)
低廉的价格(相较于硬线布置节省了无法估计的成本)+ 技术可复用性

四、当前的车用总线

    1、CAN 
    泛指经典CAN和CANFD协议,是当前车上使用最多的协议。

    2、LIN
    主要用在车窗、车门、灯光等时效性要求不是特别高的功能上,主打的就是一个便宜。

    3、FlexRay 
    弥补CAN带宽不足的问题(是CAN带宽的20倍),主要用在车身控制、动力总成、辅助驾驶的领域。

    4、MOST
    Media、Oriented、System、Transport(媒体、定向、系统、传输),这也是MOST总线名称的由来。MOST传输协议由分割成帧的数据块组成,每一帧包含流数据、分组数据和控制数据。

五、CAN和CANFD区别

1、保留位
经典CAN帧中的保留为在CANFD中变成了区别经典CAN和CANFD的标识位;

    0:显性值,表示经典CAN

    1:隐性值,表示CANFD(在使用CAPL组CANFD包时,一般需要将FDF和BRS同时为1,因为CANFD一般来说不会将数据段速率设置与起始段和控制段一致,那样就没必要使用CANFD了,直接使用经典CAN更好,当然我们不排除特殊情况)

2、FDF-FD格式
该位的新名称是FDF (Flexible Data Rate Format,FD格式),它为传输更大的有效载荷创造了可能。实际的数据场长度以及是否切换为更快传输速率取决于FDF位的后面部分。

六、高速传输机制

1、位速率切换 (Bit Rate Switch)
CAN FD的保留位之后接位速率切换 (BRS) 位,控制数据段的速率与控制段的差异:

    0:数据段与控制段速率一样

    1:数据段与控制段速率不同,数据段一般使用更高的速率。

    因此CANFD中,我们一般都会配置2个波特率,一个用于控制段和校验段的速率,一个用于数据段的速率,分开进行使用。

2、波特率5MBit/s
假如波特率2定义为5 Mbit/s(数据段速率为5Mbit/s),相当于5 Mbit/s,位及其物理表示形式(即电压电平)的持续时间相同。该数值并不是凭空得出的,因为经实验室的实验证明,经典CAN所用的大多数收发器也能够处理5 Mbit/s的速率。如果收发器性能允许,还可支持更高的传输速率。真实情况下,具体的传输速率取决于实际车辆所处的复杂电磁环境影响。
3、BRS和CRC界定符之间采用更高的波特率
从波特率1到波特率2的转换发生在BRS的采样点,从波特率2回到波特率1的转换发生在应答位之前的CRC界定符的采样点,为了使接收方即使在传输速率很高的情况下也可以与发送方完美同步,需要立即执行第二次硬同步。

七、CANFD数据场

1、经典CAN中DLC:9种可能的长度
无论是在经典CAN还是在CANFD中,数据长度段位置(DLC)均由4个位构成,共有16种可能存在的值,不过经典CAN仅使用了其中的值0 - 8,9 - 15未使用;即经典CAN的长度最大为8 byte,最小为0 byte。
2、CANFD中DLC:16种可能的长度
上面说了,经典CAN中使用数据长度值0 - 8,而DLC中其余的7个值9 - 15未使用,这时候聪明的朋友会发现CANFD最大为64byte的长度数据,而且CANFD又是兼容经典CAN的,因此就出现了在数据长度小于等于8 byte的时候,就是DLC的实际长度0 - 8;当数据长度大于8的时候,字节和DLC将不再是线性对应了,使用CANFD中专用的对应关系,

八、指示位错误

1、错误状态指示位 (Error State Indicator)
错误状态指示位(ESI)在位速率切换 (BRS)位之后。

    0:ESI显性,ECU处于主动错误状态

    1:ESI隐性,ECU处于被动错误状态

    该位以更加清晰的方式跟踪错误帧,并使网络管理更加简化。网络节点的主动错误和被动错误状态会在整个网络上广播。

九、安全性校验

1、更多的数据就需要更长的DLC
对比经典CAN来说,一帧CANFD报文中所使用的位将远远大于它,并且在数据段传输速率一般也会更快,显然这样也就导致出现错误的可能性也会增加;为了解决这个问题,就需要在CANFD报文帧中增加校验位的冗余,否则接收方无法鉴定数据是否出现错误。因此在数据场数据不超过16 byte的CANFD报文就由17个CRC校验位来保护,当数据超过16 byte,则需要CRC校验位增加到21个位。它们分别是CRC17(0x3685B)和CRC21(0x302899).

2、CRC校验机制
a、CAN的位填充
经典CAN报文中,从帧起始(SOF)一直到校验场末尾(CRC)都有可能添加填充位,规则就是每5个相同的位之后插入一个相反的位,这些位不计入校验CRC场中。
b、CAN FD的位填充
而在CAN FD中,从帧起始 (SOF) 到数据场末尾添加填充位。在计算校验场时,会将这些填充位也考虑进去。填充位计数器 (对7取模)和奇偶校验位在中紧接在数据场后。
c、CAN FD CRC场中的其他位填充
并且在CANFD中,CRC场本身也会加入填充位,并且频率相较于其他数据段会更高;规则是:

  1. CRC场始终以与前面的位相反的填充位开头。在接下来的每四个位 (无论是否相同)之后,插入与前一位相反的填充位。
  2. 在CRC之后,不再插入填充位,这一点与经典CAN中相同,
posted @ 2023-05-28 15:32  西故黄鹤楼  阅读(107)  评论(0编辑  收藏  举报