SAE SENT单边半字节传输协议里的CRC4与CRC6检验码编程
2018-01-11 16:36
288 查看
/*多项式为:x4+x3+x2+1;这里主要对4位nibble进行校验,不会大于0x0F,因此crc4表就只有16个值*/
uint8_t CRC4_Table[16]= {0,13,7,10,14,3,9,4,1,12,6,11,15,2,8,5};
uint8_t crc4_cal(uint8_t *data,uint8_t len)/*data位4位nibble块的值,len为nibble块的数量*/
{
uint8_t result = 0x03;
uint8_t tableNo = 0;
int i = 0;
for( ;i < len; i++)
{
tableNo = result ^ data[i];
result = CRC4_Table[tableNo];
}
return result;
}
/*多项式为:x6+x4+x3+1;这里主要对6位数据块进行校验,不会大于63,因此crc6表就只有64个值*/
uint8_t CRC6_Table[64]= { 0, 25, 50, 43, 61, 36, 15, 22, 35, 58, 17, 8, 30, 7, 44 ,53,
31, 6, 45, 52, 34, 59, 16, 9, 60, 37, 14, 23, 1, 24, 51, 42,
62, 39, 12, 21, 3, 26, 49, 40, 29, 4, 47, 54, 32, 57, 18, 11,
33, 56, 19, 10, 28, 5, 46, 55, 2, 27, 48, 41, 63, 38, 13, 20};
uint8_t crc6_cal(uint8_t *data,uint8_t len)/*data位6位nibble块的值,len为数据块的数量*/
{
/*crc初始值*/
uint8_t result = 0x15;
/*查表地址*/
uint8_t tableNo = 0;
int i = 0;
/*对额外添加的6个0进行查表计算crc*/
tableNo = result ^ 0;
result = CRC6_Table[tableNo];
/*对数组数据查表计算crc*/
for(i = 0; i < len; i++)
{
tableNo = result ^ data[i];
result = CRC6_Table[tableNo];
}
/*返回最终的crc值*/
return result;
}
uint8_t CRC4_Table[16]= {0,13,7,10,14,3,9,4,1,12,6,11,15,2,8,5};
uint8_t crc4_cal(uint8_t *data,uint8_t len)/*data位4位nibble块的值,len为nibble块的数量*/
{
uint8_t result = 0x03;
uint8_t tableNo = 0;
int i = 0;
for( ;i < len; i++)
{
tableNo = result ^ data[i];
result = CRC4_Table[tableNo];
}
return result;
}
/*多项式为:x6+x4+x3+1;这里主要对6位数据块进行校验,不会大于63,因此crc6表就只有64个值*/
uint8_t CRC6_Table[64]= { 0, 25, 50, 43, 61, 36, 15, 22, 35, 58, 17, 8, 30, 7, 44 ,53,
31, 6, 45, 52, 34, 59, 16, 9, 60, 37, 14, 23, 1, 24, 51, 42,
62, 39, 12, 21, 3, 26, 49, 40, 29, 4, 47, 54, 32, 57, 18, 11,
33, 56, 19, 10, 28, 5, 46, 55, 2, 27, 48, 41, 63, 38, 13, 20};
uint8_t crc6_cal(uint8_t *data,uint8_t len)/*data位6位nibble块的值,len为数据块的数量*/
{
/*crc初始值*/
uint8_t result = 0x15;
/*查表地址*/
uint8_t tableNo = 0;
int i = 0;
/*对额外添加的6个0进行查表计算crc*/
tableNo = result ^ 0;
result = CRC6_Table[tableNo];
/*对数组数据查表计算crc*/
for(i = 0; i < len; i++)
{
tableNo = result ^ data[i];
result = CRC6_Table[tableNo];
}
/*返回最终的crc值*/
return result;
}
相关文章推荐
- mysql protocal协议 tcpdump网络传输字节分析
- SAE J1939数据链路层-传输协议
- 智能穿戴设备移动APP端与外设数据传输协议功能模块CMD&ACK表
- OC中网络传输的时候对字节流的操作 & 对字节的处理 & 野指针问题
- Rime协议学习笔记:(十四)multihop多跳传输
- 关于网络传输之字节存放方式
- 本学习笔记TCP/IP传输协议
- 网络视频传输协议
- I2C总线传输协议
- 按自定义协议格式生成二进制字节数组的一种方式
- View:蓝牙真的无音质?浅谈蓝牙音频传输协议01.
- Zigbee协议规范--数据传输原语流图及说明
- Java Socket实战之五 使用加密协议传输对象
- 实时消息传输协议 RTMP(Real Time Messaging Protocol)
- C#实现HTTP协议下的多线程文件传输
- rfc959 FTP传输协议
- HTTP协议在客户端和服务器端的传输过程 02
- 基于RTSP/RTP协议的H.264传输
- 实例详解 网络协议概述:物理层、连接层、网络层、传输层、应用层