20. 循环冗余校验器 (CRC)
20.1. 概述
SWM221系列所有型号CRC模块操作均相同,主要应用于核实数据传输或者数据存储的正确性和完整性,使用前需使能CRC模块时钟。
CRC模块分为CRC-32和CRC-16两个算法。使用CRC-32多项式进行计算时,输入数据有效位宽可选择为32Bit、16Bit、8Bit,使用CRC-16多项式进行计算时,输入数据有效位宽可选择16Bit、8Bit。
20.2. 特性
支持CRC-32码多项式
x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
支持CRC-16码多项式
x16 + x12 + x5 + 1
x16 + x15 + x2 + 1
支持CRC-8码多项式
x8 + x2 + x + 1
支持输出结果设置,包括翻转、取反
支持初始值自定义
支持输入可选择取反
20.3. 功能描述
20.3.1. 模块结构
CRC循环冗余检验结构如 图 86 所示:
图 86 CRC结构框图
20.3.1.1. 功能描述
20.3.2. 计算步骤
根据需求,通过CR寄存器选择CRC算法、输入数据有效位宽、输出结果
根据需求,通过INIVAL寄存器设置CRC初始值
通过CR寄存器使能CRC计算
通过DATAIN寄存器向CRC计算单元输入要计算的数据
通过RESULT寄存器读取计算结果
20.3.3. 计算步骤
根据需求,通过CR寄存器选择CRC算法、输入数据有效位宽、输出结果
根据需求,通过INIVAL寄存器设置CRC初始值
通过CR寄存器使能CRC计算
通过DATAIN寄存器向CRC计算单元输入要计算的数据
通过RESULT寄存器读取计算结果
20.4. 寄存器映射
名称 |
偏移 |
复位值 |
---|---|---|
CRC BASE:0x40002800 |
||
CR |
0x00 |
0x00000000 |
DATAIN |
0x04 |
0x00000000 |
INIVAL |
0x08 |
0x00000000 |
RESULT |
0x0C |
0x00000000 |
20.5. 寄存器描述
20.5.1. 控制寄存器CR
偏移: 0x00 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
IBIT |
POLY |
||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
POLY |
ONOT |
OREV |
INOT |
IREV |
EN |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:11 |
R/W |
||
10:9 |
IBIT |
R/W |
CRC输入数据有效位数寄存器 00:32位输入数据有效 01:低16位输入数据有效 10:低8位输入数据有效 11:保留 |
8:7 |
POLY |
R/W |
CRC算法选择寄存器 00:x16 + x12 + x5 + 1 01:x8 + x2 + x + 1 10:x16 + x15 + x2 + 1 11:x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 |
6 |
ONOT |
R/W |
输出结果是否取反寄存器 1:输出结果取反 0:输出结果不需要取反 |
5:4 |
OREV |
R/W |
输出结果是否翻转寄存器 00:bit顺序不变 01:bit顺序完全翻转(32位数据宽度31:0 -> 0:31;16位数据宽度15:0 -> 0:15;8位数据宽度7:0 -> 0:7) 10:bit顺序在字节范围内翻转(32位数据宽度 31:0 -> 24:31, 16:23, 8:15, 0:7;16位数据宽度15:0 -> 8:15, 0:7;8位数据宽度同01 11:仅字节顺序翻转(32位数据宽度 31:0 -> 7:0,15:8,23:16,31:24;16位数据宽度15:0 -> 7:0,15:8;8位数据宽度同00) |
3 |
INOT |
R/W |
输入数据是否取反 1:输入数据取反 0:输入数据不取反 |
2:1 |
IREV |
R/W |
输入数据是否翻转。 00:bit顺序不变 01:bit顺序完全翻转(32位数据宽度31:0 -> 0:31;16位数据宽度15:0 -> 0:15;8位数据宽度7:0 -> 0:7) 10:bit顺序在字节范围内翻转(32位数据宽度 31:0 -> 24:31, 16:23, 8:15, 0:7;16位数据宽度15:0 -> 8:15, 0:7;8位数据宽度同01 11:仅字节顺序翻转(32位数据宽度 31:0 -> 7:0,15:8,23:16,31:24;16位数据宽度15:0 -> 7:0,15:8;8位数据宽度同00) |
0 |
EN |
R/W |
CRC使能控制位 1:CRC使能 0:CRC禁能 |
20.5.2. 数据输入寄存器DATAIN
偏移: 0x04 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
DATAIN |
|||||||
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
DATAIN |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
DATAIN |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
DATAIN |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:0 |
DATAIN |
WO |
CRC数据输入寄存器,有效位根据CR寄存器IBIT位选择 |
20.5.3. 初始值设置寄存器INIVAL
偏移: 0x08 |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
INIVAL |
|||||||
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
INIVAL |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
INIVAL |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
INIVAL |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:0 |
INIVAL |
R/W |
CRC初始值寄存器 |
20.5.4. 结果输出寄存器RESULT
偏移: 0x0C |
复位值: 0x00000000 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
RESULT |
|||||||
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
RESULT |
|||||||
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
RESULT |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
位域 |
名称 |
类型 |
描述 |
---|---|---|---|
31:0 |
RESULT |
R/W |
CRC结果输出寄存器,有效位根据CR寄存器POLY位选择 当POLY为: 00:低16位有效 01:低8位有效 10:低16位有效 11:32位有效 |