- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
目录
- 校验和段(Checksum Feild)
- linGetChecksum函数
- 验证LIN报文校验和正确
校验和段(Checksum Feild)
- 校验和段是一个字节,对帧中所传输的内容进行校验
- 校验和分为标准型校验和(Classic Checksum)及增强型校验和(Enhanced Checksum),如表3.2 所示。
- 校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于256 时就减去255),并将所得最
终的和逐位取反,以该结果作为要发送的校验和。
linGetChecksum函数
测试示例代码如下:
on linFrame *
{write("this.id = 0x%x , linGetChecksum = 0x%x",this.id,linGetChecksum(this));
}
- 测试结果
验证LIN报文校验和正确
- 如下面代码,Calculate_Checksum函数计算校验和,然后和CAPL内置函数linGetChecksum读取的校验和比较
on linFrame *
{byte cal_CheckSum,j;byte get_CheckSum;byte data[8];for(j=0;j<this.dlc;j++){data[j] =this.byte(j);}cal_CheckSum = Calculate_Checksum(this.id,data,this.dlc);get_CheckSum = linGetChecksum(this);if(cal_CheckSum != get_CheckSum){write("error : id = 0x% ,计算的校验和 = 0x%x , 读取的校验和 = 0x%x",this.id,cal_CheckSum,get_CheckSum);}//write("id = 0x%x ,计算的校验和 = 0x%x , 读取的校验和 = 0x%x",this.id,cal_CheckSum,get_CheckSum);
}byte Calculate_Checksum(byte id,byte data[],byte len)
{word sum;byte i;sum = 0;// 通信报文是增强型校验和,包含数据段和PID段//诊断报文是标准型校验和 ,只包含数据段if (id!=0x3C && id!=0x3D) {sum=linGetProtectedID(id);}for(i = 0; i < len; i++){sum +=data[i];if(sum&0xff00){sum&=0x00ff;sum+=1;} } sum=~sum; return (byte)sum;
}
测试结果:
Program / Model id = 0x11 ,计算的校验和 = 0xee , 读取的校验和 = 0xee
Program / Model id = 0x12 ,计算的校验和 = 0x6d , 读取的校验和 = 0x6d
Program / Model id = 0x20 ,计算的校验和 = 0x2e , 读取的校验和 = 0x2e
Program / Model id = 0x21 ,计算的校验和 = 0xec , 读取的校验和 = 0xec
Program / Model id = 0x24 ,计算的校验和 = 0xe9 , 读取的校验和 = 0xe9
Program / Model id = 0x25 ,计算的校验和 = 0x29 , 读取的校验和 = 0x29
Program / Model id = 0x22 ,计算的校验和 = 0xef , 读取的校验和 = 0xef
Program / Model id = 0x23 ,计算的校验和 = 0x92 , 读取的校验和 = 0x92
Program / Model id = 0x30 ,计算的校验和 = 0xf , 读取的校验和 = 0xf
Program / Model id = 0x10 ,计算的校验和 = 0x1b , 读取的校验和 = 0x1b
Program / Model id = 0x11 ,计算的校验和 = 0xee , 读取的校验和 = 0xee
Program / Model id = 0x12 ,计算的校验和 = 0x6d , 读取的校验和 = 0x6d
Program / Model id = 0x20 ,计算的校验和 = 0x2e , 读取的校验和 = 0x2e
Program / Model id = 0x21 ,计算的校验和 = 0xec , 读取的校验和 = 0xec
Program / Model id = 0x24 ,计算的校验和 = 0xe9 , 读取的校验和 = 0xe9
Program / Model id = 0x25 ,计算的校验和 = 0x29 , 读取的校验和 = 0x29
Program / Model id = 0x22 ,计算的校验和 = 0xef , 读取的校验和 = 0xef
Program / Model id = 0x23 ,计算的校验和 = 0x92 , 读取的校验和 = 0x92
Program / Model id = 0x30 ,计算的校验和 = 0xf , 读取的校验和 = 0xf
Program / Model id = 0x10 ,计算的校验和 = 0x1b , 读取的校验和 = 0x1b
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。