#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校验程序 //;dataLen:校验字节数,dataPoint:待校验数据起始地址(LSB) //;CRC_CODE:CRC校验码 //;--------------------------------------------------------------------------------------------- /******************************************************************************/ u8 CRC8(u8 *ucDptr, u8 ucLen) { u8 ucIndex; // CRC8校验表格索引 u8 ucCRC8 = 0; // CRC8字节初始化 //进行CRC8位校验 while(ucLen--) { ucIndex = ucCRC8 ^ (*ucDptr++); ucCRC8 = CRC_TABLE[ucIndex]; } // 返回CRC8校验数据 return (~ucCRC8); } /******************************************************************************/ u16 SlowCRC16(u16 sum, u32 codeAdr, u16 Len) //获取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; // } // // clear_WDT(); // } // 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; // } // } // // // clear_WDT(); // } 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; // // // 获取 CHECKSUM 地址 // // 校验第一段代码区 // sumAdr = (u16)&__checksum; // 获取 CHECKSUM 地址 // 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区以0代替 // // 校验第二段代码区 // CodeCRC = SlowCRC16(CodeCRC, (u32)APP_CODE2_START, (u16)(APP_CODE2_END-APP_CODE2_START+1)); // // 返回CHECKSUM // //CodeCRC = SlowCRC16(CodeCRC, (u32)&area, 2); // // CodeCRC = (CodeCRC == __checksum) ? 0 : 0xAA55; }