ZHCSHA1C November 2019 – July 2020 ADS8686S
PRODUCTION DATA
ADS8686S 具有通信自检模式和循环冗余校验 (CRC) 模式。这些功能有助于诊断主机与器件之间的任何数字接口问题。
通过在通道寄存器中对通信自检通道编程,可启用通信自检(请参阅Topic Link Label7.6 部分)。启用后,器件会强制转换结果寄存器输出已知的固定值。读取转换码时,输出代码 0xAAAA 作为 ADC A 的转换码,输出代码 0x5555 作为 ADC B 的转换码。此功能在软件运行模式下可用,但在硬件运行模式下不受支持。
ADS8686S 支持 CRC 校验和模式,可通过检测数据错误来提高接口稳健性。CRC 特性在软件(串行、字节和并行)模式和硬件(仅串行)模式下均可用。在硬件并行或硬件字节模式中,CRC 功能不可用。CRC 结果存储在状态寄存器中。启用 CRC 功能会启用状态寄存器,反之亦然。
在硬件模式下,ADS8686S 从完全复位释放时将 CRCEN 引脚设置为逻辑高电平,以启用 CRC 功能。当 RESET 引脚释放时,CRCEN 引脚的逻辑电平被锁存。需要完全复位才能退出该功能并设置替代配置。启用 CRC 后,状态寄存器的内容会附加到转换结果(有关 CRC 数据结构的详细信息,请参阅Topic Link Label7.6 部分中的 STATUS 寄存器)。
在软件模式下,通过将配置寄存器中的 CRCEN 位或 STATUSEN 位设置为 1,启用 CRC 功能。
如果启用 CRC 功能,则根据通道 AIN_nA 和通道 AIN_nB 的转换结果计算 CRC。根据器件的配置,在转换结果发送后,计算 CRC 并在串行、字节或者并行接口上传输。汉明距离根据转换结果中的位数而变化。如果转换结果中的位数小于或等于 119,则汉明距离为 4。如果超过 119 位,则汉明距离为 1(即始终检测到 1 位错误)。
以下是如何在 ADS8686S 中实现 CRC 的伪代码说明:
crc = 8’b0;
i = 0;
x = number of conversion channel pairs;
for (i=0, i<x, i++) begin
crc1 = crc_out(An,Crc);
crc = crc_out(Bn,Crc1);
i = i +1;
end
其中函数 crc_out(data, crc) 如下:
crc_out[0] = data[14] ^ data[12] ^ data[8] ^ data[7] ^ data[6] ^ data[0] ^ crc[0] ^ crc[4] ^ crc[6];
crc_out[1] = data[15] ^ data[14] ^ data[13] ^ data[12] ^ data[9] ^ data[6] ^ data[1] ^ data[0] ^ crc[1] ^ crc[4] ^ crc[5] ^ crc[6] ^ crc[7];
crc_out[2] = data[15] ^ data[13] ^ data[12] ^ data[10] ^ data[8] ^ data[6] ^ data[2] ^ data[1] ^ data[0] ^ crc[0] ^ crc[2] ^ crc[4] ^ crc[5] ^ crc[7];
crc_out[3] = data[14] ^ data[13] ^ data[11] ^ data[9] ^ data[7] ^ data[3] ^ data[2] ^ data[1] ^ crc[1] ^ crc[3] ^ crc[5] ^ crc[6];
crc_out[4] = data[15] ^ data[14] ^ data[12] ^ data[10] ^ data[8] ^ data[4] ^ data[3] ^ data[2] ^ crc[0] ^ crc[2] ^ crc[4] ^ crc[6] ^ crc[7];
crc_out[5] = data[15] ^ data[13] ^ data[11] ^ data[9] ^ data[5] ^ data[4] ^ data[3] ^ crc[1] ^ crc[3] ^ crc[5] ^ crc[7];
crc_out[6] = data[14] ^ data[12] ^ data[10] ^ data[6] ^ data[5] ^ data[4] ^ crc[2] ^ crc[4] ^ crc[6];
crc_out[7] = data[15] ^ data[13] ^ data[11] ^ data[7] ^ data[6] ^ data[5] ^ crc[3] ^ crc[5] ^ crc[7];
ADS8686S 使用的初始 CRC 字是一个等于零的 8 位字。执行上述代码中描述的 XOR 运算以计算转换结果 An 的 CRC 字的每一位。然后,以此 CRC 字 (crc1) 为起点,计算转换结果 Bn 的 CRC 字 (crc)。对于转换的每对通道,周期性重复该过程。
根据 ADS8686S 的运行模式,状态寄存器值附加到转换数据,并通过额外的读取命令经由串行、字节或并行接口读出。如前面代码所述,可以为接收的转换结果重复 XOR 计算,以检查两个 CRC 字是否匹配。图 7-22 描绘了在每种运行模式下如何将 CRC 字附加到数据。