vector CAN OE CAPL内置的CRC以及E2E算法

目录

前言

1. CAPL中与CRC有关的函数如下:

 1.1 函数: Crc_CalculateCRC8()

函数语法

举例说明

1.2 函数: Crc_CalculateCRC8H2F()

函数语法

举例说明

1.3 函数: Crc_CalculateCRC16()

函数语法

举例说明

1.4 函数: Crc_CalculateCRC32()

函数语法

举例说明

1.5 函数: Crc_CalculateCRC32P4()

函数语法

举例说明

1.6 函数: Crc_CalculateCRC64()

函数语法

举例说明

 

总结

 

前言

在CAPL开发的时候, 涉及checksum计算, E2E等等, 而CAPL已经有内置的函数了, 我们就不要重复开发了.

本文函数部分摘录自Vector的官方文档,做了整理与翻译


1. CAPL中与CRC有关的函数如下:

FunctionsShort Description
Crc_CalculateCRC8根据数据计算CRC8 的相应校验和(checksum)
Crc_CalculateCRC8H2F根据数据计算CRC8H2F 的相应校验和(checksum)
Crc_CalculateCRC16根据数据计算CRC16 的相应校验和(checksum)
Crc_CalculateCRC32根据数据计算CRC32 的相应校验和(checksum)
Crc_CalculateCRC32P4根据数据计算CRC32P4 的相应校验和(checksum)
Crc_CalculateCRC64根据数据计算CRC64 的相应校验和(checksum)

 1.1 函数: Crc_CalculateCRC8()

这里的CRC8计算方法在SAEJ1850 中定义。

函数语法

long Crc_CalculateCRC8 (BYTE* data, 
                        dword dataSize, 
                        dword dataOffset, 
                        dword crcLength, 
                        dword crcStartValue, 
                        dword firstCall, 
                        dword* crcCalculated);

函数功能描述

根据数据计算CRC8的相应校验和。CRC值的计算对应于AUTOSAR Profile 1

函数参数介绍

参数含义
dest要计算校验和的负载数据(Payload data)
dataSize要计算的数据块(data block)的长度(以字节为单位)
dataOffset用于计算负载数据(payload data)中的CRC的起始索引(Start index)
crcLength计算CRC的数据长度
crcStartValueCRC初始值取决于它是第一次调用还是后续调用。如果firstCall 为1 ,则忽略值。
firstCall第一次调用或后续调用的标志。可能的值为0(后续调用) 或1(第一次调用)
crcCalculated计算后的CRC8值

返回值介绍

返回值含义
0Successful
-1Not successful: CRC length must not be 0
-2Not successful: Offset must not be greater or equal length
-3Not successful: Length outside array range
-4Not successful: Summary of Length and offset are outside array range

举例说明

关于Crc_CalculateCRC8()函数说明的示例代码:

// first CALL, Offset '0'
on key 'a'
{
  long retval;
  dword crc;
  byte data[9] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC8(data, elcount (data), 0, elcount (data), 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}
​
// first CALL, Offset '2', Length - 2
on key 'b'
{
  long retval;
  dword crc;
  byte data[11] = {0xAA ,0xAA,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC8(data, elcount (data), 2, elcount (data) -2, 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}

输出结果:

Data represents the number: Little Endian is used.

 

1.2 函数: Crc_CalculateCRC8H2F()

这里的CRC8H2F指的是: CRC8 0x2F polynomial

函数作用: 根据数据计算CRC8H2F的相应校验和。CRC值的计算对应于AUTOSAR Profile 2

函数语法

long Crc_CalculateCRC8H2F (BYTE* data, 
                           dword dataSize, 
                           dword dataOffset, 
                           dword crcLength, 
                           dword crcStartValue, 
                           dword firstCall, 
                           dword* crcCalculated);

函数的参数与返回值基本上等同于Crc_CalculateCRC8() 的说明,这里就不在赘述了。

举例说明

关于Crc_CalculateCRC8H2F()函数说明的示例代码:

// first CALL, Offset '0'
on key 'a'
{
  long retval;
  dword crc;
  byte data[9] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC8H2F(data, elcount (data), 0, elcount (data), 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}
​
// first CALL, Offset '2', Length - 2
on key 'b'
{
  long retval;
  dword crc;
  byte data[11] = {0xAA ,0xAA,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC8H2F(data, elcount (data), 2, elcount (data) -2, 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}

1.3 函数: Crc_CalculateCRC16()

函数作用: 根据数据计算CRC16的相应校验和。CRC值的计算对应于AUTOSAR PROFILE_05PROFILE_06

函数语法

long Crc_CalculateCRC16 (BYTE* data, 
                         dword dataSize, 
                         dword dataOffset, 
                         dword crcLength, 
                         dword crcStartValue, 
                         dword firstCall, 
                         dword* crcCalculated);

函数的参数与返回值基本上等同于Crc_CalculateCRC8() 的说明,这里就不在赘述了。

举例说明

关于Crc_CalculateCRC16()函数说明的示例代码:

// first CALL, Offset '0'
on key 'a'
{
  long retval;
  dword crc;
  byte data[9] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC16(data, elcount (data), 0, elcount (data), 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}
​
// first CALL, Offset '2', Length - 2
on key 'b'
{
  long retval;
  dword crc;
  byte data[11] = {0xAA ,0xAA,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC16(data, elcount (data), 2, elcount (data) -2, 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}

1.4 函数: Crc_CalculateCRC32()

函数作用: 根据数据计算CRC32的相应校验和。CRC值的计算对应于IEEE-802.3 CRC32

函数语法

long Crc_CalculateCRC32 (BYTE* data, 
                         dword dataSize, 
                         dword dataOffset, 
                         dword crcLength, 
                         dword crcStartValue, 
                         dword firstCall, 
                         dword* crcCalculated);

函数的参数与返回值基本上等同于Crc_CalculateCRC8() 的说明,这里就不在赘述了。

举例说明

关于Crc_CalculateCRC32()函数说明的示例代码:

// first CALL, Offset '0'
on key 'a'
{
  long retval;
  dword crc;
  byte data[9] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC32(data, elcount (data), 0, elcount (data), 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}
​
// first CALL, Offset '2', Length - 2
on key 'b'
{
  long retval;
  dword crc;
  byte data[11] = {0xAA ,0xAA,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC32(data, elcount (data), 2, elcount (data) -2, 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}

1.5 函数: Crc_CalculateCRC32P4()

这里的CRC32P4 指的是: CRC32 0x1F4ACFB13 polynomial

函数作用: 根据数据计算CRC32P4的相应校验和。CRC值的计算对应于AUTOSAR Profile 4

函数语法

long Crc_CalculateCRC32P4 (BYTE* data, 
                           dword dataSize, 
                           dword dataOffset, 
                           dword crcLength, 
                           dword crcStartValue, 
                           dword firstCall, 
                           dword* crcCalculated);

函数的参数与返回值基本上等同于Crc_CalculateCRC8() 的说明,这里就不在赘述了。

举例说明

关于Crc_CalculateCRC32P4()函数说明的示例代码:

// first CALL, Offset '0'
on key 'a'
{
  long retval;
  dword crc;
  byte data[9] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC32P4(data, elcount (data), 0, elcount (data), 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}
​
// first CALL, Offset '2', Length - 2
on key 'b'
{
  long retval;
  dword crc;
  byte data[11] = {0xAA ,0xAA,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC32P4(data, elcount (data), 2, elcount (data) -2, 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}

 

1.6 函数: Crc_CalculateCRC64()

函数作用: 根据数据计算CRC64的相应校验和。CRC值的计算对应于 AUTOSAR Profile 7

函数语法

long Crc_CalculateCRC64 (BYTE* data, 
                         dword dataSize, 
                         dword dataOffset, 
                         dword crcLength, 
                         qword crcStartValue, 
                         dword firstCall, 
                         qword* crcCalculated);

函数的参数与返回值基本上等同于Crc_CalculateCRC8() 的说明,这里就不在赘述了。

举例说明

关于Crc_CalculateCRC64()函数说明的示例代码:

// first CALL, Offset '0'
on key 'a'
{
  long retval;
  qword crc;
  byte data[9] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC8(data, elcount (data), 0, elcount (data), 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}
​
// first CALL, Offset '2', Length - 2
on key 'b'
{
  long retval;
  qword crc;
  byte data[11] = {0xAA ,0xAA,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
​
  retval = Crc_CalculateCRC8(data, elcount (data), 2, elcount (data) -2, 0, 1, crc);
  write("CRC of data: 0x%X", crc);
}

 


总结

CAPL内置checksum还是很好用的, 省去了自己实现的麻烦。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值