本文关键字:TSMaster,CAN/CANFD,CRC 校验,E2E 校验
本文目录
1、CRC/E2E 在报文传输过程中的应用
典型应用:两个 CAN 节点(ECU)之间进行 CAN/CANFD 报文传输,双方规定对报文(0xC9:ABSdata)Byte0-Byte6 需要进行 CRC 校验,Byte6 的高四位为 RollingCounter,校验结果放至 Byte7 中。
因此,在 DBC 发送这帧报文的节点来说,在往总线发出这帧报文之前需要对每帧报文的 RollingCounter 值进行不断自增、循环,然后进行 CRC 校验把校验值放进 Byte7 中,最后再把帧报文发到总线上;而对于 DBC 接收这帧报文的节点来说,需要对这帧报文也进行CRC 校验,把校验的结果与 Byte7 的数据进行对比,对比结果一致则这帧报文的数据有效,否则丢弃这些数据。
E2E(End to End),是 Autosar 官方定义的标准,它包含了 CRC 算法、要求了 Counter 的值如何进行递增、并在 Counter 出错时会记录对应的错误状态等等。从发送节点来说,可以简单的理解为发送前填充 Checksum 和 Counter 的值,基本操作与 CRC 相同。
2、基于 TSMaster 剩余总线仿真的 CRC 校验
从这里可以看到 ABS_RC 和 ABS_CheckSum 的信号类型还是普通信号,那么如何通过 0 代码实现 RC 的自增循环以及 CheckSum 校验值的计算呢?具体的实现在总线仿真这个模块中已经实现,用户只需在该界面中进行相关的设置即可实现,以下是详细步骤。
- 1)右击 ABS_RC,选择设置为 Rolling Counter 信号(RC),完成后即可看到该信号类型已经变为 RC。
- 2)右键 ABS_CheckSum,选择设置为 Checksum 校验信号(CRC),随后会弹出默认算法库,这里以选择 crc8 例。完成后该信号的类型已经变为 CRC(crc.crc8[0:7]),表示该信号为 CRC 校验信号,校验算法为 crc 库中的 crc8,保护字节为 0-7:
如果用户需要修改校验的字节范围,同 RC 值范围,在窗口内右键打开编辑 CRC 算法参数;在该窗口内可以对保护字节起始以及保护字节数进行编辑。
3、TSMaster 本地化支持的 CRC 校验
该方法适用于 CRC 校验算法与 crc 库中算法函数接口不同,还需要利用报文帧的其他信息进行校验的情况,例如将报文 ID 一并进行校验计算。这种情况就可以利用 TSMaster 中的小程序来完成,此工程以 C 小程序为例,Python 小程序同理。
演示前将数据库进行加载,在开头提到过,CRC 校验往简单来说就说往报文数据填充 RC 和 CheckSum 校验的值,此时用户就可以在小程序中通过预发送事件来修改 RC 和 CheckSum 的值。