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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3588平台编译zlog 日志模块

下载zlog之后 解压 进入zlog目录 新建一个build_rk3588.sh脚本 内容如下 make CCaarch64-linux-gcc PREFIX./install_rk3588 将工具链导入环境变量 export PATH/home/QMCY/RK3588/arm64tools/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/:$PATH 编译无问题 产生的…

【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示

📝个人主页:哈__ 期待您的关注 目录 一、🔥今日内容 二、🌏前端页面的改造 2.1新增电子书管理页面 2.2新增路由规则 2.3修改the-header代码 三、🚗SpringBoot后端Ebook模块改造 3.1增加电子书增/改接口 3.1.…

基于SpringBoot+Vue租房网站设计和实现(源码+LW+部署文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

基于全志T507-H的Igh EtherCAT主站案例分享

基于全志T507-H的Linux-RT IgH EtherCAT主站演示 下文主要介绍基于全志T507-H(硬件平台:创龙科技TLT507-EVM评估板)案例,按照创龙科技提供的案例用户手册进行操作得出测试结果。 本次演示的开发环境: Windows开发环…

【二进制部署k8s-1.29.4】九、cilium1.15.4安装

文章目录 简介 一.安装helm和cilium 客户端命令二.安装cilium2.1.安装cilium对于系统内核的版本的要求2.2.安装的命令及参数如下:参数注释: 三.确认cilium的安装状态四.访问cilium的监控页面hubble-ui 简介 本章节主要讲解k8s集群网络插件cni的安装&…

react-native运行程序 出现 Application XXX is waiting for the debugger

1.重启adb: adb kill-server、 adb start-server. 2、确定USB调试模式是否开启,如果已经开启了,关闭了重新打开一下 3.选择调试模式并关闭等待调试程序

STM32(十):SPI (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中USART通信协议来串口通信,并向XCOM串口助手发送信息。这篇文章我们来介绍一下如何用STM32单片机中SPI接口来实现LED的闪亮并玩转WS2812B灯带。 一、实验原理 串行通信之前的博客里有所介绍,可以查看以下…

故障预警 vs 故障分类:哪个更有意义,哪个更具挑战性?

故障预警 vs 故障分类:哪个更有意义,哪个更具挑战性? 在现代工业系统中,风力发电机、制造设备等关键装置的可靠性和稳定性对生产效率至关重要。为此,故障预警和故障分类成为保障设备正常运行的重要手段。那么&#xf…

UI案例——登陆系统

UI的登陆界面实例 在学习了UILabel,UIButton,UIView,UITextField的内容之后,我们就可以写一个简单的登陆界面 我们可以通过UILabel来编写我们显示在登陆界面上的文字比方说下面这两行字就是通过UILabel去实现的。 下面给出一下实现…

每日5题Day17 - LeetCode 81 - 85

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:81. 搜索旋转排序数组 II - 力扣(LeetCode) class Solution {public boolean search(int[] nums, int target) {int n nums.length;if (n…

【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)

一、安装软件 Navicat,SQLyog 这些软件都不错,不过都需要收费,当然也有破解版。下面用 MySQL Workbench,它是官方提供的工具。 二、使用操作 这个软件本质是一个客户端,现在要让数据库能够远程登录。不过一般不会远程…

Love-Yi情侣网站3.0存在SQL注入漏洞

目录 1. 前言 2. 网站简介 3. 寻找特征点 3.1 第一次尝试 3.2 第二次尝试 4.资产搜索 5.漏洞复现 5.1 寻找漏洞点 5.2 进行进一步测试 5.2.1 手动测试 1.寻找字段 2.寻找回显位 3.查询当前用户 5.2.2 sqlmap去跑 6.总结 1. 前言 朋友说自己建了一个情侣网站,看到…

Golang省市二级联动实现 从数据收集、清洗到数据存储

1.背景: 最近在写项目,在项目中有一个需求是获取用户的地理位置,一开始是打算让前端使用JSON包的形式去实现,但是考虑到后期可能需要对省市的数据做一些修改和控制操作,所以改为后端实现,并向后台暴露一套…

密码加密及验证

目录 为什么需要加密? 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密? 在MySQL数据库中,我们常常需要对用户密码、身份证号、手机号码等敏感信息进…

【数据结构】树与二叉树——树的基本概念

树的基本概念 导读一、树的定义二、树的基本术语2.1 结点之间的关系2.2 基本概念2.3 度为m的树与m叉树 三、树的性质结语 导读 大家好,很高兴又和大家见面啦!!! 从今天开始,我们将进入第五章的内容——树与二叉树的学…

微服务:Rabbitmq的WorkQueue模型的使用、默认消费方式(消息队列中间件)

文章目录 WorkQueue模型控制预取消息个数 WorkQueue模型 当然,一个队列,可以由多个消费者去监听。 来实现一下. 生产者: Testpublic void testWorkQueue() throws InterruptedException {// 队列名称String queueName "simple.queue…

NoSQL实战(MongoDB搭建主从复制)

什么是复制集? MongoDB复制是将数据同步到多个服务器的过程; 复制集提供了数据的冗余备份并提高了数据的可用性,通常可以保证数据的安全性; 复制集还允许您从硬件故障和服务中断中恢复数据。 保障数据的安全性 数据高可用性 (2…

Leecode---技巧---只出现一次的数字 / 多数元素

题解&#xff1a; 利用异或运算 a⊕a 0 的性质&#xff0c;可用来消除所有出现了两次的元素&#xff0c;最后剩余的即为所得。 class Solution { public:int singleNumber(vector<int>& nums){// 初始化为0int ans 0;for(int x: nums){// 异或操作ans ^ x;}retur…

关于Openstack删除卷出错的有效解决方案

关于Openstack删除卷时显示卷出错的解决方案 今天删除卷的时候突然发现 删除卷出错 但是还好解决方式还算简单 下面将简洁的写下我的解决方案 当在 Web界面 删除卷时 可能会出现上面的错误 这是因为服务器&#xff0c;出现BUG&#xff0c;卷被附加给了NONE&#xff0c;并且无…

HarmonyOS NEXT星河版之自定义List下拉刷新与加载更多

文章目录 一、加载更多二、下拉刷新三、小结 一、加载更多 借助List的onReachEnd方法&#xff0c;实现加载更多功能&#xff0c;效果如下&#xff1a; Component export struct HPList {// 数据源Prop dataSource: object[] []// 加载更多是否ingState isLoadingMore: bool…