K60 하드웨어 에서 CRC32 계산

기술노트 85753

아키텍처:

ARM

컴포넌트:

general

업데이트:

2021-06-04 오전 4:22

소개

Freescale의 K60 디바이스는 하드웨어 CRC32 계산기를 내장하고 있습니다. (이는 알고리즘을 위해 코드 영역을 사용하지 않아도 프로그램에서 CRC32 계산을 사용할 수 있다는 것을 의미합니다).

IAR Embedded Workbench for ARM 버전 6.60 을 위한 방법

6.60 에서 옵션

옵션은 Project > Options > Linker > Checksum에서 ielftool 를 활성화 하여 하드웨어와 동일한 방식으로 CRC32 계산을 K60 디바이스에서 수행할 수 있습니다.

옵션은 다음과 같이 설정되어야 합니다:

Size: 4 bytes
Alignment: 4
Algorithm: CRC32(0x4C11DB7)
Complement: As is
Bit order: MSB first
[ ]Reverse byte order within word [unchecked]
Initial Value: 0x0
[X]Use as input [checked]
Checksum unit size: 32-bit

K60를 위한 예제

이 예제는 소스 코드, 링커 설정파일 및 링커 옵션 대화 상자의 해당 설정을 보여줍니다.

  • Source code (snippet)
  • extern uint32_t __checksum;
    uint32_t valCrc32;

    uint32_t calcCrc32(uint32_t* data, uint32_t len, uint32_t startValue)
    {
    uint32_t result=0;
    uint32_t *memptr;

    memptr = data;

    SIM_SCGC6 |= SIM_SCGC6_CRC_MASK;

    CRC_CTRL = CRC_CTRL_WAS_MASK | CRC_CTRL_TCRC_MASK; /* 32bit CRC */
    CRC_CRC = startValue; /* Seed */
    CRC_CTRL = CRC_CTRL_TCRC_MASK; /* 32bit CRC */
    CRC_GPOLY = 0x04C11DB7; /* Poly to match
    IAR 32-bit default */
    for (uint32_t i=0; i < len; i++)
    {
    CRC_CRC = *memptr++;
    }

    result = CRC_CRC;

    return result;
    }

    void main (void)
    {
    // ROM content
    uint32_t start_address = 0x410;
    uint32_t end_address = 0x2ffb;

    uint32_t len = (end_address + 1 - start_address) / 4;

    valCrc32 = calcCrc32((uint32_t*)start_address, len, 0x0);

    if (valCrc32 == __checksum)
    {
    // TBD
    }
    else
    {
    // TBD
    }

    // ROM content, including checksum

    len++;

    valCrc32 = calcCrc32((uint32_t*)start_address, len, 0x0);

    if (valCrc32 == 0)
    {
    // TBD
    }
    else
    {
    // TBD
    }
    }
  • Linker configuration file (snippet)
  • define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
    define symbol __ICFEDIT_region_ROM_end__ = 0x00002ffb;

    "CHECKSUM":
    place at address mem:0x00002ffc { readonly section .checksum };
    keep { section .checksum};
  •  Linker options dialog

 

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

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