STM32G0 - CRC
巡回冗長検査計算ユニット
レビジョン 1.0

STM32 巡回冗長検査計算ユニットのプレゼンテーションへようこそ。ここでは、エラー検出に使用されるコードを生成するこのユニットのすべての機能について説明します。

1

概要

2

AHBバス
32ビット（読出しアクセス）

データ･レジスタ（出力）CRC 計算エンジン
多項式
リセット／初期値
ビット反転（入力／出力）
バッファ付きデータ･レジスタ（入力）32ビット（書込みアクセス）• 8、16、または32ビット･データからのCRC
コードの生成に使用• 完全に設定可能な奇数の多項式• プログラム可能なサイズ• 完全な可逆性のある入出力データ

アプリケーション側の利点• データ整合性を検証• ソフトウェア･コードの署名を生成• CPUとDMA のどちらでも簡単に使用可能

CRC とは巡回冗長検査のことです。CRC 計算ユニットは、設定可能な多項式の値とサイズを使用して 8、16、32 ビットデー
タに CRC コードを生成するために使用されます。CRC に基づ
くテクニックは、データ転送やストレージの整合性を確認するために使用できます。
また、CRC 計算は、実行時にアプリケーションソフトウェアの署名の計算にも使用できます。この計算された署名は、リンク時に生成されて特定のメモリ領域に保存された照合用の署名と比較されます。
STM32 CRC 計算ユニットは完全に設定可能なため、ソフトウェアのオーバーヘッドは最小限に抑えられます。 また、DMA コントローラを使用して、CPU が他のタスクを実行していたり、SLEEP モードにある間に、大きなデータブロックに対する連続 CRC 計算を実行できます。

2

主な機能

3

• 完全にプログラム可能な奇数の多項式：• デフォルトでは、次のCRC-32（Ethernet）多項式を使用：0x04C11DB7• これは x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 という多項式を表す• プログラム可能な多項式のサイズ（7、8、16、32ビット）• プログラム可能な初期値（デフォルト = 0xFFFFFFFF）• 入出力データ用の各種エンディアン方式

STM32 に搭載されている CRC 計算ユニットは、7、8、16、32ビットのサイズにプログラムできることに加え、完全にプログラム可能な奇数の多項式を特徴としています。
初期値もまた、完全にプログラム可能であり、非常に柔軟性の高い実行時 CRC コード生成が可能になっています。
ペリフェラルは、ビッグエンディアン形式またはリトルエンディアン形式の入出力データに対応するように設定でき、各種通信プロトコルをサポートしています。

3ブロック図

4

AHBバス
32ビット（読出しアクセス）

データ･レジスタ（出力）

リセット／初期値
ビット反転（入力／出力）

CRC計算エンジン

多項式

バッファ付きデータ･レジスタ（入力）32 ビット（書込みアクセス）

CRC 計算ユニットは、最高のパフォーマンスを実現するために、AHB バスインタフェースに接続されています。
このユニットには、CPU または DMA コントローラのいずれかによる書込みおよび読出しの両方のために使用される 32 ビットレジスタが 1 つ含まれています。
初期値、入出力ビット反転、および多項式係数は、新しいCRC 計算を開始する前の初期化フェーズ中にソフトウェアによって設定されます。 CRC 計算エンジンは、以前の CRC 計算の結果をすべて保持しています。これが次の計算の初期値になるため、データブロックの新しい CRC 計算が可能になります。

4

入出力フォーマット

5

ソフトウェア･オーバーヘッドを削減• 入力データは8、16、または32ビット単位で反転可能• CRC_CRレジスタの REV_IN[1:0] 値に依存
• たとえば、入力データ0x1A2B3C4D は、CRC計算では以下のように使用される。
• 0x58D43CB2（バイト単位でビットが逆転）• 0xD458B23C（ハーフワード単位でビットが逆転）• 0xB23CD458（フルワードでビットが逆転）• 出力データは32ビット単位で反転可能

0x11223344
0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 1 0 0• CRC_CRレジスタのREV_OUTビットをセット

31• 出力データ0x11223344の例は右記のとおり：

0 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 000x22CC4488

入出力フォーマットは、ソフトウェアのオーバーヘッドを削減するために完全に設定可能です。そのため、アプリケーションは各種エンディアン方式の管理が可能です。
入力データは、CRC_CR レジスタの REV_IN[1:0] ビットに応じて、8、16、または 32 ビット単位で反転および実行できます。
たとえば、入力データ 0x1A2B3C4D は、CRC 計算では以下のように使用されます。
• 0x58D43CB2（バイト単位でビットが逆転）• 0xD458B23C（ハーフワード単位でビットが逆転）• 0xB23CD458（フルワードでビットが逆転）
また、出力データも、CRC_CR レジスタの REV_OUT ビットをセットすることによって逆にすることができます。
操作はビットレベルで行われます。たとえば、出力データ0x11223344 は 0x22CC4488 に変換されます。

5性能6• 単一の入出力32ビット･データ･レジスタによって容易なファームウェア処理を実現• AHBバスが停止しない連続書込み可能な入力バッファ• CRC計算の時間は入力データ幅に依存：• 32ビットブロックの場合、4 AHBクロックサイクル• 16ビットブロックの場合、2 AHBクロックサイクル• 8ビットブロックの場合、1 AHBクロックサイクル• CPUがSLEEPモードのときにDMAによる書込みが可能• 低消費電力処理（連続計算）で、CPUは時間要求の厳しいタスクのために解放

CRC データレジスタには入力バッファが含まれており、実行中のCRC 計算による待ち状態を待つことなく、CPU またはDMA ペリフェラルによって 2 番目のデータワードを即座に書き込むことができます。
CRC データレジスタは、ワード、右詰めのハーフワード、右詰めのバイトによってアクセスできます。
計算の時間はデータ幅に依存します。
• 32 ビットブロックの場合、4 AHB クロックサイクル• 16 ビットブロックの場合、2 AHB クロックサイクル• 8 ビットブロックの場合、1 AHB クロックサイクル
DMA コントローラは、CRC エンジンへの書込みに使用できます。これにより、CPU が別のタスクのためにオフロードされるため、コードまたはデータ整合性を検証するための連続計算に使用できます。

6

低消費電力モードモード

7

説明

RUN

アクティブ

低消費電力RUN

アクティブ

SLEEP

アクティブ。DMAコントローラはCRC計算に使用可能

低消費電力SLEEP

アクティブ。DMAコントローラはCRC計算に使用可能

STOP

STOP 0、STOP 1およびSTOP 2モードで停止。ペリフェラルレジスタの内容は保持される

STANDBY

パワーダウン状態です。CRCユニットは、STANBYモード終了後に再初期化する必要がある

SHUTDOWN

パワーダウン状態。CRCユニットは、SHUTDOWNモード終了後に再初期化する必要がある

このスライドでは、CRC 計算ユニットを使用可能な電源モードの概要を示しています。 CRC 計算ユニットが動作するには、メイン AHB クロックが必要です。

7