STM32WB - CRC
巡回冗長検査計算ユニット

1.0 版

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

1

概要
AHB バス
32bit （読出しアクセス）

データレジスタ（出力）2• 8、16、32bit データからの CRC コード生成に使用• 完全に設定可能な奇数多項式• プログラム可能なサイズ

CRC 計算エンジン

多項式• 入出力データは完全可逆

アプリケーション側の利点

リセット／初期値
ビット反転（入力／出力）
バッファ付きデータレジスタ（入力）32bit （書込みアクセス）• データ整合性を検証• ソフトウェアコードシグネチャを生成• CPU と DMA のどちらでも簡単に使用可能

CRC とは、巡回冗長検査のことです。CRC 計算ユニットは、設定可能な多項式値とサイズを用いて 8、16、32bit データの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、32bit）• プログラム可能な初期値（デフォルトは 0xFFFFFFFF)• 入出力データ用各種エンディアンスキーム

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

3ブロック図4

AHB バス
32bit （読出しアクセス）

データレジスタ（出力）

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

CRC 計算エンジン

多項式

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

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

4

入出力フォーマット

5

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

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 03100 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 0
0x22CC4488

入出力フォーマットは、ソフトウェアオーバーヘッドの削減のために完全に設定可能です。そのため、アプリケーションは各種エンディアンスキームの管理が可能です。
CRC_CR レジスタの REV_IN[1:0] ビットによって、8、16、32bit単位で入力データの反転と実行が可能です。
たとえば、入力データ が0x1A2B3C4D の場合、CRC 計算では以下のように使用されます。
• 0x58D43CB2（バイト単位でビットが反転）• 0xD458B23C（ハーフワード単位でビットが反転）• 0xB23CD458（フルワードでビットが反転）

また、出力データも、CRC_CR レジスタの REV_OUT ビットをセットすることによって反転することができます。
操作はビットレベルで行われます。たとえば、出力データ
0x11223344 は 0x22CC4488 に変換されます。

5性能

6

• 単一の入出力 32bit データレジスタによってファームウェア操作が簡単• AHB バスがストールしない連続書込み用入力バッファ• CRC 計算時間は入力データ幅に依存：• 32bit ブロックの場合、4AHB クロックサイクル• 16bit ブロックの場合、2AHB クロックサイクル• 8bit ブロックの場合、1AHB クロックサイクル• 書込みは CPU がSLEEP モードの間に DMA により実行可能• 動作は低消費電力（連続計算）で、CPU は時間要求の厳しいタスクのために開放

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

6

低電力モードモード

説明

RUN

有効

SLEEP

有効であり、DMA コントローラは CRC 計算に使用可能です。

STOP

停止。ペリフェラルレジスタの内容は保たれます。

STANDBY

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

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

7