Files
CHJ/user/Utility/CRC.c

138 lines
4.7 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#include "../main/SystemInclude.h"
const u8 CRC_TABLE[]={
0x000,0x007,0x00E,0x009,0x01C,0x01B,0x012,0x015,0x038,0x03F,0x036,0x031,0x024,0x023,0x02A,0x02D,
0x070,0x077,0x07E,0x079,0x06C,0x06B,0x062,0x065,0x048,0x04F,0x046,0x041,0x054,0x053,0x05A,0x05D,
0x0E0,0x0E7,0x0EE,0x0E9,0x0FC,0x0FB,0x0F2,0x0F5,0x0D8,0x0DF,0x0D6,0x0D1,0x0C4,0x0C3,0x0CA,0x0CD,
0x090,0x097,0x09E,0x099,0x08C,0x08B,0x082,0x085,0x0A8,0x0AF,0x0A6,0x0A1,0x0B4,0x0B3,0x0BA,0x0BD,
0x0C7,0x0C0,0x0C9,0x0CE,0x0DB,0x0DC,0x0D5,0x0D2,0x0FF,0x0F8,0x0F1,0x0F6,0x0E3,0x0E4,0x0ED,0x0EA,
0x0B7,0x0B0,0x0B9,0x0BE,0x0AB,0x0AC,0x0A5,0x0A2,0x08F,0x088,0x081,0x086,0x093,0x094,0x09D,0x09A,
0x027,0x020,0x029,0x02E,0x03B,0x03C,0x035,0x032,0x01F,0x018,0x011,0x016,0x003,0x004,0x00D,0x00A,
0x057,0x050,0x059,0x05E,0x04B,0x04C,0x045,0x042,0x06F,0x068,0x061,0x066,0x073,0x074,0x07D,0x07A,
0x089,0x08E,0x087,0x080,0x095,0x092,0x09B,0x09C,0x0B1,0x0B6,0x0BF,0x0B8,0x0AD,0x0AA,0x0A3,0x0A4,
0x0F9,0x0FE,0x0F7,0x0F0,0x0E5,0x0E2,0x0EB,0x0EC,0x0C1,0x0C6,0x0CF,0x0C8,0x0DD,0x0DA,0x0D3,0x0D4,
0x069,0x06E,0x067,0x060,0x075,0x072,0x07B,0x07C,0x051,0x056,0x05F,0x058,0x04D,0x04A,0x043,0x044,
0x019,0x01E,0x017,0x010,0x005,0x002,0x00B,0x00C,0x021,0x026,0x02F,0x028,0x03D,0x03A,0x033,0x034,
0x04E,0x049,0x040,0x047,0x052,0x055,0x05C,0x05B,0x076,0x071,0x078,0x07F,0x06A,0x06D,0x064,0x063,
0x03E,0x039,0x030,0x037,0x022,0x025,0x02C,0x02B,0x006,0x001,0x008,0x00F,0x01A,0x01D,0x014,0x013,
0x0AE,0x0A9,0x0A0,0x0A7,0x0B2,0x0B5,0x0BC,0x0BB,0x096,0x091,0x098,0x09F,0x08A,0x08D,0x084,0x083,
0x0DE,0x0D9,0x0D0,0x0D7,0x0C2,0x0C5,0x0CC,0x0CB,0x0E6,0x0E1,0x0E8,0x0EF,0x0FA,0x0FD,0x0F4,0x0F3 };
//;---------------------------------------------------------------------------------------------
//;8λCRCУ<43><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//;dataLen:У<><D0A3><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>dataPoint:<3A><>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ(LSB)
//;CRC_CODE:CRCУ<43><D0A3><EFBFBD><EFBFBD>
//;---------------------------------------------------------------------------------------------
/******************************************************************************/
u8 CRC8(u8 *ucDptr, u8 ucLen)
{
u8 ucIndex; // CRC8У<38><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 ucCRC8 = 0; // CRC8<43>ֽڳ<D6BD>ʼ<EFBFBD><CABC>
//<2F><><EFBFBD><EFBFBD>CRC8λУ<CEBB><D0A3>
while(ucLen--)
{
ucIndex = ucCRC8 ^ (*ucDptr++);
ucCRC8 = CRC_TABLE[ucIndex];
}
// <20><><EFBFBD><EFBFBD>CRC8У<38><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return (~ucCRC8);
2026-03-20 21:19:04 +08:00
}
2026-03-20 21:16:58 +08:00
/******************************************************************************/
u16 SlowCRC16(u16 sum, u32 codeAdr, u16 Len) //<2F><>ȡCRC
{
// while(Len--)
// {
// u16 I;
//
// u8 CByte = __data20_read_char(codeAdr++);
//
// for(I = 0; I<8; ++I)
// {
// u32 osum = sum;
// sum <<= 1;
// if(CByte & 0x80) sum |= 1;
// if(osum & 0x8000) sum ^= CRC16_POLY;
// CByte <<= 1;
// }
//
2026-03-20 21:19:04 +08:00
// clear_WDT();
2026-03-20 21:16:58 +08:00
// }
// while(Len--)
// {
// sum = sum ^ ((u16)__data20_read_char(codeAdr++) << 8u);
// for(u16 I = 0u; I < 8u; I++)
// {
// if((sum & 0x8000u) == 0x8000)
// {
// sum = (sum << 1u) ^ CRC16_POLY;
// }
// else
// {
// sum <<= 1u;
// }
// }
//
2026-03-20 21:19:04 +08:00
// // clear_WDT();
2026-03-20 21:16:58 +08:00
// }
return sum;
}
/******************************************************************************/
u8 CRC8_Talbe_I2CWord(u16 Data)
{
u8 crc8 = 0;
u8 Temp;
TypeWord wtData;
wtData.Word = Data;
Temp = crc8^wtData.Byte[1];
crc8 = CRC_TABLE[Temp];
Temp = crc8^wtData.Byte[0];
crc8 = CRC_TABLE[Temp];
return crc8;
}
/******************************************************************************/
u8 I2CWordCrc(u8 crcH, u8 crcL)
{
u8 crc8 = 0;
crc8 = crc8 ^ crcH;
crc8 = CRC_TABLE[ crc8 ];
crc8 = crc8 ^ crcL;
crc8 = CRC_TABLE[ crc8 ];
return crc8;
}
/******************************************************************************/
void CodeCheckCRC(void)
{
// u16 sumAdr;
// extern const u16 __checksum;
//
// // Check update program code
// softCRCCode = __checksum;
//
// // <20><>ȡ CHECKSUM <20><>ַ
// // У<><D0A3><EFBFBD><EFBFBD>һ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>
// sumAdr = (u16)&__checksum; // <20><>ȡ CHECKSUM <20><>ַ
// CodeCRC = SlowCRC16(CRC16_INIT_VAL, (u32)APP_CODE1_START, (u16)(sumAdr-APP_CODE1_START));
// sumAdr += 2;
// CodeCRC = SlowCRC16(CodeCRC, (u32)sumAdr, (u16)(APP_CODE1_END-sumAdr+1));
//
// // BootLoader<65><72><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
// // У<><D0A3><EFBFBD>ڶ<EFBFBD><DAB6>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>
// CodeCRC = SlowCRC16(CodeCRC, (u32)APP_CODE2_START, (u16)(APP_CODE2_END-APP_CODE2_START+1));
// // <20><><EFBFBD><EFBFBD>CHECKSUM
// //CodeCRC = SlowCRC16(CodeCRC, (u32)&area, 2);
//
// CodeCRC = (CodeCRC == __checksum) ? 0 : 0xAA55;
}