STM32 하드웨어와 동일한 방식으로 IAR ELF Tool을 사용해 CRC32 계산하기
기술노트 64424
아키텍처:
Arm
컴포넌트:
general
업데이트:
2021-06-04 오전 4:32
소개
본 기술 노트는 STMicroelectronics의 STM32 디바이스의 내장 하드웨어 CRC 계산기와 동일한 방식으로 CRC32를 계산하도록 ielftool.exe
를 설정하는 방법을 설명합니다.
논의
설정은 사용하시는 IAR Embedded Workbench for ARM 버전마다 다를 수 있습니다.
본 기술 노트에서는 버전 6.40 (혹은 상위 버전)에서의 ielftool.exe
설정에 대해서 설명합니다.
IAR ELF Tool 설정
IDE에서 CRC 계산을 설정하기 위해, Project>Options>Linker>Checksum 를 선택하고 다음과 같이 설정하시기 바랍니다:
- 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
STM32F10x를 위한 예제
다운로드:
예제 프로젝트에서 발췌한 소스코드
이 소스 코드는 STM32 디바이스의 내장 하드웨어 CRC32 계산기가 CRC32 값을 계산하는 방법을 보여줍니다. 그런 다음 디바이스에서 계산한 CRC32 값을 ielftool.exe
에서 계산한 CRC32 값과 비교합니다.
#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
}
...
}
결론
본 기술 노트는 IAR Embedded Workbench for ARM 버전 6.40 (혹은 상위 버전)에서 CRC 계산(ielftool.exe
와 STM32 하드웨어)에 대해 설명합니다.
사용하시는 IAR Embedded Workbench for ARM 버전이 본 기술 노트에서 다루지 않는다면, IAR Systems 지원팀에 연락하여 지원을 받으세요.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.