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通信
    +关注

    关注

    3

    文章

    87

    浏览量

    17628
  • 接收机
    +关注

    关注

    8

    文章

    1122

    浏览量

    52647
  • 二进制
    +关注

    关注

    2

    文章

    708

    浏览量

    41254
  • CRC校验
    +关注

    关注

    0

    文章

    81

    浏览量

    15032
  • 信号传输
    +关注

    关注

    4

    文章

    333

    浏览量

    19811
收藏 人收藏

    评论

    相关推荐

    dsp无线通信电台的通信协议研究

    ,任何通信系统之所以能正常工作离不开通信协议的支持。本文以研制一种通信电台为例,提出了一种适合无线通信
    发表于 02-19 15:27

    CAN通信协议

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

    CRC校验方法通过CAN总线通信来实现

    你了解CAN总线吗?你知道总线中有哪些错误吗?你想了解总线中的错误是如何校验以及错误之间的关系吗?下文为大家揭开它神秘的面纱。数据校验是为保证数据的完整性进行的一种验证操作。
    发表于 09-25 15:41

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

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

    STM32 CAN通信协议

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

    CAN串行通信协议

    CAN简介CAN是ControllerArea Network的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产
    发表于 08-19 08:44

    CAN通信协议简析

    CAN 简介CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便
    发表于 08-19 06:29

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

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

    浅析ModBus通信协议的相关知识

      概 述   Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus
    发表于 05-05 15:51

    CAN_2.0中文_通信协议

    CAN_2.0中文_通信协议
    发表于 03-30 16:51 23次下载

    基于双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>

    CAN总线通信协议

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

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

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

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

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