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.

[参考译文] ADS112C04:是否可以有用于 ADS112C04 CRC 校验的示例程序?

Guru**** 2583985 points
Other Parts Discussed in Thread: ADS112C04

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/758829/ads112c04-could-i-have-a-sample-program-for-ads112c04-crc-checking

器件型号:ADS112C04

 大家好、

 我的一位客户正在评估 ADS112C04。 但 CRC 错误发生在 CRC 校验过程中。 他们请求我们提供任何 CRC 校验样例程序、因为他们的 CRC 校验程序可能错误。

那么、您能给我一个 C 语言的示例程序吗?

 非常感谢您的答复。

 此致、

 Kazuya Nakai。

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

    您好、Nakai-San、

    ADS112C04使用16位 CRC、并针对返回的整个数据(除实际 CRC 数据外的所有数据)进行计算。  了解在传输 CRC 时发生的操作(RDATA、RREG 等)会有所帮助。  CRC 计算的一个示例如下:

    /**
    * 16位 CRC 的计算。
    *
    *\详细说明了基于发送到函数并计算为16位
    * CRC 的数据的 CRC 结果。 计算结果为无符号短整型。
    *
    *\paramu8数据捕获的数据。
    *\paramu8用于计算的数据长度(以字节为单位)。
    *
    *\返回16位计算出的 CRC 值。
    //
    uint16_t calcCRC (uint8_t * u8Data、uint8_t u8Length)
    {
    uint8_t u8i;
    uint16_t u16CRC= 0xFFFF;// CRC 寄存器的初始值*/
    uint16_t u16Poly= 0x1021;//* CRC polynomial (不包括 uint832/ uint32/ uint32/
    ut
    数据掩码= 0xuint8)//数据 MSB 的位置*/
    bool bDataMSb;//
    数据字节的 MSB */ bool bCrcMSb;// CRC 字节的 MSB*/
    //*从数据字节构造数据字*/
    for (u8i = 0;u8i < u8Length; u8i++)
    {
    u32Data ||(uint32_t)(u8Data[u8i]<< 8*(u8Length - u8i - 1));
    }
    //减少计算周期数(通过跳过任何未使用的字节)*/
    u32MsbMask >=8 *(4-u8Length);
    /* CRC 算法*/
    while (u32MsbMask > 0)
    {
    /*检查 MSB 值*/
    bDataMSb =(bool)(u32Data & u32MsbMask);
    bCrcMSb=(bool)(u16CRC & 0x8000);
    if (bDataMSb ^^ bCrcMSb){u16CRC =(u16ool)<*和 u16CRC
    <* uShift +* u16CRC = 1);if (u16* u16* u16COR)/*仅移位*/*
    
    移位 MSB 指针并确保右移始终产生0 */
    u32MsbMask =(u32MsbMask >> 1)& 0x7FFFFFFF;
    }
    return (u16CRC);
    } 

    此致、

    Bob B