面对切换工具链的用户来说,在 TSMaster 上完成总线通讯中的 CRC/E2E 校验处理不是特别熟悉,该文章可以协助客户快速使用 TSMaster 完成 CAN/CAN FD 总线通讯的 CRC/E2E 校验。
本文关键字:TSMaster,CAN/CANFD,CRC 校验,E2E 校验
目录
Catalog
1. CRC/E2E 在报文传输过程中的应用
2. 基于 TSMaster 剩余总线仿真的 CRC 校验
3. TSMaster 本地化支持的 CRC 校验
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 校验
基于剩余总线仿真的 CRC 校验,该方法在 TSMaster 仿真-CAN 总线仿真中即可完成,无需代码,但是 CRC 校验算法是通用的 CRC 算法,例如 CRC8、CRC16、CRC32 等等。使用之前需要先在工程中加载数据库文件并绑定对应的应用程序通道。
其次,打开 CAN 总线仿真,激活报文的所有信号及其所在节点和网络(此处以 0xC9 ABSdata 为例):
从这里可以看到 ABS_RC 和 ABS_CheckSum 的信号类型还是普通信号,那么如何通过 0 代码实现 RC 的自增循环以及 CheckSum 校验值的计算呢?具体的实现在总线仿真这个模块中已经实现,用户只需在该界面中进行相关的设置即可实现,以下是详细步骤。
1)右击 ABS_RC,选择设置为 Rolling Counter 信号(RC),完成后即可看到该信号类型已经变为 RC。
RC 值自增的范围在该模块中也是可以直接设置,在 CAN 总线仿真树状图窗口内任意位置右键打开编辑 RC 值范围,然后勾选该信号,对 RC 的最大最小值进行手动输入,确认即可保存。
2)右键 ABS_CheckSum,选择设置为 Checksum 校验信号(CRC),随后会弹出默认算法库,这里以选择 crc8 例。完成后该信号的类型已经变为 CRC(crc.crc8[0:7]),表示该信号为 CRC 校验信号,校验算法为 crc 库中的 crc8,保护字节为 0-7:
如果用户需要修改校验的字节范围,同 RC 值范围,在窗口内右键打开编辑 CRC 算法参数;在该窗口内可以对保护字节起始以及保护字节数进行编辑。
同时该窗口可以对所有的 CRC 信号进行统一的编辑,双击信号所在的 CRC 算法栏即可打开算法选择窗口,如果用户的算法不是标准的 CRC 算法,我们也可以在 crc 这个库中再去添加自定义函数,这样也能给这个剩余总线仿真这个模块识别使用,需要注意的前提条件是自定义算法的接口必须和已存在的相同,也就是函数的参数必须是(pu8 data, s32 datalen),这样才能够正常使用。
另外一种使用场景,需要在校验的数据内容头部/尾部增加固定的字节数据,这一点不难发现在 CRC 算法参数编辑窗口也有做了接口处理,用户可以直接在该框内添加数据,多个数据可以用英文符号(,)隔开。
以上就是基于总线仿真 CRC 校验的配置操作过程,完成后运行总线仿真即可在报文信息窗口看到发出的报文。
3.TSMaster 本地化支持的 CRC 校验
该方法适用于 CRC 校验算法与 crc 库中算法函数接口不同,还需要利用报文帧的其他信息进行校验的情况,例如将报文 ID 一并进行校验计算。这种情况就可以利用 TSMaster 中的小程序来完成,此工程以 C 小程序为例,Python 小程序同理。
演示前将数据库进行加载,在开头提到过,CRC 校验往简单来说就说往报文数据填充 RC 和 CheckSum 校验的值,此时用户就可以在小程序中通过预发送事件来修改 RC 和 CheckSum 的值。
完成编辑内容后需要运行小程序,然后在报文发送窗口进行报文发送或者启动 CAN 剩余总线仿真(此时需要将 RC 和 CheckSum 设置为普通信号,使得这两个信号只受小程序的控制)。