车辆信号正确性校验——CRC入门(一)

目录

一、简单说校验

二、校验和的简单示例

三、CRC介绍

四、异或和模2除法


一、简单说校验

1.定义

在车载总线中传输数据时,为了保证传输数据的正确性,会通过一些方法来校验数据是否正确,比如在CAN报文中常见的校验和信号(checksum)以及后面会讲到的CRC(循环冗余校验)。

2.没有校验会怎么样?

小红说:“明天一起坐飞机。”

小明回答:“啥?明天去修拖拉机?”

二、校验和的简单示例

1.以基本的CAN报文格式(DLC=8)进行举例:

假设Byte0 为报文的checksum,Byte1~7为报文中包含的数据,如下表

Byte0

Byte1

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

checksum

Data

Data

Data

Data

Data

Data

Data

每个字节的位顺序如下表

bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

校验方式:

计算时按Byte1~7的顺序逐次相加,每当结果超出8bits时,将因为进位出现的1放到bit0的位置。

2.以下选取一段数据实际计算:

数据:0x4A 55 93 E5 11 12 E3,需要按照上述校验方式计算他们的校验和。

过程如下:

0x4A = 0100 1010

0x55 = 0101 0101

————————————

            1001 1111 = 0x9F

0x93 = 1001 0011

————————————

         1 0011 0010 = 0x132

            0011 0011 = 0x33 ——进位出现的1转到bit0的位置

0xE5 = 1110 0101

————————————

         1 0001 1000 = 0x118

            0001 1001 = 0x19 ——进位出现的1转到bit0的位置

0x11 = 0001 0001

————————————

            0010 1010 = 0x2A

0x12 = 0001 0010

————————————

            0011 1100 = 0x3C

0xE3 = 1110 0011

————————————

         1 0001 1111 = 0x11F

            0010 0000 = 0x20 ——进位出现的1转到bit0的位置,然后与原有的1相加进位

0xFF = 1111 1111

————————————

            1101 1111 = 0xDF ——与0xFF异或,得到checksum的值

三、CRC介绍

1.定义

CRC:循环冗余校验。

该方法简单地说就是把要传输的数据看作一个整体,将其当作被除数A,再定义一个除数B,通过A/B得到余数C,这个余数C就是这段数据的校验值。

当然CRC算法中还包括很多参数,此处只是作为一个简单的介绍,便于快速理解CRC。

2.参数名词

主要有几个名词:多项式公式、多项式简记式、数据宽度、初始值与结果异或值、输入值反转、输出值反转、参数模型。

1)多项式公式:POLY,它是CRC校验使用的除数,一般使用多项式表示。

注:POLY可以从国际标准中选择,也可以自己指定,原则是保证最高位和最低位=1.

e.g.  多项式:x^8+x^4+x^3+x^2+1=1 0001 1101(bin)=0x11D(hex)

2)多项式简记式:多项式的首位必定为1,而这1的位置在下一步计算一定为0,所以就把前面这个1给省略掉了,出现了一个叫简记式的东西。

e.g.  多项式:x^8+x^4+x^3+x^2+1的简记式=0x11D去掉首个1=0x1D。

3)数据宽度:CRC校验码的所占的位数,CRC长度始终要比除数位数少1

e.g.  CRC-8的数据宽度=8,其POLY=9bites;同理CRC-16的数据宽度=16,其POLY=17bites.

4. 初始值与结果异或值:(均为≠0的情况,因为=0时,数被异或后仍等于自己)

1)明确初始值且该值≠0的情况下,数据在进行计算之前,需要先将要待计算的首字节与初始值进行异或,然后再与多项式进行计算。

2)明确结果异或值且该值≠0的情况下,需要将计算得到的结果与结果异或值进行异或,得到的最终值才是这段数据的CRC校验码。

e.g.  初始值与结果异或值的例子通过后面具体数据来解释。

5. 输入值反转与输出值反转:(均为=True的情况,因为=False时,不进行处理)

1)输入值反转的意思是在计算之前先将数据反转,然后再用得到的反转数据和多项式进行计算。

e.g.  假设数据为0xAA=1010 1010,反转后=0101 0101=0x55CRC结果为0x73=0111 0011。

2)输出值反转则是将最终得到的CRC结果进行反转。

e.g.  将上述CRC结果再反转,最终得到所需要的结果1100 1110=0xCE

*注意:通常,输入值反转的情况下,结果值也会是反转的,所以这两个选项一般是同时选中的。

四、异或和模2除法

1.异或

简单说就是:相同为0,不同为1,运算符号是^。

e.g.  0^0=00^1=11^1=01^0=1

2.模2除法

相较普通的算术除法,主要的区别在它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值