0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CAN通信协议里一种checksum校验和的方法

冬至子 来源:知锂 作者:SW十五 2023-10-31 12:58 次阅读

看到了一种checksum校验和的方法,分享给大家。

为什么需要checksum

前段时间分享ISO 11898内容的时候,提到了帧结构里的CRC场。

CAN信号在传输的时候,有可能会因为干扰、攻击之类的原因产生错误,比如发送方要发1,结果传输错误,到接收方那就成0了。为了避免这种比特错误,数据链路层做了CRC(Cyclic Redundancy Check)校验。

但是,CRC并不能检测到所有的差错,有些方式是可以骗过去的,就像黑客攻破防火墙一样。为了尽可能保证数据传输的准确性,我们用的CAN通信里还增加了checksum校验和,checksum在传输层。

当然,checksum起初被发明是因为有些通信的数据链路层没有CRC,新出的一种校验方法。

另外,CRC和checksum只能做到无差错接收,而不是可靠接收。接收方如果发现了比特错误,这帧报文不要了,那必然是少了一帧报文。为了避免这个问题,CAN有重传和确认机制,接收方会发出信号告诉发送方有错误,那发送方将重传该帧报文,接收方收到后回复确认后结束。

checksum举例

我见过几种checksum方式,下面以最近看到的一个为例。仅做分享。

图片

checksum的计算方式

从上图可以看出,这帧报文里Byte 0是checksum的值。checksum是所有字节模256的和的反。这里的所有字节就是Byte 1到Byte 7。

模256就是不考虑大于等于255的进位,只做8位以内的算术加法,即求和的值不会比255(0xFF)更大了。

那怎么做到不比255(0xFF)大呢?求和后超过255的进位(Carry),再去求和(ADD)。这个进位(Carry)是放到LSB(Least Significant Bit,二进制的最低位)去求和的。

模256的和是sum,再对sum取反(inverted),得出checksum。

图片

checksum的计算举例

从图里的例子可以计算,Byte 1(0x4A)+Byte 2(0x55)=0x9F,这里进位是0。

然后0x9F+Byte 3(0x93)=0x132,这个0x132就比0xFF大了,进位是1,那就把进位和该字节的Bit 0~Bit 7再求和。

图片

依次计算,最后求得sum=0x20。再取反,得出checksum=0xDF。

接收方收到数据后,算出Byte 1到Byte 7的sum,再与发送方发出的checksum(Byte 0)相加,得出0xFF就说明该帧报文数据是正确的,可以接收。否则该帧报文弃之不用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN通信
    +关注

    关注

    5

    文章

    93

    浏览量

    17799
  • 接收机
    +关注

    关注

    8

    文章

    1177

    浏览量

    53375
  • 二进制
    +关注

    关注

    2

    文章

    778

    浏览量

    41557
  • CRC校验
    +关注

    关注

    0

    文章

    84

    浏览量

    15174
  • 信号传输
    +关注

    关注

    4

    文章

    404

    浏览量

    20114
收藏 人收藏

    评论

    相关推荐

    CAN总线通信协议的基础知识

    本文将介绍CAN总线通信协议的基础知识,目前的内容仅为通用的协议部分,暂不涉及具体的外设模块的用法。研究通信协议的具体内容,主要是看建立通信
    的头像 发表于 06-16 10:58 6260次阅读
    <b class='flag-5'>CAN</b>总线<b class='flag-5'>通信协议</b>的基础知识

    CAN通信协议

    CAN通信协议,需要的看看。
    发表于 04-19 17:11

    如何去设计一种点对点通信协议PPPoE模块?

    如何去设计一种点对点通信协议PPPoE模块?
    发表于 06-03 07:06

    STM32 CAN通信协议

    CAN 简介CAN 是控制器区域网络(Controller Area Network) 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒
    发表于 08-19 09:31

    一种支持TTL协议设备与CAN协议设备通信的电路

    本实用新型涉及通信电路,尤其是一种支持TTL协议设备与CAN协议设备通信的电路。背景技术:
    发表于 08-23 08:31

    一种高效的串行通信协议的制定及实现

    一种高效的串行通信协议的制定及实现
    发表于 11-09 18:08 56次下载

    基于双CAN总线的数字伺服通信协议

    基于双CAN总线的数字伺服通信协议
    发表于 09-01 14:25 8次下载
    基于双<b class='flag-5'>CAN</b>总线的数字伺服<b class='flag-5'>通信协议</b>

    CAN总线通信协议的分析和实现 CAN总线通信协议以及其实现方法

    CAN总线通信协议的分析和实现 CAN总线通信协议以及其实现方法
    发表于 09-04 08:45 40次下载
    <b class='flag-5'>CAN</b>总线<b class='flag-5'>通信协议</b>的分析和实现 <b class='flag-5'>CAN</b>总线<b class='flag-5'>通信协议</b>以及其实现<b class='flag-5'>方法</b>

    一种轻量级的通信协议 - MAVLink

    一种轻量级的通信协议 - MAVLink
    的头像 发表于 03-12 14:14 4549次阅读
    <b class='flag-5'>一种</b>轻量级的<b class='flag-5'>通信协议</b> -  MAVLink

    CAN总线通信协议

    CAN总线通信协议详细如下。
    发表于 04-19 16:54 77次下载

    CAN入门书之中文版CAN通信协议

    CAN入门书之中文版CAN通信协议
    发表于 11-18 16:36 0次下载

    个简单的基础通信协议的设计与实现

    之间的数据的稳定传输,通信协议的设计需要考虑很多的问题。当然应对不同的应用场景,可以有针对性的设计不同的通信协议一种常见的通信协议格式这是一种
    发表于 12-14 18:38 10次下载
    <b class='flag-5'>一</b>个简单的基础<b class='flag-5'>通信协议</b>的设计与实现

    can总线的通信协议有哪些 CAN接口保护及工作原理

    CAN总线(Controller Area Network)是一种广泛应用于汽车、工业自动化和其他领域的串行通信协议。以下是几种常见的CAN总线通信
    的头像 发表于 08-18 14:40 2.2w次阅读
    <b class='flag-5'>can</b>总线的<b class='flag-5'>通信协议</b>有哪些 <b class='flag-5'>CAN</b>接口保护及工作原理

    CAN通信协议中有哪几种帧类型?CAN通信中帧格式的作用

    CAN通信协议中有四帧类型,分别是数据帧、远程帧、错误帧和过载帧。
    的头像 发表于 01-30 09:18 4930次阅读

    can通信协议主要由什么完成

    CAN(Controller Area Network)是一种基于消息的通信协议,主要用于汽车和工业领域。它是一种局域网技术,允许多个设备在同
    的头像 发表于 06-16 10:29 508次阅读