4. CRC calculation unit

4.1 CRC introduction

The CRC (cyclic redundancy check) calculation unit is used to get a CRC code from a 32-bit data word and a fixed generator polynomial.

Among other applications, CRC-based techniques are used to verify data transmission or storage integrity. In the scope of the EN/IEC 60335-1 standard, they offer a way of verifying the flash memory integrity. The CRC calculation unit helps compute a signature of the software during runtime, to be compared with a reference signature generated at link-time and stored at a given memory location.

4.2 CRC main features

The block diagram is shown in Figure 7 .

Figure 7. CRC calculation unit block diagram

Block diagram of the CRC calculation unit. It shows a vertical stack of four components: AHB bus at the top, Data register (output) below it, CRC computation (polynomial: 0x4C11DB7) below that, and Data register (input) at the bottom. Arrows indicate data flow: a 32-bit (read access) arrow from the CRC computation block to the AHB bus, and a 32-bit (write access) arrow from the AHB bus to the Data register (input) block. There are also internal arrows between the Data register (output) and CRC computation blocks, and between the CRC computation block and Data register (input) block. The diagram is labeled ai14968 in the bottom right corner.
Block diagram of the CRC calculation unit. It shows a vertical stack of four components: AHB bus at the top, Data register (output) below it, CRC computation (polynomial: 0x4C11DB7) below that, and Data register (input) at the bottom. Arrows indicate data flow: a 32-bit (read access) arrow from the CRC computation block to the AHB bus, and a 32-bit (write access) arrow from the AHB bus to the Data register (input) block. There are also internal arrows between the Data register (output) and CRC computation blocks, and between the CRC computation block and Data register (input) block. The diagram is labeled ai14968 in the bottom right corner.

4.3 CRC functional description

The CRC calculation unit mainly consists of a single 32-bit data register, which:

Each write operation into the data register creates a combination of the previous CRC value and the new one (CRC computation is done on the whole 32-bit data word, and not byte per byte).

The write operation is stalled until the end of the CRC computation, thus allowing back-to-back write accesses or consecutive write and read accesses.

The CRC calculator can be reset to 0xFFFF FFFF with the RESET control bit in the CRC_CR register. This operation does not affect the contents of the CRC_IDR register.

4.4 CRC registers

The CRC calculation unit contains two data registers and a control register. The peripheral The CRC registers have to be accessed by words (32 bits).

4.4.1 Data register (CRC_DR)

Address offset: 0x00

Reset value: 0xFFFF FFFF

31302928272625242322212019181716
DR [31:16]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
DR [15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:0 Data register bits

Used as an input register when writing new data into the CRC calculator.
Holds the previous CRC calculation result when it is read.

4.4.2 Independent data register (CRC_IDR)

Address offset: 0x04

Reset value: 0x0000 0000

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.IDR[7:0]
rWrWrWrWrWrWrWrW

Bits 31:8 Reserved, must be kept at reset value.

Bits 7:0 General-purpose 8-bit data register bits

Can be used as a temporary storage location for one byte.

This register is not affected by CRC resets generated by the RESET bit in the CRC_CR register.

4.4.3 Control register (CRC_CR)

Address offset: 0x08

Reset value: 0x0000 0000

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.RESET
W

Bits 31:1 Reserved, must be kept at reset value.

Bit 0 RESET bit

Resets the CRC calculation unit and sets the data register to 0xFFFF FFFF.

This bit can only be set, it is automatically cleared by hardware.

4.4.4 CRC register map

Table 17. CRC calculation unit register map and reset values

OffsetRegister313029282726252423222120191817161514131211109876543210
0x00CRC_DRData register
Reset value0xFFFF FFFF
0x04CRC_IDRResResResResResResResResResResResResResResResResResResResResResResResResResIndependent data register
Reset value0x00000
0x08CRC_CRResResResResResResResResResResResResResResResResResResResResResResResResResResResResResResResRESET
Reset value0

Refer to Section 2.2 on page 66 for the register boundary addresses.