CheckSum位求和校验算法

2023-05-16

1.Checksum定义


通过将用CAN ID和数据字段计算的值添加到发送数据帧的数据字段中,接收ECU监测接收数据帧的有效性。

  a. Checksum shall be stored to 4 bits (bit 3 to bit 0) of the data field last byte. 
  
  b.  The checksum calculation method shall conform to the following. (Refer to Figure 3.2.) - Checksum that the sum total of all data (excluding checksum) of ID and data field by nibble becomes 0. - All additions for each nibble shall be unsigned calculation. If the calculation result exceeds the nibble, the lower 4 bits shall be used in the next calculation. - The ID of the base format (11 bit ID) shall be calculated as 3 nibbles, where the 12th bit of the ID is virtually expanded to '1' for making 12 bits. - The ID of the extended format (29 bit ID) shall be calculated as 8 nibbles, where the 30th, 31st, and 32nd bits of the ID are virtually expanded to '1' for making 32 bits.
  
  c.  When receiving a checksum added data frame, checksum of the received data frame shall be calculated with the method same as the time of transmission (refer to HFCAN_0158), and if the added value and the calculation result are different, it shall be judged as abnormal. NOTE:According to usage of the data frame signal, it shall be acceptable that the reception ECU does not monitor checksum. Whether or not to monitor and processing when judged as abnormal shall conform to Option sheet.
  
  d. The data frame to which checksum is added shall conform to Option sheet.

在这里插入图片描述

2.需要校验的数据


把需要校验数据的每4个bit相加

a)首先计算 Message ID 的字节(扩展帧4个字节,标准帧2个字节),先高字节后低字节。
b)其次计算在总线上发送的需要保护的信号/信号组, 比如DLC长度为8的Msg,需要计算第一个byte到第7个byte的CRC8, 第8个byte的高4个bit, 根据CAN矩阵的Msg的信号分布,如图1

@[TOC](3.checksum 算法)—基于CANOE的CAPL脚本

byte Calc_checksum(message * msg)
{
int i;
byte sum = 0x00;
byte checksum = 0x00;

if (isExtId(msg.id)) {

//扩展帧4个字节中的1~29bit的每4个Bit相加,同时加上0x0E (第30,31,32个bit置1)

sum = 0x0E;
sum += (msg.id >> 28) & 0x01;
sum += (msg.id >> 24) & 0x0F;
sum += (msg.id >> 20) & 0x0F;
sum += (msg.id >> 16) & 0x0F;
sum += (msg.id >> 12) & 0x0F;
sum += (msg.id >>  8) & 0x0F;
sum += (msg.id >>  4) & 0x0F;
sum += msg.id & 0x0F;

} else {
//标准帧4个字节中的1~11bit的每4个Bit相加,同时加上0x08 (第12个bit置1)

sum = 0x08;
sum += (msg.id >>  8) & 0x0F;
sum += (msg.id >>  4) & 0x0F;
sum += msg.id & 0x0F;

}

for (i = 0; i <= msg.dlc - 2; i++)
{
// DLC长度为8的Msg,需要计算第一个byte到第7个byte的CRC, 以及第8个byte的高4位bit;每4个bit相加,从第一个byte的高4bit

sum += (msg.byte(i) >> 4) & 0x0F;
sum += msg.byte(i) & 0x0F;

}
sum += (msg.byte(msg.dlc - 1) >> 4) & 0x0F;
sum = sum & 0x0F;
checksum = (0x10 - sum) & 0x0F;
return checksum;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CheckSum位求和校验算法 的相关文章

  • CheckSum位求和校验算法

    1 Checksum定义 通过将用CAN ID和数据字段计算的值添加到发送数据帧的数据字段中 xff0c 接收ECU监测接收数据帧的有效性 a Checksum shall be stored to 4 bits bit 3 to bit
  • 检查 CRC 多项式的错误检测能力

    我试图找出如何计算任意 CRC 多项式的错误检测能力 我知道有多种错误检测功能可能 或可能不适用于 任意多项式 检测单个比特错误 所有 CRC 都可以执行此操作 因为这只需要 CRC 宽度 gt 1 突发错误检测 所有 CRC 都可以检测大
  • 使用 Apache FtpClient 计算 FTP 服务器中的文件校验和

    我正在使用 Apache Commons Net 的 FtpClient 将视频上传到 FTP 服务器 为了检查文件是否确实已成功传输 我想计算远程文件的校验和 但不幸的是我发现没有相关的API可以使用 我的问题是 ftp服务器是否需要计算
  • 计算校验和时出现问题:将 int 转换为signed int32

    我需要将以下 c 代码 计算文件的校验和 转换为 python 我已经用python编写了相应的代码 但结果与c版本不匹配 问题在于 只要发生溢出 Python 就会自动将 int 提升为 long 这会导致错误的校验和 知道如何克服这个问
  • 检查两个图像文件是否相同..校验和或哈希值?

    我正在做一些图像处理代码 其中我从 URL 下载一些图像 如 BufferedImage 并将其传递到图像处理器 我想避免将同一图像多次传递给图像处理器 因为图像处理操作的成本很高 图像的 URL 端点 如果它们是相同的图像 可能会有所不同
  • 如何计算IEEE 802.11 CRC-32 FCS?

    这是来自 IEEE Std 802 11 2012 第 8 2 4 8 FCS 字段 我无法理解最后两段 除法的初始余数预设为全部 是什么意思 为什么我们需要这样做 计算字段和 FCS 的串行输入位 是什么意思 将 CRC 初始化为全 1
  • 32位校验和算法比CRC32质量更好?

    是否有具有以下任一功能的 32 位校验和算法 输入数据大小 碰撞的分布更加均匀 这些与 CRC32 相关 由于 32 位存储空间的限制 我实际上不依赖第一个属性 但第二次 似乎就在那里could予以改进 有任何想法吗 谢谢 我需要具体的实现
  • 确定 .NET 程序集是否是从同一源构建的

    有谁知道如何比较两个 NET 程序集以确定它们是否是从 相同 源文件构建的 我知道有一些差异实用程序可用 例如 Reflector 插件 但我对查看 GUI 中的差异不感兴趣 我只是想要一种自动方法来比较二进制文件集合以查看它们是否是从相同
  • tcp 校验和和 tcp 卸载

    我正在使用原始套接字来创建我自己的套接字 我需要设置 tcp checksum 我尝试了很多参考资料 但都不起作用 我正在使用wireshark进行测试 请问你能帮帮我吗 顺便说一句 我在某处读到如果你设置 tcp checksum 0 然
  • 如何在运行时计算代码的校验和?

    我有一个在计算机上运行的 C NET 应用程序 如何在运行时计算整个代码的校验和 Note 我不想计算正在使用的图像的校验和 而是计算实际的代码部分 我从来没有用过这个 但是 使用反射 您可以导航到获取ILAsByteArray http
  • 为在线商店生成订单号的最佳方法?

    我的在线商店中的每个订单都有一个面向用户的订单号 我想知道生成它们的最佳方法 标准包括 Short 通过电话很容易说出来 例如 m 和 n 是不明确的 Unique 校验和 矫枉过正 有用吗 Edit 不会透露订单总数 客户可能会因为下第三
  • 计算 HDLC 帧的 FCS(CRC)

    我有以下框架 7e 01 00 00 01 00 18 ef 00 00 00 b5 20 c1 05 10 02 71 2e 1a c2 05 10 01 71 00 6e 87 02 00 01 42 71 2e 1a 01 96 27
  • 为 Windows 中的目录生成校验和

    我想为目录创建校验和 我正在遵循对此给出的答案post https stackoverflow com questions 17228202 generate md5 keys and save in a text file 但问题是它正在
  • 在 C# 中计算 Internet(又名 IP、又名 RFC791)校验和

    有趣的是 我可以在除 C 之外的几乎所有语言中找到 Internet 校验和的实现 有人有实现可以分享吗 请记住 互联网协议 http www faqs org rfcs rfc791 html规定 校验和字段是 16 位的 1 的补码 标
  • 校验和值与名为“isRecyclableGarden”的资源不匹配

    因此 我最近开始使用 AWS Lambda 并且从昨天下午开始我就一直在开发机器人 但现在突然发生了这种情况 每当我去构建机器人或保存意图时 我都会不断收到消息 校验和值与名为 isRecyclableGarden 的资源不匹配 isRec
  • 在 C# 中生成运行哈希(或校验和)?

    Preface 我正在执行具有验证提交阶段的数据导入 这个想法是 第一阶段允许从各种来源获取数据 然后在数据库上运行各种插入 更新 验证操作 提交被回滚 但会生成 验证哈希 校验和 提交阶段是相同的 但是 如果 验证哈希 校验和 相同 则将
  • 文件的 CRC 检查

    我正在使用一个小型 FAT16 文件系统 并且想要为存储配置信息的单个 XML 文件生成 CRC 值 如果数据发生更改或损坏 我希望能够检查 CRC 以确定文件仍处于原始状态 问题是 如何将CRC值放入文件中 而不改变文件本身的CRC值 我
  • 同一个 javac 编译器是否可以编译同一组源文件,但生成不同校验和的类文件?

    我试图比较这个结果 在蚂蚁中
  • 您能解释一下 md5 和 modulo 的这些令人不安的异常情况吗?

    好吧 标题确实很主观 但这正是我的问题所在 背景是我想将静态 Web 内容的点击均匀地分布在定义数量的缓存服务器上 此外 向客户端的交付应该会加快 因为多个域正在使用中并且请求不会相互阻塞 我也不需要经典的负载均衡器 而是立即在我的 htm
  • Javascript CRC16 示例代码或实现

    有人可以分享一个链接或示例代码来实现 JavaScript 中字符串的校验和吗 预先非常感谢 你想要什么 你需要更具体 CRC16 算法数量众多 每种算法都有自己的多项式并用于特定用途 一些 CRC16 算法非常适合创建哈希 例如 对于 R

随机推荐