E015.D.011-FXLS90230/Drivers/BSP/crc.c

134 lines
4.7 KiB
C
Raw Normal View History

2025-04-24 11:37:10 +08:00
#include "main.h"
#include "CRC.h"
//======================CRC8<43><38><EFBFBD><EFBFBD>===============================================
//CRC<52><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽ<EFBFBD>
const unsigned char CRC8_TABLE[256]={
0X00,0X5E,0XBC,0XE2,0X61,0X3F,0XDD,0X83,
0XC2,0X9C,0X7E,0X20,0XA3,0XFD,0X1F,0X41,
0X9D,0XC3,0X21,0X7F,0XFC,0XA2,0X40,0X1E,
0X5F,0X01,0XE3,0XBD,0X3E,0X60,0X82,0XDC,
0X23,0X07,0X9F,0XC1,0X42,0X1C,0XFE,0XA0,
0XE1,0XBF,0X5D,0X03,0X80,0XDE,0X3C,0X62,
0XBE,0XE0,0X02,0X5C,0XDF,0X81,0X63,0X3D,
0X7C,0X22,0XC0,0X9E,0X1D,0X43,0XA1,0XFF,
0X46,0X18,0XFA,0XA4,0X27,0X79,0X9B,0XC5,
0X84,0XDA,0X38,0X66,0XE5,0XBB,0X59,0X07,
0XDB,0X85,0X67,0X39,0XBA,0XE4,0X06,0X58,
0X19,0X47,0XA5,0XFB,0X78,0X26,0XC4,0X9A,
0X65,0X3B,0XD9,0X87,0X04,0X5A,0XB8,0XE6,
0XA7,0XF9,0X1B,0X45,0XC6,0X98,0X7A,0X24,
0XF8,0XA6,0X44,0X1A,0X99,0XC7,0X25,0X7B,
0X3A,0X64,0X86,0XD8,0X5B,0X05,0XE7,0XB9,
0X8C,0XD2,0X30,0X6E,0XED,0XB3,0X51,0X0F,
0X4E,0X10,0XF2,0XAC,0X2F,0X71,0X93,0XCD,
0X11,0X4F,0XAD,0XF3,0X70,0X2E,0XCC,0X92,
0XD3,0X8D,0X6F,0X31,0XB2,0XEC,0X0E,0X50,
0XAF,0XF1,0X13,0X4D,0XCE,0X90,0X72,0X2C,
0X6D,0X33,0XD1,0X8F,0X0C,0X52,0XB0,0XEE,
0X32,0X6C,0X8E,0XD0,0X53,0X0D,0XEF,0XB1,
0XF0,0XAE,0X4C,0X12,0X91,0XCF,0X2D,0X73,
0XCA,0X94,0X76,0X28,0XAB,0XF5,0X17,0X49,
0X08,0X56,0XB4,0XEA,0X69,0X37,0XD5,0X8B,
0X57,0X09,0XEB,0XB5,0X36,0X68,0X8A,0XD4,
0X95,0XCB,0X29,0X77,0XF4,0XAA,0X48,0X16,
0XE9,0XB7,0X55,0X0B,0X88,0XD6,0X34,0X6A,
0X2B,0X75,0X97,0XC9,0X4A,0X14,0XF6,0XA8,
0X74,0X2A,0XC8,0X96,0X15,0X4B,0XA9,0XF7,
0XB6,0XE8,0X0A,0X54,0XD7,0X89,0X6B,0X35,
};
/*unsigned char data_crc8(volatile unsigned char *pSource, unsigned char NUM)
{
unsigned char table_data = 0, CRC_result = 0;
for( unsigned char i = 0; i < NUM; i ++ )
{
CRC_result ^= *pSource++;
table_data = CRC8_TABLE[CRC_result];
CRC_result += table_data;
}
return CRC_result;
}*/
unsigned char data_crc8(volatile unsigned char *pSource, uint16_t NUM)
{
unsigned char table_data = 0, CRC_result = 0;
uint16_t i;
for(i = 0; i < NUM; i ++ )
{
CRC_result ^= *pSource++;
table_data = CRC8_TABLE[CRC_result];
CRC_result += table_data;
}
return CRC_result;
}
const uint16_t crc16tab[256] = {
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
};
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ַ<EFBFBD>data,
lastResult<EFBFBD>ϴ<EFBFBD>crc<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint16_t CRC16(unsigned char data, uint16_t lastResult)
{
return ((uint16_t)((lastResult >> 8) ^ crc16tab[ (lastResult ^ data) & 0xFF ]));
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>pL_string<6E>ͳ<EFBFBD><CDB3><EFBFBD>L_LEN
lastCRCresult:<EFBFBD><EFBFBD>ʾ<EFBFBD>ϴ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0;
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRCУ<EFBFBD><EFBFBD>ֵ*/
uint16_t CRC16_data(unsigned char *pL_string, uint16_t L_LEN)
{
uint16_t result = 0;
uint16_t I;
for(I = 0; I < L_LEN; I ++ )
{
result = CRC16(pL_string[I], result);
}
return result;
}