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
对汉明码 (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 位校验和数据来验证结果是否显示单个位或多位错误。
图 4-1 中的表数据显示了每个汉明位的奇偶校验位覆盖情况,其中汉明位在数据中交错。表中的每一行指示每个汉明位中包含哪些数据位。请注意,在该表显示的位中,表左侧是最低有效位,右侧是最高有效位。检查的位在列中指示,行表示汉明奇偶校验位。该表中的信息可用于确定每个汉明位的汉明掩码。汉明掩码用于验证与掩码关联的汉明位。该掩码仅包含用于特定汉明位的数据位。在将表转换为计算中使用的汉明掩码时,从左到右读取 32 位值,数据将排除掩码中的汉明位。
与 ADS131A0x 器件之间的数据传输顺序是从数据的最高有效位 (msb) 到最低有效位 (lsb)。传输数据后,汉明位将跟随在字节中。如图 4-1 所示,汉明位未在输出中交错。相反,汉明位作为单独的字节附加到器件数据的传输中。汉明位值仍将遵循相同的模式和计算方式,但按照设计将汉明字节放置在数据之后。通过将汉明字节设置为传输的最低有效字节 (LSB),用户可以在需要时轻松忽略该字节,或者在禁用时完全不传输该字节。这样一来,无论是否启用汉明码,器件数据都能够以相同的方式显示。汉明字节还包含数据的校验和,该校验和是一个 2 位值(C1 和 C0),表示设置为“1”的位的数量。最低有效位 (F0) 是一个值为“0”的固定常数。传输的数据和汉明字节具有如图 4-2 所示的格式。
在计算汉明位奇偶校验时,每个汉明位将遵循表 4-1 中所示的模式,其中每个位都可以通过屏蔽掉未计算的位的方式来确定。使用这种方法极大地简化了数据传输验证的计算。
汉明位 | 掩码值(32 位) |
---|---|
H0 | 00DAB555h |
H1 | 00B66CCCh |
H2 | 0071E3C3h |
H3 | 000FE03Fh |
H4 | 00001FFFh |
在计算“1”位的数量并与适当的汉明奇偶校验位进行比较时,多次将掩码应用于数据。在奇偶校验计算中没有汉明位包含任何其他汉明位,因此允许对这些位进行掩码。此外,每个数据位都由多个汉明位进行检查。可能会发生某个汉明位错误,但如果在其他汉明位检查中验证了数据位,则会指示该错误。如果某个数据位出错,则在奇偶校验中会有多个汉明位指示该错误。在将奇偶计算与汉明位进行比较时,差异将直接指向出错的数据位。
为了演示该计算,下面提供了一个使用值 AC9538h 的 24 位数据示例。每个汉明位的结果如表表 4-2 所示。计算过程如下:
汉明位 | 数据(十六进制) | 掩码(十六进制) | 结果(十六进制) | 测试(二进制) | 位数 | 汉明值 |
---|---|---|---|---|---|---|
H0 | AC 95 38 | DA B5 55 | 88 95 10 | 1000 1000 1001 0101 0001 0000 | 7(奇数) | 1 |
H1 | AC 95 38 | B6 6C CC | A4 04 08 | 1010 0100 0000 0100 0000 1000 | 5(奇数) | 1 |
H2 | AC 95 38 | 71 E3 C3 | 20 81 00 | 0010 0000 1000 0001 0000 0000 | 3(奇数) | 1 |
H3 | AC 95 38 | 0F E0 3F | 0C80 38 | 0000 1100 1000 0000 0011 1000 | 6(偶数) | 0 |
H4 | AC 95 38 | 00 1F FF | 00 15 38 | 0000 0000 0001 0101 0011 1000 | 6(偶数) | 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”。