1.14.8 Cyclic Redundancy Check (CRC)

The 32-Bit Programmable Cyclic Redundancy Check (CRC) module is a software-configurable CRC generator. The module provides a hardware implemented method of quickly generating checksums for various communication and security applications. The CRC engine calculates the CRC checksum without CPU intervention; moreover, it is much faster than the software implementation.

Using The Library

CRC calculation for a memory range can be started after setting up the CRC engine using the CRC_CRCSetup() function. The initial seed value used for the CRC calculation must be passed to CRC_CRCCalculate() function along with the buffer and length of buffer on which CRC has to be calculated. This value will usually be 0xFFFFFFFF, but can be, for example, the result of a previous CRC calculation if generating a common CRC of separate memory blocks. Once completed, the calculated CRC value is returned.

Here is an example code to calculate a 32-Bit CRC

#define BUFFER_SIZE 9

const uint8_t srcBuffer[BUFFER_SIZE] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
    
CRC_SETUP crcSetup = {0};

crcSetup.reverse_crc_input = true;
crcSetup.polynomial_length = 32;
crcSetup.polynomial = 0x04C11DB7;
crcSetup.reverse_crc_output = true;
crcSetup.final_xor_value = 0xFFFFFFFF;

CRC_CRCSetup(crcSetup);

// Expected CRC32 with above configurations and Input String - 0xCBF43926

crc_32 = CRC_CRCCalculate((void *)srcBuffer, BUFFER_SIZE, 0xFFFFFFFF);

Library Interface

Cyclic Redundancy Check peripheral library provides the following interfaces:

Functions

Name Description
CRC_CRCSetup CRC setup and enable function
CRC_CRCCalculate Function to calculate CRC
CRC_CRCEnable CRC enable function

Data types and constants

Name Type Description
CRC_SETUP Struct Fundamental data object that represents CRC setup parameters