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

テクニカル・ノート 64424

アーキテクチャ:

Arm

コンポーネント:

general

更新日:

2017/12/05 8:02

はじめに

このテクニカルノートでは、STマイクロエレクトロニクス社のSTM32デバイスに搭載されたハードウェアCRC32演算器と同じ方法でCRC32を計算するようにIAR ELFツールを設定する方法について説明します。

解説

設定は、使用しているARM用IAR Embedded Workbenchのバージョンによって異なる場合があります。

このテクニカルノートでは、バージョン6.40(およびそれ以降)のIAR ELFツールの設定について説明します。


IAR ELFツールの設定

IDEでCRC32計算を設定するには、プロジェクト>オプション>リンカ>チェックサム で以下設定を行ってください。

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 のサンプルプロジェクト

以下からダウンロードしてください:

 

サンプルプロジェクトのソースコード抜粋

このソースコードは、CRC32値を計算するために、STM32デバイス搭載のハードウェアCRC32演算器がどのように呼び出されるかを示しています。 その後、デバイスによって計算されたCRC32値は、IAR ELFツールによって計算された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
}

...
}

まとめ

このテクニカルノートではARM用IAR Embedded Workbenchバージョン6.40(またはそれ以降)を使用したCRC32計算(IAR ELFツールおよびSTM32ハードウェア)について説明します。
使用しているARM用IAR Embedded Workbenchのバージョンがこのテクニカルノートでカバーされていない場合は、IAR Systemsサポートにお問い合わせください。

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

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