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
根据接收到的数据计算出校验和,然后使用按位异或运算将其与传输的校验和值进行比较。如果通过异或计算出非零值,则表示发生了校验和错误。用于 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;
}