ZHCAAO5A June   2020  – August 2021 ADS112C04 , ADS112U04 , ADS114S06 , ADS114S08 , ADS122C04 , ADS122U04 , ADS1235 , ADS1235-Q1 , ADS124S06 , ADS124S08 , ADS1259 , ADS1259-Q1 , ADS125H01 , ADS125H02 , ADS1260 , ADS1260-Q1 , ADS1261 , ADS1262 , ADS1263 , ADS127L01 , ADS131A02 , ADS131A04 , ADS131M04 , ADS131M06 , ADS131M08

 

  1.   商标
  2. 1引言
  3. 2简单校验和
    1. 2.1 校验和代码示例
  4. 3CRC
    1. 3.1 CRC 通用计算
      1. 3.1.1 使用按位异或计算
      2. 3.1.2 使用查找表
        1. 3.1.2.1 表初始化
        2. 3.1.2.2 CRC 计算
      3. 3.1.3 ADS122U04 和 ADS122C04 之间的 CRC 计算差异
        1. 3.1.3.1 字节反射示例
        2. 3.1.3.2 使用字节反射重新组合数据以进行 CRC 计算
  5. 4汉明码
    1. 4.1 汉明码计算
      1. 4.1.1 汉明码计算示例
        1. 4.1.1.1 计算位数以进行奇偶校验和校验和计算
          1. 4.1.1.1.1 计算数据中置 1 的位的数量示例
          2. 4.1.1.1.2 使用查找表计算置 1 的位的数量示例
      2. 4.1.2 验证传输的数据
        1. 4.1.2.1 汉明验证
        2. 4.1.2.2 校验和验证
        3. 4.1.2.3 误差校正
  6. 5总结
  7. 6参考文献
  8. 7修订历史记录

CRC 计算

从先前经过初始化并存储在存储器中的 CRC 表中检索字节值,而不是使用多个异或运算。

/**
 * 基于先前存储在存储器中的查找表进行 CRC 计算。
 *
 * \详细信息:通过对表数据(这些数据是通过对多项式进行按位异或运算而得到并存储在存储器中的)
 * 进行异或运算来计算出 CRC 值。
 *
 * \参数 uint8_t *data 是指向数据数组的指针。
 * \参数 uint32_t length 是数据数组的长度。 
 *
 * \返回 CRC 计算得到的 crc_t remainder。
 */
crc_t tableCRCcalc(uint8_t *data, uint32_t length)
{
    crc_t remainder = REMAINDER_INIT;
    uint32_t byte, u32i;
    
    for(u32i = 0; u32i < length; u32i++)                   // 对于数据包中的每个字节
    {
        byte = data[u32i] ^ (remainder >> (WIDTH - 8));
        remainder = crcTable[byte] ^ (remainder << 8);     // 针对字节余数
                                                           //    执行表查找
    }
    return remainder;
}