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.

[参考译文] MSP430FR5962:帮助-使用硬件 CRC-32模块

Guru**** 2440720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/900075/msp430fr5962-help---using-the-hardware-crc-32-module

器件型号:MSP430FR5962

您好!

我一直在尝试使用硬件 CRC-32模块、但未能产生预期结果。  我将硬件输出与在线 CRC-32计算器进行比较、这些计算器具有与用户指南中相同的多项式。  我没有找到任何使用32模块而不是16的示例代码。  我还尝试使用反向输入和输出寄存器、但仍然没有获得预期的输出。

//必须为以 null 结尾
的 uint32_t str_CRC32 (const char* str){
uint32_t CRC = 0;

//使用 SEED 初始化 CRC32
CRC32INIRESW0 = 0xFFFF;
CRC32INIRESW1 = 0xFFFF;

//将输入字符串馈入 CRC32输入寄存器
while (* str){
CRC32DIW0 =(uint8_t)*str++;
}

//从 CRC32输出寄存器获取结果
CRC |= CRC32INIRESW0;
CRC <<= 16;
CRC |= CRC32INIRESW1;
返回 CRC;
} 

输入:"AAAAAA"/{0x61、0x61、0x61}

输出:0x125D3369

预期输出: 0xAD98E545

非常感谢您的任何帮助!

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

    我没有使用过 CRC-32模块、但这里似乎有一个示例:

    http://dev.ti.com/tirex/explore/node?node=AJGMGwEktcD3Icwbkibusw__IOGqZri__LATEST

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

    谢谢!  这个例子引导我走向正确的方向。

    这是我找到的解决方案。

    uint32_t bytes_CRC32 (uint8_t* bytes、uint16_t size){
    uint16_t i、字;
    bool W0 = true;
    
    //使用 SEED 初始化 CRC32
    CRC32INIRESW0 = CRC_Init & 0x0000FFFF; // Init CRC32硬件模块
    CRC32INIRESW1 = CRC_Init >> 16; // Init CRC32硬件模块
    
    //将输入字节馈入 CRC32输入寄存器
    对于(i = 0;i < size;i++){
    if (i & 1){//每隔一个字节写入一次
    IF (W0)
    CRC32DIW0 =(字|((uint16_t) bytes[i]<< 8));
    其他
    CRC32DIW1 =(字|((uint16_t) bytes[i]<< 8));
    
    字= 0;
    W0 =!W0;
    } 否则{
    字=(uint16_t) bytes[i];
    }
    }
    
    //写入后半字/字节
    if (word!= 0){
    IF (W0)
    CRC32DIW0 =字;
    其他
    CRC32DIW1 =字;
    }
    
    返回~(((UINT32_t) CRC32RESRW1和0x0000FFFF)|((UINT32_t) CRC32RESRW0 << 16));
    } 

    输入:"ABCDE"(0x6162 0x6364 0x6500)

    输出: 0xEF5FFD82