寄存器描述
0x000 SPIE_CTL
|
默认值:0x00000000 |
控制寄存器 (Control Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
| 31:18 | - | - | - |
| 17 | R/W | 0x0 |
WORK_MODE 工作模式选择 0: SPI bus encrypt SPI 总线在线加解密工作模式 1: Independent work mode 独立算法运算工作模式 |
|
16 |
R/W |
0x0 |
XIP_EN SPI XIP 的总线数据加密使能 使能后,硬件自动连接 SPI 控制器。 |
|
15:14 |
- |
- |
- |
|
13:12 |
R/W |
0x0 |
SPI_SEL SPI 控制器选择 选择连接的总线,加密器对所选总线上的数据进行加解密。
XIP_EN 时,本字段设置无效。 |
|
11:1 |
- |
- |
- |
|
0 |
R/W |
0x0 |
KEY_START 开始计算分组密钥 数据加解密开始之前或者同时,必须先计算分组密钥,否则加解密单元会一直等待密钥生成,导致传输失败。传输完成,需要清零以停止密钥计算。
XIP_EN 时,本字段设置无效。 |
0x004 SPIE_ICR
|
默认值:0x00000000 |
中断控制寄存器 (Interrupt Control Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
| 31:19 | - | - | - |
| 18 | R/W | 0x0 |
ALG_CALC_ERR_EN 运算出错中断使能 |
| 17 | R/W | 0x0 |
CFG_ERR_EN 配置错误中断使能 |
| 16 | R/W | 0x0 |
ALG_FINISH_EN 运算完成中断使能 |
| 15:6 | - | - | - |
|
5 |
R/W |
0x0 |
KEY_OVF 分组密钥 FIFO 上溢中断使能 |
|
4 |
R/W |
0x0 |
KEY_UDF 分组密钥 FIFO 下溢中断使能 |
|
3 |
R/W |
0x0 |
READ_HALF_EMPTY 读过半空数据中断使能 |
|
2 |
R/W |
0x0 |
READ_EMPTY_DATA 读空数据中断使能 |
|
1 |
R/W |
0x0 |
ENC_DEC_FINISHED 加解密完成中断使能 |
|
0 |
R/W |
0x0 |
KEY_GEN 第一组分组密钥生成中断使能 |
0x008 SPIE_ISR
|
默认值:0x00000000 |
中断状态寄存器 (Interrupt Status Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
| 31:19 | - | - | - |
| 18 | R/W | 0x0 |
ALG_CALC_ERR 运算出错中断 |
| 17 | R/W | 0x0 |
CFG_ERR 配置错误中断 |
| 16 | R/W | 0x0 |
ALG_FINISH 运算完成中断 |
| 15:6 | - | - | - |
|
5 |
W1C |
0x0 |
KEY_OVF 分组密钥 FIFO Overflow 中断状态。
|
|
4 |
W1C |
0x0 |
KEY_UDF 分组密钥 FIFO Underflow 中断状态。
|
|
3 |
W1C |
0x0 |
READ_HALF_EMPTY 读过半空数据中断,即读取的密文位置的数据,过半都是 0xFF。
|
|
2 |
W1C |
0x0 |
READ_EMPTY_DATA 读空数据中断,即读取的密文位置的数据全部为 0xFF,即 Flash
擦除后的状态。
软件可以根据该中断判断当前读取的 Page,是否为擦除后的数据。 |
|
1 |
W1C |
0x0 |
ENC_DEC_FINISHED 加解密完成中断。
若当前传输的密文长度为 0 时,该中断不会产生。 |
|
0 |
W1C |
0x0 |
KEY_GEN 第一组分组密钥生成的中断状态。
在数据传输前,应确保该中断状态位为 1。 由于 ENC 模块产生密钥的速度比 SPI 数据传输的速度快,因此可以保证传输过程中,密钥总是能跟上数据传输的速度。 |
0x00C SPIE_KCNT
|
默认值:0x00000000 |
密钥计数寄存器 (Key Counter Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
RO |
0x0 |
KEY_CNTSPI ENC 输出对应密文区域的分组密钥个数,单位为字节。 |
0x010 SPIE_OCNT
|
默认值:0x00000000 |
输出计数寄存器 (Output Counter Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
RO |
0x0 |
OUTPUT_CNT SPI ENC 输出的分组密钥个数,以字节为单位计数。 SPI ENC 为每一个传输的 SPI 数据输出分组密钥,但是如果对应输出的位置是明文,SPI ENC 输出的分组密钥为 0。所以此处计数是输出的 0 的个数和密文对应的分组密钥个数之和。 |
0x014 SPIE_ADDR
|
默认值:0x00000000 |
数据地址寄存器 (Data Address Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
DATA_ADDR 本次访问的 Flash 数据地址。从 0 开始,是相对 Flash 开始位置的访问偏移值,单位为字节。 该地址信息有两个用途:
XIP_EN 时,本字段设置无效。 |
0x018 SPIE_TWEAK
|
默认值:0x00000000 |
计数调整寄存器 (Tweak Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
CTR_TWEAK 用于产生数据分组的 Counter 值。数据分组的 Counter 值由 eFuse 中的 SPI_ENC_NONCE、SPIE_ADDR 以及 TWEAK 值共同产生,其中 NONCE 与数据的分组地址是固定的,TWEAK 值软件可调。 通过配置 TWEAK 值,软件可以根据实际情况调整 Counter 值,以免每次产生的分组密钥相同。 |
0x01C SPIE_CPOS
|
默认值:0x00000000 |
密文位置寄存器 (Ciphertext Position Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
CIPHERTEXT_POS 本次传输的密文数据开始位置 用于指示本次传输的数据中密文数据所在的偏移位置。如果当前传输包含了发送和接收,则位置总是从发送开始计算。 值 M:表示本次传输的数据,从第 M 个字节开始是密文 XIP_EN 时,本字段设置无效。 |
0x020 SPIE_CLEN
|
默认值:0x00000000 |
密文长度寄存器 (Ciphertext Length Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
CIPHERTEXT _LEN 本次传输的密文数据长度。 值 N:表示本次传输的密文数据为 N 字节 XIP_EN 时,本字段设置无效。 |
0x100 ALG_CTL
|
默认值:0x00000000 |
算法控制寄存器(Algorithm Control Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
| 31:3 | - | - | - |
| 2 | R/W | 0x0 |
KEY_SEL 算法运算的密钥选择 0: eFuse 密钥,固定使用 eFuse SSK 的值作为运算密钥 当选择 AES-128-CTR 算法时,可以选择使用 eFuse SSK;当选择 HMAC-SHA256 算法时,选择 eFuse SSK 无效。 1: 使用 ALG_KEY_ADDR 所提供的值作为运算密钥 当选择 HMAC-SHA256 算法时,只能使用外部配置的密钥。 |
| 1 | R/W | 0x0 |
ALG_SELECT 算法类型选择。 0: AES-128-CTR 使用该算法时,需要通过 ALG_IV_ADDR 提供 128 位的 IV 值。 当 KEY_SEL=0 时,算法密钥从 eFuse SSK 读取; 当 KEY_SEL=1 时,算法密钥从 ALG_KEY_ADDR 读取; 1: HMAC-SHA256 仅支持一次对全部数据计算 HMAC-SHA256,不支持分段计算。 使用该算法时,需要通过 ALG_KEY_ADDR 提供 64 字节的密钥值 |
| 0 | R/W | 0x0 |
ALG_START 0: 算法执行单元空闲 1:算法执行单元开始工作,完成后自动清零 注意,本寄存器仅在 SPIE_CTL.WORK_MODE=1 的情况下才有效。 |
0x104 ALG_KEY_ADDR
|
默认值:0x00000000 |
密钥地址寄存器 (Key Address Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
KEY ADDRESS 要求地址 4 字节对齐。 当选择 AES-128-CTR 算法时,需要提供 128bit 的密钥;当选择 HMAC-SHA256 算法时,需要提供 512bit 的密钥。 |
0x108 ALG_AHM_CTL
|
默认值:0x00000003 |
AHB Master 寄存器(AHB Master Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:5 |
R/W |
0x0 |
- |
| 4 | R/W | 0x0 | AHM_BUFFERABLE_AUTO 自动 bufferable 使能。 0: 禁用 1: 使能 使能后最后一笔数据不使用 bufferable,其它数据使用 bufferable。 |
| 3 | R/W | 0x0 | HPROT[3] Cacheable 0: Non-cacheable 1: Cacheable |
| 2 | R/W | 0x0 | HPROT[2] Bufferable 0: Non-bufferable 1: Bufferable 使能后全部写数据使用 bufferable。注意,本寄存器仅在 AHM_BUFFERABLE_AUTO=0 的情况下才有效。 |
| 1 | R/W | 0x1 | HPROT[1] Privileged 0: User access 1: Privileged access |
| 0 | R/W | 0x1 | HPROT[0] Data/Opcode 0: Opcode fetch 1: Data access |
0x10C ALG_DI_ADDR
|
默认值:0x00000000 |
输入数据地址寄存器 (Data Input Address Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
输入数据地址 要求地址 4 字节对齐 |
0x110 ALG_DI_LEN
|
默认值:0x00000000 |
输入数据长度寄存器 (Data Input Length Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
输入数据长度 对于 AES-128-CTR 算法,要求长度 4 字节对齐 对于 HMAC-SHA256 算法,要求长度大于 64 字节。 |
0x114 ALG_DO_ADDR
|
默认值:0x00000000 |
输出数据地址寄存器 (Data Output Address Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
输出数据地址 要求地址 4 字节对齐 |
0x118 ALG_DO_LEN
|
默认值:0x00000000 |
输出数据长度寄存器 (Data Output Length Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R |
0x0 |
输出数据长度 |
0x120 ALG_IV_DATA0
|
默认值:0x00000000 |
输入 IV 数据寄存器 0(IV Data Input Register 0) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
IV_DATA0 IV 寄存器。 四个寄存器的值组成 128-bit IV 密钥,比特位分布为 IV_DATAn << (n * 32)。 |
0x124 ALG_IV_DATA1
|
默认值:0x00000000 |
输入 IV 数据寄存器 1(IV Data Input Register 1) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
IV_DATA1 IV 寄存器。 四个寄存器的值组成 128-bit IV 密钥,比特位分布为 IV_DATAn << (n * 32)。 |
0x128 ALG_IV_DATA2
|
默认值:0x00000000 |
输入 IV 数据寄存器 2(IV Data Input Register 2) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
IV_DATA2 IV 寄存器。 四个寄存器的值组成 128-bit IV 密钥,比特位分布为 IV_DATAn << (n * 32)。 |
0x12C ALG_IV_DATA3
|
默认值:0x00000000 |
输入 IV 数据寄存器 3(IV Data Input Register 3) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
R/W |
0x0 |
IV_DATA3 IV 寄存器。 四个寄存器的值组成 128-bit IV 密钥,比特位分布为 IV_DATAn << (n * 32)。 |
0xFFC SPIE_VER
|
默认值:0x00000200 |
SPIENC 版本 (Version Register) |
||
|---|---|---|---|
|
位域 |
类型 |
默认值 |
描述 |
|
31:0 |
RO |
0x00000200 | Version(模块版本号) 采用 BCD 码显示,V2.0 |
