我一直在尝试在我的代码中执行CRC16 MCRF4XX,但是我设法仅对1个字节正确地执行了它。
对于特定方法,我已遵循本指南:http://www.piclist.com/techref/method/error/quickcrc16.htm我已经在https://crccalc.com/]中测试了相同的字节
代码如下:
register uint32_t i; uint16_t Crc = 0; for ( i = 0; i < Len; i++ ) Crc = Utils_CRC16_MCRF4XX(Crc,pData[i]); return ( Crc );
函数“ Utils_CRC16_MCRF4XX”:
uint8_t i; uint16_t TempByte, CurrentCRC = 0xFFFF; //make byte 16 bit format TempByte = (uint16_t)Byte; for ( i = 0; i < 8; i++ ) { if ( (CurrentCRC & 0x0001) == (TempByte & 0x0001) ) { //right shift crc CurrentCRC >>= 1; //right shift data TempByte >>= 1; } else { CurrentCRC >>= 1; TempByte >>= 1; CurrentCRC = CurrentCRC ^ 0x8408; /* 1000 0100 0000 1000 = x^16 + x^12 + x^5 + 1 */ } } return ( Crc ^ CurrentCRC);
字节0x54的输出为0x1B26。我已经尝试将输出与插入的Crc进行XOR运算,但结果加起来不正确。
现在,当我尝试提供超过1个字节的函数时,我的问题开始了。
如果让我说:0x54 0xFF。它会给我一个与计算器完全不同的计算。
我假设我的错误是在对每个字节执行操作之后将字节加在一起。
感谢帮助!
我一直在尝试在我的代码中执行CRC16 MCRF4XX,但是我设法仅对1个字节正确地执行了此操作。对于特定的方法,我已经遵循了该指南:http://www.piclist.com/techref/method / ...
完整的代码,包括main()驱动程序。
您的函数Utils_CRC16_MCRF4XX
应该更新