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計算を設定するには、プロジェクト>オプション>リンカ>チェックサム で以下設定を行ってください。
- 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サポートにお問い合わせください。
全ての製品名は、それぞれの所有者の商標または登録商標です