为超过1个字节计算CRC16 MCRF4XX

问题描述 投票:2回答:2

我一直在尝试在我的代码中执行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 / ...

c embedded crc calculation crc16
2个回答
0
投票

完整的代码,包括main()驱动程序。


0
投票

您的函数Utils_CRC16_MCRF4XX应该更新

© www.soinside.com 2019 - 2024. All rights reserved.