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修订历史记录

校验和验证

根据接收到的数据计算出校验和,然后使用按位异或运算将其与传输的校验和值进行比较。如果通过异或计算出非零值,则表示发生了校验和错误。用于 ADS131A0x 的校验和与Topic Link Label2.1中讨论的用于 ADS1259 的计算不同。

/**
 * 计算以及验证汉明字节中的校验和。
 *
 * \详细信息:通过使用校验和位掩码并计算掩码值中
 * 置 1 的位的数量来计算校验和位。
 *
 * \参数 uint32_t in 是要计算和比较的值。
 *
 * \返回值 uint32_t 针对匹配返回 0,针对失败返回非零值。
 */
uint32_t checkSum(uint32_t in)
{
    // 在去除汉明/校验和字节后计算数据的校验和。
    // 通过异或的方式将计算出的校验和与汉明/校验和字节进行比较,
    // 如果校验和正确,则结果应为“0”。  必须在将校验和向左移动 1 位
    // 以将校验和放置在正确的位置之后再进行比较。  此外,
    // 通过与 0x06(将 0x03 左移 1 位得到的值)进行与运算来删除比较中不属于
    // 校验和的所有其他位
    return (in ^ ((countBits(in & CHECKSUM_BIT_MASK) << 1))) & 0x06;
}