干货分享 | 详解TSMaster CAN 与 CANFD 的 CRC&E2E 校验方法

面对切换工具链的用户来说,在 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 设置为普通信号,使得这两个信号只受小程序的控制)。

### CAN 总线仿真概述 CAN(Controller Area Network)总线是一种广泛应用于汽车电子和工业控制中的串行通信协议。为了验证 ECU 的功能以及测试网络性能,通常会采用 CAN 总线仿真技术来模拟真实的通信环境。 #### 工具支持 一种常见的工具是 TSmaster,它提供了强大的 CAN 总线仿真能力。如果选择了特定的选项并启用了自动启动剩余总线仿真,则会在系统初始化时立即激活 CAN RBS(Remaining Bus Simulation),从而使得虚拟环境中可以观察到实际的数据流[^1]。 另一种解决方案来自国内自主研发的产品——天目全数字实时仿真软件 SkyEye。该平台不仅实现了硬件行为级别的精确复制,还特别适用于构建完整的车载网络拓扑结构,包括但不限于 CAN 协议栈及其交互过程演示[^2]。 此外,在某些开源项目或者商业产品中也可能发现类似的组件实现方式,比如通过定义 `CanMessageModel.datasource` 来加载预设的消息列表作为输入源之一参整个系统的联合调试阶段[^3]。 以下是几种典型的 CAN 总线仿真方法: --- ### 方法一:利用专用软件进行静态配置 此方案主要依赖于成熟的第三方应用程序完成基本参数设定工作之后再运行相应的算法逻辑处理单元即可达到预期效果。例如设置波特率、过滤器模式等基础属性值以便后续操作更加便捷高效。 ```python import can bus = can.interface.Bus(bustype='socketcan', channel='vcan0', bitrate=500000) msg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4], is_extended_id=False) try: bus.send(msg) except Exception as e: print(f"Message failed to send: {e}") finally: bus.shutdown() ``` 以上代码片段展示了如何借助 Python 库创建一个简单的发送消息实例,并指定其 ID 号码以及其他必要字段内容。 --- ### 方法二:动态调整模型参数 对于更复杂的场景需求而言,可能还需要考虑加入更多灵活性因素进去才行。比如说允许用户自定义修改部分核心变量数值范围之类的功能特性设计思路就显得尤为重要起来啦! 假设我们正在开发一款名为 **CanQueen** 的新型框架程序包的话,那么它的内部架构应该像下面这样子组织起来比较好一些哦~ ```csharp public class CanMessageModel { public string DatasourcePath { get; set; } private List<byte[]> messages; } // Example usage within the application layer. var modelInstance = new CanMessageModel(); modelInstance.DatasourcePath = @"C:\path\to\datafile.csv"; ``` 这里简单介绍了关于类成员属性声明方面的基础知识要点说明文档参考资料链接地址如下所示. --- ### 方法三:集成多领域协同作业流程 最后值得一提的是现代工程实践中往往涉及到跨学科团队合作共同解决问题的情况发生频率越来越高了呢~因此建议大家尝试探索一下是否存在其他可行途径可供选择使用哟! 例如结合 MATLAB/Simulink 平台上的 Stateflow 功能模块来进行状态转移图绘制分析研究探讨交流分享经验心得感悟体会收获满满吧朋友们😊 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TOSUN同星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值