5 巡回冗長検査(CRC)
この章は、CH32F2x、CH32V2x、およびCH32V3xファミリ全体に適用されます。
巡回冗長検査(CRC)計算ユニットは、32ビットのデータワードと固定生成多項式からCRCコードを取得するために使用されます。
これは通常、データ転送またはストレージの整合性を検証するために使用されます。
システムに搭載されているハードウェアCRC計算ユニットは、CPUとRAMのリソースを大幅に節約し、効率を向上させます。
巡回冗長検査(CRC)計算ユニットは、32ビットのデータワードと固定生成多項式からCRCコードを取得するために使用されます。
これは通常、データ転送またはストレージの整合性を検証するために使用されます。
システムに搭載されているハードウェアCRC計算ユニットは、CPUとRAMのリソースを大幅に節約し、効率を向上させます。
5.1 主な特徴
・CRC32多項式 (0x4C11DB7): X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1
・単一入出力32ビットデータレジスタ
・CRC計算は4AHBクロックサイクル (HCLK) で実行されます
・単一入出力32ビットデータレジスタ
・CRC計算は4AHBクロックサイクル (HCLK) で実行されます
5.2 機能説明
・CRCユニットのリセット
新しいCRC計算を開始するには、CRC計算ユニットをリセットする必要があります。
CRC_CTLRレジスタのRSTビットに1を書き込むと、データレジスタがハードウェアによってリセットされ、初期値0xFFFFFFFFに戻ります。
・CRC計算
CRC_CTLRレジスタのRSTビットに1を書き込むと、データレジスタがハードウェアによってリセットされ、初期値0xFFFFFFFFに戻ります。
CRCユニットの計算は、前回のCRC計算値と新しいCRC計算値の組み合わせによって行われます。
CRC_DATARレジスタに書き込むと、新しいデータがハードウェア計算ユニットに入力されます。
レジスタを読み出すと、最新のCRC計算値を取得できます。
ハードウェア計算はシステムの書き込み操作を中断するため、新しい値を連続して書き込むことができます。
注:CRCユニットは、バイトごとではなく、32ビットのデータワード全体を計算します。
・独立データバッファ
CRC_DATARレジスタに書き込むと、新しいデータがハードウェア計算ユニットに入力されます。
レジスタを読み出すと、最新のCRC計算値を取得できます。
ハードウェア計算はシステムの書き込み操作を中断するため、新しい値を連続して書き込むことができます。
注:CRCユニットは、バイトごとではなく、32ビットのデータワード全体を計算します。
CRCユニットは8ビットの独立データレジスタ(CRC_IDATAR)を備えています。このレジスタは、アプリケーションコードの1バイトのデータを一時的に保存するために使用され、CRCユニットのリセットの影響を受けません。
5.3 レジスタの説明
表5-1 CRC関連レジスタ
| Name | Access address | Description | Reset value |
|---|---|---|---|
| R32_CRC_DATAR | 0x40023000 | データレジスタ | 0xFFFFFFFF |
| R8_CRC_IDATAR | 0x40023004 | 独立データレジスタ | 0x00 |
| R32_CRC_CTLR | 0x40023008 | 制御レジスタ | 0x00000000 |
5.3.1 データレジスタ(CRC_DATAR)
DATAR =DATA Register | Access base address 0x40023000 Offset address: 0x00
■レジスター内容
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DATAR | |||||||||||||||||||||||||||||||
| RW | |||||||||||||||||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
DATA [RW]
元のデータを書き込み、計算結果を読み取ります。5.3.2 独立データレジスタ(CRC_IDATAR)
IDATAR =Independent DATA Register | Access base address 0x40023000 Offset address: 0x04
■レジスター内容
このレジスタは、制御レジスタのRSTの影響を受けません。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | IDATA | ||||||||||||||
| RO | RW | ||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
IDATA [RW]
8ビットの汎用レジスタ。データバッファとして使用できます。このレジスタは、制御レジスタのRSTの影響を受けません。
5.3.3 制御レジスタ(CRC_CTLR)
CTLR =ConTroL Register | Access base address 0x40023000 Offset address: 0x08
■レジスター内容
ハードウェアによって自動的にクリアされます。
設定後、データレジスタは0xFFFFFFFFになります。
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | RST | ||||||||||||||||||||||||||||||
| RO | WO | ||||||||||||||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
RST [WO]
CRC計算ユニットのリセット制御| 1 | 書き込むと設定できます。 |
| 0 |
設定後、データレジスタは0xFFFFFFFFになります。
