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
正如概述中提到的,CRC 值是相对于数据传输的位顺序计算出的,因为它被移出器件。与“C”器件相比,“U”器件的数据传输有很大不同。“U”器件使用 UART 传输,数据以 LSB 优先的方式进行传输,而“C”器件使用 I2C 传输,数据以 MSB 优先的方式进行传输。如图 3-5 所示,在采用 MSB 优先的传输方式时,数据被读入微控制器外设并以与数据传输相同的方式重新组合(在使用大端字节序格式时)。
“U”器件的 CRC 计算遵循与图 3-3 中所示过程相同的过程。不过,“U”器件的不同之处在于移位寄存器首先从 LSB(而不是 MSB)开始。结果直接影响 CRC 计算和数据存储到存储器中的字节顺序。
当通过代码函数计算 CRC 时,了解数据存储的方法用处极大。例如,考虑一个由字节(8 位)可寻址位置构成的存储器。一个 32 位整数由四个相邻的字节组成。将该整数视为一个包含四个字节的数组。如果存储在数组第一个元素中的值是该整数的最高有效字节 (MSB),则该值以大端字节序的方式进行存储。如果最低有效字节 (LSB) 存储为数组的第一个元素,则该整数以小端字节序的方式进行存储。表 3-1 所示为有关 32 位值如何存储在存储器中的对比情况。当数据以 MSB 优先的方式进行传输时,传输顺序遵循大端字节序格式。相反,当数据以 LSB 优先的方式进行传输时,传输顺序遵循小端字节序格式。对于此处讨论的内容,微控制器将使用大端字节序格式。不过,在这两种方法中,字节数组元素的最高有效位都是第 7 位,最低有效位都是第 0 位。
32 位数据 | 存储器地址 | 大端字节序 | 小端字节序 |
---|---|---|---|
0A0B0C0Dh | 0h | 0Ah (MSB) | 0Dh (LSB) |
1h | 0Bh | 0Ch | |
2h | 0Ch | 0Bh | |
3h | 0Dh (LSB) | 0Ah (MSB) |
CRC 的计算仅基于数据传输位和字节的顺序。不过,LSB 优先的数据被传输到微控制器 UART 外设,在此处,接口将以 LSB 优先的方式移动数据,但存储器中的内容顺序将与其传输的顺序相反。传输的数据与存储器中的数据顺序相反,因此微控制器计算出的 CRC 值在位和字节顺序上都不正确。对于以 LSB 优先的方式传输的数据,必须对字节顺序和每个字节内的位顺序进行反转或反射才能进行计算(请参阅图 3-6)。
如果微控制器存储器采用大端字节序方式并且接收到的 UART 转换数据存储为有符号的 32 位整数,那么仅仅反转表示整数值的字节的顺序是不够的。部分原因是原始数据是 24 位(16 位器件为 16 位),而整数值进行了符号扩展。此外,大多数微控制器 UART 外设会在时钟脉冲下以 LSB 优先的方式将数据输入到 8 位移位寄存器中,但会以相反的方向将字节存储在存储器中。外设将在存储器中重新对齐位顺序,这是位传输顺序的相反顺序或是其的反射。不过,在计算数据包的 CRC 时,位的顺序和数量必须与传输的位的顺序和数量相匹配。例如,如果将 24 位转换结果存储为有符号的 32 位值,则在执行 CRC 计算时,必须使用已进行正确反射的原始二进制补码 3 字节数据,而不是已进行符号扩展的 4 字节有符号数。
作为所需步骤的示例,下面介绍了如何通过一个有符号 32 位整数数组 (sData) 创建一个表示 24 位转换数据的数组 (cData)。新数组 (cData) 用于计算 CRC,以便与从 ADS122U04 传输的 CRC 进行比较。
数组元素 | sData(32 位) | cData(24 位) | 反射后的 cData |
---|---|---|---|
0 | 00h | 78h (0111 1000b) | 1Eh (0001 1110b) |
1 | 4Eh | 68h (0110 1000b) | 16h (0001 0110b) |
2 | 68h | 4Eh (0100 1110b) | 72h (0111 0010b) |
3 | 78h | N/A | N/A |