Calculating CRC32 with IAR ELF Tool the same way as STM32 hardware
Technical Note 64424
Architectures:
Arm
Component:
general
Updated:
10/11/2017 4:29 PM
Introduction
This technical note describes how to configure ielftool.exe
to calculate CRC32 the same way as the built-in hardware CRC32 calculator of STM32 devices from STMicroelectronics.
Discussion
The settings might depend on which version of IAR Embedded Workbench for ARM you are using.
This technical note will describe the ielftool.exe
settings for version 6.40 (and later).
IAR ELF Tool settings
To configure the CRC32 calculation in the IDE, choose Project>Options>Linker>Checksum and set these settings:
- Checksum size: 4 bytes
- Alignment: 4
- Algorithm: CRC32 (0x4C11DB7)
- Complement: As is
- Bit order: MSB first
- [deselected] Reverse byte order within word
- Initial Value: 0xFFFFFFFF
- [deselected] Use as input
- Checksum unit size: 32-bit
Example project for STM32F10x
Click to download:
Source code extract from the example project
This source code shows how the built-in hardware CRC32 calculator of STM32 devices is invoked to calculate the CRC32 value. The CRC32 value calculated by the device is then compared to the CRC32 value calculated by ielftool.exe
.
#include "stm32f10x_crc.h"
extern uint32_t __checksum;
uint32_t calcCrc32(uint8_t* data, uint32_t len)
{
uint32_t* pBuffer = (uint32_t*) data;
uint32_t BufferLength = len/4;
uint32_t index = 0;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
CRC_ResetDR();
for(index = 0; index < BufferLength; index++)
{
CRC->DR = pBuffer[index];
}
return CRC->DR;
}
void main(void)
{
...
uint32_t valCrc32 =
calcCrc32((uint8_t*)0x08000000, 0x040000 - 4);
if (valCrc32 == __checksum)
{
// TBD
}
else
{
// TBD
}
...
}
Conclusion
This technical note describes CRC32 calculation (ielftool.exe
and STM32 hardware), using version 6.40 (or newer) of IAR Embedded Workbench for ARM.
If your version of IAR Embedded Workbench for ARM is not covered by this technical note, contact IAR Systems support for assistance.
All Product names are trademarks or registered trademarks of their respective owners.