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

汉明码

对汉明码 (HC) 的讨论仅限于如何使用 HC 对 ADC 进行数据完整性检查。HC 用于纠正传输的数据块中的某个位的错误,适用于验证小数据包,但无法检测所有多位错误,并且无法纠正多位错误。ADS131A0x 器件适用的汉明字节方案包括 HC 以及校验和位,可用于确定多位错误。

对于 ADS131A0x 器件,HC 由五位 (H0-H4) 组成,这些位与数据交错,如图 4-1 所示。奇偶校验用于确定 HC 中每个位相对于映射到数据的特定位的值。从概念上讲,HC 位在数据位内交错。结果是多个汉明位覆盖了每个数据位。这是对早期数据通信方式的改进,早期的数据通信仅使用单个奇偶校验进行数据验证。现在,HC 使用多个位来查找和纠正单个位错误。简单的奇偶校验计算涉及对数据包中 1 的数量进行计数,其中奇偶校验位将为 1 或 0,具体取决于是要进行奇校验还是偶校验。奇校验与奇数个 1 相关,偶校验与偶数个 1 相关。在 ADS131A0x 器件中,汉明位的设置实现了偶校验。

ADS131A0x 系列器件的数据字可以是 16 位或 24 位。汉明字节由五个汉明位组成,其中 H4 为最高有效位。在汉明位之后是两个校验和位。汉明字节的最低有效位是一个等于零的常数。数据字和汉明字节的总传输可以是 24 位或 32 位。在本文中,我们设定 32 位字长包括 24 位数据和汉明字节。

五个汉明位成为了数据字的一部分,并与每个位的奇偶校验表示进行比较,使汉明奇偶校验的组合至少覆盖数据位两次,这样一来,如果某个位不正确,则可以通过其余的汉明奇偶校验位进行重建。为了检查多个位是否有错误,使用 2 位校验和数据来验证结果是否显示单个位或多位错误。

GUID-49EC4C10-13F2-42CA-8501-13513D2597E2-low.png图 4-1 计算出的 ADS131A0x 汉明码

图 4-1 中的表数据显示了每个汉明位的奇偶校验位覆盖情况,其中汉明位在数据中交错。表中的每一行指示每个汉明位中包含哪些数据位。请注意,在该表显示的位中,表左侧是最低有效位,右侧是最高有效位。检查的位在列中指示,行表示汉明奇偶校验位。该表中的信息可用于确定每个汉明位的汉明掩码。汉明掩码用于验证与掩码关联的汉明位。该掩码仅包含用于特定汉明位的数据位。在将表转换为计算中使用的汉明掩码时,从左到右读取 32 位值,数据将排除掩码中的汉明位。

与 ADS131A0x 器件之间的数据传输顺序是从数据的最高有效位 (msb) 到最低有效位 (lsb)。传输数据后,汉明位将跟随在字节中。如图 4-1 所示,汉明位未在输出中交错。相反,汉明位作为单独的字节附加到器件数据的传输中。汉明位值仍将遵循相同的模式和计算方式,但按照设计将汉明字节放置在数据之后。通过将汉明字节设置为传输的最低有效字节 (LSB),用户可以在需要时轻松忽略该字节,或者在禁用时完全不传输该字节。这样一来,无论是否启用汉明码,器件数据都能够以相同的方式显示。汉明字节还包含数据的校验和,该校验和是一个 2 位值(C1 和 C0),表示设置为“1”的位的数量。最低有效位 (F0) 是一个值为“0”的固定常数。传输的数据和汉明字节具有如图 4-2 所示的格式。

GUID-801A803B-B53D-4A44-9376-8DC01F4E77EB-low.png图 4-2 传输的 ADS131A0x 数据汉明码

在计算汉明位奇偶校验时,每个汉明位将遵循表 4-1 中所示的模式,其中每个位都可以通过屏蔽掉未计算的位的方式来确定。使用这种方法极大地简化了数据传输验证的计算。

表 4-1 汉明位掩码
汉明位 掩码值(32 位)
H000DAB555h
H100B66CCCh
H20071E3C3h
H3000FE03Fh
H400001FFFh

在计算“1”位的数量并与适当的汉明奇偶校验位进行比较时,多次将掩码应用于数据。在奇偶校验计算中没有汉明位包含任何其他汉明位,因此允许对这些位进行掩码。此外,每个数据位都由多个汉明位进行检查。可能会发生某个汉明位错误,但如果在其他汉明位检查中验证了数据位,则会指示该错误。如果某个数据位出错,则在奇偶校验中会有多个汉明位指示该错误。在将奇偶计算与汉明位进行比较时,差异将直接指向出错的数据位。

为了演示该计算,下面提供了一个使用值 AC9538h 的 24 位数据示例。每个汉明位的结果如表表 4-2 所示。计算过程如下:

  1. H0 计算:对数据应用 H0 的掩码 (AC9538h & 00DAB55h = 889510h)
  2. 求第 1 步中结果的奇偶校验位(889510h 有 7 个 1,所以奇偶性是奇,H0 变为 1 使总奇偶性为偶)
  3. 对 H1 至 H4 汉明位重复执行步骤 1 和 2

表 4-2 汉明位计算示例
汉明位数据(十六进制)掩码(十六进制)结果(十六进制)测试(二进制)位数汉明值
H0AC 95 38DA B5 5588 95 101000 1000 1001 0101 0001 00007(奇数)1
H1AC 95 38B6 6C CCA4 04 081010 0100 0000 0100 0000 10005(奇数)1
H2AC 95 3871 E3 C320 81 000010 0000 1000 0001 0000 00003(奇数)1
H3AC 95 380F E0 3F0C80 380000 1100 1000 0000 0011 10006(偶数)0
H4AC 95 3800 1F FF00 15 380000 0000 0001 0101 0011 10006(偶数)0

校验和位的计算基于数据二进制表示中“1”值的数量。继续使用十六进制数据 AC 95 38h,将该十六进制值转换为二进制,并计算代表该值的“1”的数量。二进制转换结果为“1010 1100 1001 0101 0011 1000b”,出现的“1”的数量为十进制 11。值 11 用二进制表示为“1011b”。通过将全部 24 个数据位相加并按 4 取模来计算校验和。为了简化计算并避免按 4 取模数学运算,仅使用两个最低有效位作为校验和位。在本例中,校验和仅为“11b”。

整个汉明/校验和字节将采用图 4-2 所示的格式,即 H4、H3、H2、H1、H0、C1、C0、0。对于使用 0xAC9538 的示例,汉明/校验和字节的位二进制表示变为“0011 1110b”。