 Hello and welcome to this presentation of the STM32L4 Ciclic Redundancy Check or CRC Peripheral. All the features of this unit, which is used to generate an error-detecting code, will be presented hereafter. CRC stands for Ciclic Redundancy Check. The CRC calculation unit is used to get a CRC code on 8, 16 and 32-bit data using a configurable generator polynomial value and size. The CRC-based techniques can be used to verify data transmission or storage integrity. The CRC calculation can also be used to compute the signature of the application software during run time to be compared with a reference signature generated at link time and stored at a given memory location. Thanks to the full configurability of the STM32CRC peripheral, software overhead is reduced to a minimum. Additionally, DMA can be used for back-to-back CRC calculations over a large block of data, while the CPU is performing other tasks or put in sleep mode. The CRC peripheral integrated in the STM32 features a fully programmable odd-value polynomial with a programmable size of 7, 8, 16 or 32 bits. The initial value is also fully programmable, allowing for very flexible run time CRC code generation. The peripheral can be configured to support the big or little endian formats of the input and output data for support of various communication protocols. The CRC peripheral is connected to the AHB bus interface for an optimal performance. It contains a single 32-bit register, which is used for both writing and reading by either the CPU or DMA peripheral. The initial value, input-output bit reversal and polynomial coefficients are configured by the software during the initialization phase before starting a new CRC calculation. The CRC computation engine will hold the result of any previous CRC calculation, which then becomes the initial value for the next calculation, thus allowing a new CRC computation of data block. The input and output format is fully configurable to reduce the software overhead. It allows applications to manage different endian schemes. The input data can be reversed and performed on 8 bits, 16 bits and 32 bits, depending on the rev in 1 to 0 bits in the CRC CR register. For example, input data 0x1a2b3c4d is used for CRC calculation as 0x58d43cb2 with bit reversal done by byte, 0xd458b23c with bit reversal done by half word, or 0xb23cd458 with bit reversal done on the full word. The output data can also be reversed by setting the rev-out bit in the CRC CR register. The operation is done at bit level. For example, output data 0x11223344 is converted into 0x22cc4488. The CRC data register includes an input buffer, which allows for immediate writes by the CPU or DMA peripheral of a second data word without waiting for any weight states due to an active CRC computation. The CRC data register can be accessed by word, write-aligned half word and write-aligned byte. The duration of the computation depends on the data width. For AHB clock cycles for 32-bit, two AHB clock cycles for 16-bit, and one AHB clock cycle for 8-bit. DMA can be used for writing to the CRC engine. This offloads the CPU for other tasks and can be used for back-to-back calculations for verifying code or data integrity. This shows a summary of the power modes in which the CRC peripheral is available. The CRC peripheral needs the main AHB clock to operate.