25.7.8.3 CRC/Checksum Modes

The CHCTRLCRCk.CRCMD[2:0] controls the type of CRC/Checksum operation to perform.

CRC-16 IBM/ANSI

Setting CRCMD to 0 configures the CRC engine in CRC-16 (IBM/ANSI) mode. This CRC is commonly used for USB and ANSI X3.28 protocol.

Polynomial (0x8005):

x16 + x15 + x2 +1

CRC-16 CCITT

Setting CRCMD to 1 configures the CRC engine in CRC-16-CCITT mode. This CRC is commonly used for Bluetooth and Secure Digital cards.

Polynomial (0x1021): x16 + x12 + x5 +1

Custom 16-bit CRC

When CRCMD=2 the CRC engine uses the 16-bit polynomial from register CRCPOLYA. If CRCMD=3, the CRC engine uses the 16-bit polynomial from register CRCPOLYB. The user is expected to program CRCPOLYA/B with the polynomial as described in Polynomial Registers.

CRC-32

Setting the CRCMD to 4, configures the CRC engine in CRC-32 mode for this channel. This CRC is commonly used for Ethernet and MPEG2.

Polynomial (0x04C11DB7):

x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x +1

Note: Typical implementations of CRC-32 require an initialization value of 0xFFFFFFFF as well as setting CRCXOR=1 and CRCROUT=1 for the channel.
For More information, refer to:
  • Reflected Output
  • XOR Output
  • CRC Data

Custom 32-bit CRC

When CRCMD=5 the CRC engine uses the 32-bit polynomial from register CRCPOLYA. If CRCMD=6, the CRC engine uses the 32-bit polynomial in register CRCPOLYB. The user is expected to program CRCPOLYA/B with the polynomial as described in Polynomial Registers.

IP Header Checksum

When CRCMD is set to 7 for the channel, the CRC engine implements an Checksum calculation. See Checksum Calculations for details on how the calculation is done.