This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:TMC4C1294硬件 CRC 问题

Guru**** 2482105 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/709489/tm4c1294ncpdt-tmc4c1294-hw-crc-problem

器件型号:TM4C1294NCPDT

嘿、我希望 E2E 社区能帮我解决问题。 我在 TM4C1294 UC 中遇到硬件 CRC 问题。 我们使用 Tivaware 调用来访问外设。

下面是我得到的一些示例代码: 0xBE33EAB6。


当输入与示例(0001020304)相同的值时,我从联机 CRC 计算器中获得这些结果。

我们需要此 CRC 校验与我们也开发的桌面应用程序相结合。

在桌面应用程序中、我们能够获得如下表所示的 CRC 代码。 那么、我们在 TM4C1294中有什么问题呢?

uint32_t 结果;
uint8_t buf[5];

buf[0]= 0;
buf[1]= 1;
buf[2]= 2;
buf[3]= 3;
buf[4]= 4;

CRCConfigSet (CCM0_BASE、CRC_CFG_SIZE 8位| CRC_CFG_TYPE_P4C11DB7 | CRC_CFG_INIT_SEED);

CRCSeedSet (通道->Base、0);
结果= CRCDataProcess (CCM0_BASE、buf、sizeof (buf)、false); 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用的网站是 www.scadacore.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我看来、您引用的网站上使用的 CRC-32算法使用的是32位实现。 以下代码给出了与网站上的 CRC-32反向0xEDB88320模式相匹配的0x9F68AA88:

    main (void)
    {
    uint32_t ui32SysClock;
    uint32_t 结果;
    uint8_t buf[8];
    
    //
    //从 PLL 以120MHz 运行。
    //
    ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    
    SysCtlPeripheralEnable (SYSCTL_Periph_CCM0);
    
    
    buf[0]= 0x00;
    buf[1]= 0x01;
    buf[2]= 0x02;
    buf[3]= 0x03;
    buf[4]= 0x04;
    buf[5]= 0x05;
    buf[6]= 0x06;
    buf[7]= 0x07;
    
    CRCConfigSet (CCM0_BASE、(CRC_CFG_INIT_1 | CRC_CFG_TYPE_P4C11DB7 | CRC_CFG_IBR | CRC_CFG_OBR |
    CRC_CFG_SIZE_32位| CRC_CFG_RESINV));
    
    结果= CRCDataProcess (CCM0_BASE、(uint32_t *) buf、2、true);
    返回结果;
    }