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 를 선택하고 다음과 같이 설정하시기 바랍니다:

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

 

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 지원팀에 연락하여 지원을 받으세요.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.