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.

[参考译文] MSP430F6779A:硬件 CRC 发生器

Guru**** 2393495 points
Other Parts Discussed in Thread: MSP430F6779A, MSP430FG6626

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/675956/msp430f6779a-hardware-crc-generator

器件型号:MSP430F6779A
主题中讨论的其他器件: MSP430FG6626MSP430WARE

这里有人能不能为我提供 MSP430F6779A 硬件 CRC-CCITT 实现的代码实现。 我尝试了很多在线提供的代码、但没有一个代码具有 MSP 生成的 CRC。 不确定是什么问题。 我想使用 MSP 的硬 CRC 在前端进行冗余检查、但我没有获得正确的 CRC 逻辑/代码。 有人会引导我编写与 MSP CRC 硬件生成的 CRC 完全匹配的 CRC 代码。 提前感谢。

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

    虽然不是同一器件、但请查看与 MSP430FG6626关联的 CRC 代码示例。 它具有相同的 CRC 模块和类似的系列、因此移植示例应该很容易。 它位于 CCS 或 HTTP://dev.ti.com 中的 TI Resource Explorer 中。 导航至 TI Resource Explorer -> Software -> MSP430Ware -> Devices -> MSP430F5xxx_6xx -> MSP430FG6626 -> Peripheral Examples -> Register Level -> msp430fg662x_crc16_01.c。 它演示了硬件 CRC 并将其与软件版本进行了比较。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我已经尝试过、但它与 MSP 生成的结果不匹配。 我的软件 CRC 代码如下所示:-
    int main()

    uint16_t crcvalue = 0xFFFF、I;
    uint8_t Arr[280]={0};
    ARR[0]= 0xF7;
    ARR[1]= 0x01;
    ARR[2]= 0x0C;
    对于(i=0;i<264;i++) Arr[i+3]= I;
    for (i=1;i<267;i++)

    crcvalue = CCITT_Update (crcvalue、(uint16_t) Arr[i]);//根据示例为低字节
    crcvalue = CCITT_Update (crcvalue、0); //根据示例为高字节


    printf ("CRC 值为%x"、crcvalue);
    返回0;


    //软件算法- CCITT CRC16代码
    unsigned short int CCITT_Update (unsigned short int init、unsigned short int 输入)

    unsigned short int CCITT;
    CCITT =(unsigned char)(init >> 8)|(init << 8);
    CCITT ^=输入;
    CCITT ^=(unsigned char)(CCITT & 0xFF)>> 4;
    CCITT ^=(CCITT << 8)<< 4;
    CCITT ^=((CCITT & 0xFF)<< 4)<< 1;
    返回 CCITT;


    对于上述 UART 数据包、我指的是 Arr[1]到 Arr[266] CRC、上述代码将 CRC 设为0xBD01、而我的 MSP 将 CRC 设为0xA29F。 不会出错。 :(
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gaurav、您好!

    您似乎没有在数组位置"0"为 SW CRC 启动 for 循环。 这可以解释差异。 确保要馈入 HW CRC 的范围与要馈入 SW CRC 的范围相匹配。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、JH、
    这是有意的。 我知道、我的硬件也只是以相同的方式计算。 我刚刚创建了一个系统采样数据包、其中在跳过第一个字节后计算 CRC。 实际上、两个边代码都只由我编写。 即 MSP 固件和该应用、因此在本例中不会产生混淆。 它必须从 Arr[1]开始、直到 Arr[266]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gaurav、

    您的数组似乎是一个字符数组、您需要一个整数组、因为这是一个16位 CRC 实现。 我猜测这里的硬件一次拉取16位、如果您将其馈入一个字符阵列、则 II 不确定它会抓取什么。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、JH、
    我找到了问题。 我正在将数据填充到 CRCDI 寄存器中、正如预期的那样、该数据将被填充到 CRCDIBR 寄存器中。 进行此更改后、我的 CRC 与软件生成的 CRC 匹配。 非常感谢您的帮助。