整车中通过CAN总线向各ECU控制器传输信号,实际上CAN报文信号在汽车CAN总线网络中传输会出现衰减,也会受外界环境因素影响,比如电磁干扰,CAN总线网络遭到黑客入侵或攻击等现象,这些都可能导致接收端接收到的信号与发送端发出的信号不一致,因此就需要应用一些校验机制来确保CAN报文数据的完整性、真实性和可靠性。
常见的数据校验和保护机制有:Checksum、Rolling counter校验、CRC(循环冗余校验)、E2E(End_to_End);这些都是为了确保数据传输的完整性和正确性而设计的机制。各自又有不同的应用场景和功能特点,Checksum提供基本的校验功能,CRC提供更高级的错误检测和校正能力,E2E则是一种更广泛的数据保护机制,涉及从发送方到接收方的端对端保护。
一、Checksum(校验和)——是一种简单高效的数据校验方式
其原理是发送端先通过规定的计算方法得到一个Checksum值,再作为一个信号添加到CAN报文的数据段,发送出去;接收端接收到该报文后,先使用相同的计算方法重新计算出一个Checksum值,然后与接收到的Checksum值进行比较。如果结果一致就说明接收数据正确,否则就认为数据有错误。
注意:它是对数据段的内容进行计算,计算结果仍然放置在数据段,一般在数据段的第一个字节或者最后一个字节;只能对数据的完整性进行校验,提供最基本的错误检测。
项目中遇到的Checksum计算方式:CRC8, 16, 32;(Byte1+Byte2+Byte3……+Byte23)XOR(0xFF)
二、CRC(循环冗余校验)——是一种复杂强大的数据校验方法
其原理是发送端根据模2除法的原理计算出校验码,再把得到的校验码附在要发送的数据后面组成一帧新的数据,发送给接收端后,接收端根据生成的校验码的规则重新计算校验码,若相同则说明正确的数据被接收,若不同则说明接收到的数据有错误。
注意:它是对所有字段进行计算,针对CAN报文的帧起始、仲裁段、控制段和数据段采用相应的CRC校验算法,计算结果放置在CAN报文的CRC段;能够提供更高级的错误检测和校正能力。
项目中遇到的CRC计算方式:模_2除法,CRC1, 15, 17和21;CRC-8,16。
推荐一个CRC计算网址:CRC(循环冗余校验)在线计算_ip33.com
三、Rolling counter(滚动计数器)——是一个简单有效的递增计数器
其原理是通过计数器在给定的范围内循环递增,若Rolling counter定义是4bit,那么计算器的值会在0~15之间循环;发送端每发送一帧数据,计数器都会自动加1,保证每一次传输的数据都有一个唯一的标志,如果达到最大值,则下一次值从0值重新开始,以此循环。若出现计数器不连续或者首尾值衔接不对,接收方会判断丢帧同时会报报文丢失或超时故障码。这种机制可以检测数据传输中的错误,例如丢帧或漏帧现象。
注意:Rolling counter也是位于CAN报文数据段,就是说发送方发送的报文信息中也包含报文计数的当前累加值;在实际项目中Checksum和Rolling Counter是结合使用的,可以实现对CAN总线网络数据的精确校验和顺序监测。Checksum确保CAN报文数据内容未被破坏,而Rolling Counter则确保数据帧的连续性和有序性,两者相辅相成,这样既保证了数据的正确性,也检测了数据的完整性与顺序性,这对于汽车这样对通讯网络实时性和安全性要求极高的系统至关重要。
四、E2E——是一种端对端的数据保护机制
其原理是提供五种保护机制以保证数据安全,CRC[算法]、Sequence Counter[0~15参与数据传输]、Alive Counter[0~15参与数据传输]、Data ID[一般2byte,是定义的特殊字段,用于报文Checksum计算中的一部分,但并不作为总线上报文传输数据,类似密钥定义在通讯矩阵中]、Timeout detection[通过counter来评估报文丢失、延迟],在项目实际运用过程中,经常看到profile01、profile02等,每种profile是提供了不同的保护策略满足保护机制的标准化和灵活性要求。
E2E需求规范中对通信失效类型进行分类,这些安全信息包括一个或多个数据元素数据类型,构成信号组,用于保证在ECU之间进行安全相关功能交互的机制。
五、E2E和CRC的区别
CRC:仅仅是一个校验算法
E2E:是Autosar(汽车开放系统架构)官方定义的标准,规定汽车部件之间通讯保护需求需要采用安全的数据传输机制;其中通信错误不仅包含了CRC算法、要求了Counter的值如何进行递增、并在Counter出错时会记录对应的错误状态等软件错误,还会导致通信失效原因可能是随机硬件错误、辐射和电磁干扰的系统故障错误(详解:ISO26262标准)。