SBAA106A 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.   Trademarks
  2. 1Introduction
  3. 2Simple Checksum
    1. 2.1 Checksum Code Example
  4. 3CRC
    1. 3.1 CRC Generic Computations
      1. 3.1.1 Using XOR Bitwise Computation
      2. 3.1.2 Using Lookup Tables
        1. 3.1.2.1 Table Initialization
        2. 3.1.2.2 CRC Computation
      3. 3.1.3 CRC Computation Differences Between the ADS122U04 and ADS122C04
        1. 3.1.3.1 Byte Reflection Example
        2. 3.1.3.2 Reassembling Data Using Byte Reflection for CRC Computation
  5. 4Hamming Code
    1. 4.1 Hamming Code Computation
      1. 4.1.1 Hamming Code Computation Example
        1. 4.1.1.1 Counting Bits for Parity and Checksum Computations
          1. 4.1.1.1.1 Example of Counting Set Bits in the Data
          2. 4.1.1.1.2 Example of Counting Set Bits Using a Lookup Table
      2. 4.1.2 Validation of Transmitted Data
        1. 4.1.2.1 Hamming Validation
        2. 4.1.2.2 Checksum Validation
        3. 4.1.2.3 Error Correction
  6. 5Summary
  7. 6References
  8. 7Revision History

Checksum Validation

The checksum is computed from the received data and compared to the checksum value transmitted by using a bitwise XOR. A checksum error occurs if a nonzero value is computed from the XOR. The checksum used for the ADS131A0x differs from the computation for the ADS1259 discussed in Section 2.1.

/**
 * Computation and verification of the checksum from the Hamming byte.
 *
 * \details Computation of checksum bits using a checksum bit mask and counting
 * the number of bits set in the masked value.
 *
 * \param    uint32_t in of the value to be computed and compared.
 *
 * \returns  uint32_t Returns 0 if a match or non-zero for a failure.
 */
uint32_t checkSum(uint32_t in)
{
    // Compute the checksum for the data after stripping out the hamming/checksum byte
    // compare the the computed checksum with the hamming/checksum byte by XORing
    // the result should be '0' for a proper checksum.  Remember to compare after moving
    // the checksum left by 1 to place the checksum in the proper position.  Also remove
    // all other bits in the compare that are not checksum by ANDing with 
    // 0x06 (0x03 shifted left by one)
    return (in ^ ((countBits(in & CHECKSUM_BIT_MASK) << 1))) & 0x06;
}