K60 のハードウェアを使用した CRC32演算

テクニカル・ノート 85753

アーキテクチャ:

ARM

コンポーネント:

general

更新日:

2018/08/25 15:03

はじめに

FreescaleのK60デバイスには、ハードウェアのCRC32計算機が内蔵されています(アプリケーションでCRC32を使用する際、CRC32計算アルゴリズムのためのコード空間を確保する必要がありません)。

IAR Embedded Workbench for ARMバージョン6.60の解決方法

6.60のオプション

プロジェクト(Project) > オプション(Options) > リンカ(Linker) > チェックサム(Checksum)に、K60デバイスに内蔵されているハードウェアと同じ方法でielftoolにCRC32を計算させるためのオプションが追加されました。

このオプションを以下のように設定します。

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の例

ここでは、ソースコード、リンカ設定ファイル、およびリンカオプションダイアログにおける設定の例を示します。

  • ソースコード(抜粋)
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
 }
}
リンカ設定ファイル(抜粋)
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};

 

  •  リンカオプションダイアログ

 

 

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。