.. _ip_ls_intf_frtdec: FRTDEC ========= 1. 简介 >>>>>>> 实时解密引擎 FRTDEC 允许根据读取请求地址信息实时解密 AXI 传输数据。可以在 FRTDEC 中定义四个独立且不重叠的加密区域,每个区域可选择仅执行或从不执行。FRTDEC 使用计数器模式的 AES-128/SM4 算法,以实现尽可能低的延迟。因此,每次更改某个加密区域的内容时,必须使用不同的加密上下文(密钥或初始化向量)重新加密整个区域。此限制使得 FRTDEC 适用于解密只读数据或代码,例如存储在外置 NOR Flash 存储器中的代码。 注意: 当 FRTDEC 与 SPI 控制器一起使用时,必须使用闪存控制器的内存映射模式访问外置只读存储器。CPU 内存和 FRTDEC 遵循小端字节序,而 AES/SM4 硬件加速器遵循大端字节序。 2. 主要特性 >>>>>>>>>>> * 在 SPI 控制器内存映射读取操作(单次或多次)期间实时进行 128 位解密: - 使用计数器(CTR)模式的 AES/SM4,带有密钥流 FIFO(深度=4) - 支持任何读取大小 - 使用读取的物理地址进行加密/解密 * 最多四个独立的加密区域 - 区域定义的粒度:4096 字节 - 区域配置写锁定机制 - 两种可选解密模式:仅执行和从不执行。 - 每个区域有其自己的 128 位密钥、两个字节的固件版本号和八个字节的应用程序定义的 Nonce。每次应用程序执行加密时,必须至少更改其中一项 * 加密密钥的机密性和完整性保护 - 只写寄存器,带有软件锁定机制 - 提供 8 位 CRC 作为公开密钥信息 * 支持预取机制 * 作为 AMBA AHB 从机外设,仅可通过 32 位字单次访问进行访问(否则会产生 AHB 总线错误,且写访问将被忽略) 3. 功能描述 >>>>>>>>>>> FRTDEC 框图 ---------------- 模块框图如图所示: .. _FRTDEC 框图: .. figure:: /assets/images/frtdec_block.png :alt: FRTDEC 框图 :align: center **图 3.1: FRTDEC 框图** FRTDEC 实时解密 ------------------- FRTDEC 架构的原理是分析主机和目标之间 AXI 互连上的所有读地址通道事务。 如果读取请求位于 FRTDEC 中编程的四个区域之一内,控制逻辑将触发基于计数器模式 AES/SM4 算法的密钥流计算。然后,该密钥流用于实时解密读响应通道中存在的数据,在计算密钥流信息期间(最多需要 11 个周期)将 RREADY 信号置低。任何访问已启用的 FRTDEC 区域之外的区域都属于非加密区域。 每个 FRTDEC 区域通过寄存器 RxCFGR、RxSTARTADDR、RxENDADDR、RxNONCER 和 RxKEYR 进行编程,其中 x=1 到 4。在寄存器 RxCFGR 中,MODE 位定义该区域是代码(仅执行)、数据(从不执行)还是两者兼有。 区域确定的粒度是 4096 字节。 **注意:** * 虽然 FRTDEC 不阻止区域重叠,但这并非有效的编程方式,应避免在应用软件中出现。 * FRTDEC 只能解密增量或回绕突发,前提是它们不跨越 4096 字节对齐的地址边界。 计数器模式 AES 解密 ----------------------- .. _AES CTR 解密流程: .. figure:: /assets/images/frtdec_decrypt_flow.png :alt: AES CTR 解密流程 :align: center **图 3.2: AES CTR 解密流程** 对于每 128 位数据块,使用 AES 分组密码计算一个特殊的密钥流信息,定义如下: * 初始化向量 AES_IV[127:0] = RxNONCER[63:0] || 0b0000 0000 0000 0000 || RxCFGR[31:16] || 0b00 || (x-1) || ReadAddress[31:4](地址对 128 位取模) * 密钥材料 AES_KEY[127:0] = RxKEYR3[31:0] || RxKEYR2[31:0] || RxKEYR1[31:0] || RxKEYR0[31:0] **注意:** 上面的 x 是所选加密区域的 RegionID(x=1 到 4) 生成的 128 位密钥流与 128 位密文数据进行异或运算,产生 128 位明文数据。 * AES_DIN 和 AES_DOUT 数据块按照以下规则构建: - AES_Dx[127:0] = AXI_word(@+0x8)[63:0] || AXI_word(@)[63:0],其中 @ 是用于计算密钥流的十六进制地址 当读取请求不在加密区域内,或该区域未启用解密时,128 位 AXI 数据保持不变。 流控制管理 ------------------- 图 3.3 展示了 FRTDEC 如何管理针对一个 4 字(256 位)突发读取的两个背对背 AXI 请求。所有 128 位数据块都具有连续的地址值。 .. _FRTDEC 流控制概述双突发读取: .. figure:: /assets/images/frtdec_burst_dr.png :alt: FRTDEC 流控制概述双突发读取 :align: center **图 3.3: FRTDEC 流控制概述(双突发读取请求)** 关于此图的几点说明: 1. FRTDEC 强制将 RREADY 置低,因为它尚未准备好解密数据(密钥流计算中) 2. FRTDEC 没有强制将 RREADY 置低,因为有效的掩码已准备好对输入数据进行异或操作。解密如预期那样以零延迟完成。 3. 密钥流 FIFO 已满。下次需要密钥流时,将需要 11 个时钟周期。 4. FRTDEC 控制器具有预取机制,可以极大地加快对与上一次地址连续的地址的任何读取请求。由于掩码 FIFO 机制,FRTDEC 能够管理这种更短的延迟。 图 3.4 展示了 FRTDEC 如何管理一个 4 字(256 位)突发读取的 AXI 请求,随后是对一个与上一次地址不连续的地址的单次读取。 .. _FRTDEC 流控制概述单次读取: .. figure:: /assets/images/frtdec_burst_r.png :alt: FRTDEC 流控制概述单次读取 :align: center **图 3.4: FRTDEC 流控制概述(突发后接单次读取请求)** 关于此图的几点说明: 1. FRTDEC 强制将 RREADY 置低,因为它尚未准备好解密数据。 2. FRTDEC 强制将 RREADY 置低,因为预计算的掩码无法用于此请求(加密区域地址不连续)。 FRTDEC 初始化过程 --------------------- 下文推荐两种可信的初始化方案。 **注意:** 这些序列用于生产代码,因为在固件开发期间,并不总是建议锁定密钥或区域配置。 对配置寄存器的写入在配置锁允许的情况下生效,即使区域已启用。 一个密钥用于所有区域的初始化方案,在此方案中,一个实体拥有用于解密四个受保护区域的秘密密钥。推荐的 FRTDEC 配置序列如下所述: 1. 对于 x=1 到 4,在 RxCFGR 寄存器中写入正确的 MODE[1:0] 值。 2. 对于 x=1 到 4,使用 KEYCRC 中描述的序列编程 RxKEYR 寄存器(以获得有效的 CRC)。警告:密钥寄存器是只写的! 3. 对于 x=1 到 4,检查密钥 CRC。如果正确,则在 RxCFGR 寄存器中设置 KEYLOCK 位。此位无法清除,即该区域 x 中的密钥寄存器不再可写。 4. 执行循环,直到您拥有要解密的区域 x。此任务不一定必须由拥有解密密钥的实体执行。 a. 验证密钥 CRC 是否与存储在该区域中的加密二进制文件对应。 b. 填写与此二进制文件对应的详细信息(nonce、起始地址、结束地址、版本号)。 c. 使用 REG_EN 启用此区域的解密。 d. 在 RxCFGR 中设置 CONFIGLOCK 位。此位无法清除,即区域配置不再可写。 **警告:** 对于给定区域,当 MODE 位更改时,密钥寄存器会被硬件清零。因此,上述步骤 1 必须在步骤 2 之前完成,并且步骤 2 之后不得修改 MODE 位。 每个区域一个密钥的初始化方案,在此方案中,一个实体可以拥有用于解密一个(或多个)受保护区域的秘密密钥。推荐的 FRTDEC 配置序列如下所述: 当有要解密的区域,此任务必须由拥有相应密钥的实体执行。 a. 在 RxCFGR 寄存器中写入正确的 MODE[1:0] 值。 b. 使用 KEYCRC 中描述的序列编程 RxKEYR 寄存器(以获得有效的密钥 CRC)。警告:密钥寄存器是只写的! c. 检查密钥 CRC。如果正确,则在 RxCFGR 寄存器中设置 KEYLOCK 位。此位无法清除,即密钥寄存器不再可写。 d. 填写与受保护固件对应的详细信息(nonce、起始地址、结束地址、版本号)。 e. 使用 REG_EN 启用此区域的解密。 f. 在 RxCFGR 中设置 CONFIGLOCK 位。此位无法清除,即区域配置不再可写。 **警告:** 对于给定区域,当 MODE 位更改时,密钥寄存器会被硬件清零。因此,上述步骤 a 必须在步骤 b 之前完成,并且步骤 b 之后不得修改 MODE 位。 FRTDEC 密钥 CRC 源代码 ----------------------------- 以下是 CRC 源代码,可用于与在 FRTDEC_RxKEYR 寄存器中加载密钥后,FRTDEC 在 KEYCRC 位域中提供的计算结果进行比较。 .. code:: c uint8_t getCRC(uint32_t * keyin) { const uint8_t CRC7_POLY = 0x7; const uint32_t key_strobe[4] = {0xAA55AA55, 0x3, 0x18, 0xC0}; uint8_t i, j, k, crc = 0x0; uint32_t keyval; for (j = 0; j < 4; j++) { keyval = *(keyin+j); if (j == 0) { keyval ^= key_strobe[0]; } else { keyval ^= (key_strobe[j] << 24) | (crc << 16) | (key_strobe[j] << 8) | crc; } for (i = 0, crc = 0; i < 32; i++) { k = (((crc >> 7) ^ (keyval >> (31-i))&0xF)) & 1; crc <<= 1; if (k) { crc ^= CRC7_POLY; } } crc^=0x55; } return crc; } 4. 中断 >>>>>>>>>>> 该 IP 有一个中断信号。它是一个电平中断。它是错误中断。 如果 FRTDEC_IER 寄存器中的 SEIE、XONEIE 或 KEIE 位被设置,则当发生以下一个或多个错误时会产生中断。中断源见表4.1 FRTDEC 中断源。 .. list-table:: 表 4.1:FRTDEC 中断源 :widths: 10 25 46 :header-rows: 1 * - 位 - 名称 - 描述 * - 0 - SEIF - - 1. 对 FRTDEC_RxKEYR 寄存器的非法读取。(FRTDEC_RxKEYR 是只写寄存器) - 2. 当 FRTDEC_RxCFGR 中的 CONFIGLOCK 或 KEYLOCK=1 时,对 FRTDEC_RxKEYR 寄存器的非法写入。 - 3. 当 FRTDEC_RxCFGR 中的 CONFIGLOCK=1 时,对 FRTDEC_RxCFGR、FRTDEC_RxSTARTADDR、FRTDEC_RxENDADDR 或 FRTDEC_RxNONCER 寄存器的非法写入(x=1 到 4)。 * - 1 - XONEIF - 对仅执行区域(MODE[1:0]=00)的非法读取,以及对从不执行区域(MODE[1:0]=01)的非法执行请求。此类非法请求返回 0x0,不产生总线错误。 * - 2 - KEIF - 密钥错误:在密钥寄存器因异常事件(篡改检测、未经授权的调试连接、不可信启动、RDP 级别回退)被清除后,对加密区域的读取请求。此类读取请求返回 0x0,不产生总线错误。 **注意:** 发生密钥错误后,必须重新初始化 FRTDEC 密钥,并且如果寄存器被锁定,可能需要复位 FRTDEC。 5. 寄存器 >>>>>>>>>>>>>> FRTDEC_RF 寄存器 ------------------------ FRTDEC_RF 中的寄存器及其对应的偏移量如表 FRTDEC_RF 中寄存器的偏移地址所示 .. list-table:: 表 5.1:FRTDEC_RF 中寄存器的偏移地址 :widths: 10 25 46 :header-rows: 1 * - 偏移量 - 寄存器名称 - 功能描述 * - 0x0 - IP_VER - IP 版本号 * - 0x4 - GIT_VER - Git 版本号 * - 0x8 - FRTDEC_CR - FRTDEC 控制寄存器 * - 0x10 - FRTDEC_R0CFGR - FRTDEC 区域 0 配置寄存器 * - 0x14 - FRTDEC_R0STARTADDR - FRTDEC 区域 0 起始地址寄存器 * - 0x18 - FRTDEC_R0ENDADDR - FRTDEC 区域 0 结束地址寄存器 * - 0x1C - FRTDEC_R0NONCER0 - FRTDEC 区域 0 Nonce 寄存器 0 * - 0x20 - FRTDEC_R0NONCER1 - FRTDEC 区域 0 Nonce 寄存器 1 * - 0x24 - FRTDEC_R0KEYR0 - FRTDEC 区域 0 密钥寄存器 0 * - 0x28 - FRTDEC_R0KEYR1 - FRTDEC 区域 0 密钥寄存器 1 * - 0x2C - FRTDEC_R0KEYR2 - FRTDEC 区域 0 密钥寄存器 2 * - 0x30 - FRTDEC_R0KEYR3 - FRTDEC 区域 0 密钥寄存器 3 * - 0x40 - FRTDEC_R1CFGR - FRTDEC 区域 1 配置寄存器 * - 0x44 - FRTDEC_R1STARTADDR - FRTDEC 区域 1 起始地址寄存器 * - 0x48 - FRTDEC_R1ENDADDR - FRTDEC 区域 1 结束地址寄存器 * - 0x4C - FRTDEC_R1NONCER0 - FRTDEC 区域 1 Nonce 寄存器 0 * - 0x50 - FRTDEC_R1NONCER1 - FRTDEC 区域 1 Nonce 寄存器 1 * - 0x54 - FRTDEC_R1KEYR0 - FRTDEC 区域 1 密钥寄存器 0 * - 0x58 - FRTDEC_R1KEYR1 - FRTDEC 区域 1 密钥寄存器 1 * - 0x5C - FRTDEC_R1KEYR2 - FRTDEC 区域 1 密钥寄存器 2 * - 0x60 - FRTDEC_R1KEYR3 - FRTDEC 区域 1 密钥寄存器 3 * - 0x70 - FRTDEC_R2CFGR - FRTDEC 区域 2 配置寄存器 * - 0x74 - FRTDEC_R2STARTADDR - FRTDEC 区域 2 起始地址寄存器 * - 0x78 - FRTDEC_R2ENDADDR - FRTDEC 区域 2 结束地址寄存器 * - 0x7C - FRTDEC_R2NONCER0 - FRTDEC 区域 2 Nonce 寄存器 0 * - 0x80 - FRTDEC_R2NONCER1 - FRTDEC 区域 2 Nonce 寄存器 1 * - 0x84 - FRTDEC_R2KEYR0 - FRTDEC 区域 2 密钥寄存器 0 * - 0x88 - FRTDEC_R2KEYR1 - FRTDEC 区域 2 密钥寄存器 1 * - 0x8C - FRTDEC_R2KEYR2 - FRTDEC 区域 2 密钥寄存器 2 * - 0x90 - FRTDEC_R2KEYR3 - FRTDEC 区域 2 密钥寄存器 3 * - 0xA0 - FRTDEC_R3CFGR - FRTDEC 区域 3 配置寄存器 * - 0xA4 - FRTDEC_R3STARTADDR - FRTDEC 区域 3 起始地址寄存器 * - 0xA8 - FRTDEC_R3ENDADDR - FRTDEC 区域 3 结束地址寄存器 * - 0xAC - FRTDEC_R3NONCER0 - FRTDEC 区域 3 Nonce 寄存器 0 * - 0xB0 - FRTDEC_R3NONCER1 - FRTDEC 区域 3 Nonce 寄存器 1 * - 0xB4 - FRTDEC_R3KEYR0 - FRTDEC 区域 3 密钥寄存器 0 * - 0xB8 - FRTDEC_R3KEYR1 - FRTDEC 区域 3 密钥寄存器 1 * - 0xBC - FRTDEC_R3KEYR2 - FRTDEC 区域 3 密钥寄存器 2 * - 0xC0 - FRTDEC_R3KEYR3 - FRTDEC 区域 3 密钥寄存器 3 * - 0x100 - FRTDEC_ISR - FRTDEC 中断状态寄存器 * - 0x104 - FRTDEC_IER - FRTDEC 中断使能寄存器 IP 版本号寄存器 ~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x0`` .. list-table:: 表 5.2:IP_VER 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - IP_VER - 23:0 - 只读 - 0x010003 - IP 版本号 * - Reserved - 31:24 - / - 0x0 - / GIT 版本号寄存器 ~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x4`` .. list-table:: 表 5.3:GIT_VER 寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - GIT_VER - 31:0 - 只读 - 0x0 - Git 版本号 FRTDEC 控制寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x8`` .. list-table:: 表 5.4:FRTDEC_CR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ALGO_SEL - 0 - 读写 - 0x0 - 算法选择 - 1'b0: 选择 aes 算法 - 1'b1: 选择 sm4 算法 * - 保留 - 31:1 - / - 0x0 - / FRTDEC 区域 0 配置寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x10`` .. list-table:: 表 5.5:FRTDEC_R0CFGR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - REG_EN - 0 - 读写 - 0x0 - 区域实时解密使能 - 1'b0:禁用此区域的实时解密 - 1'b1:启用此区域的实时解密。数据与相应的密钥流进行异或 **注意:** :设置此位时,区域上下文(版本、密钥、nonce)必须有效,否则将解密出垃圾数据。 * - CFGLOCK - 1 - 读写 - 0x0 - 区域配置锁定 - 1'b0:允许写入此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器 - 1'b1:忽略对此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器的写入,直到下次 FRTDEC 复位 - 如果此位被设置,则只能在 FRTDEC 复位时复位为“0”。设置此位会强制 KEYLOCK 位为“1”。 * - KEYLOCK - 2 - 读写 - 0x0 - 区域密钥锁定 - 1'b0:允许写入此区域的 KEYRx 寄存器 - 1'b1:忽略对此区域的 KEYRx 寄存器的写入,KEYCRC 位域被锁定,直到下次 FRTDEC 复位。 * - 保留 - 3 - / - 0x0 - / * - MODE - 5:4 - 读写 - 0x0 - 操作模式 此位域选择此区域的 FRTDEC 操作模式 - 2'b00:仅对指令访问进行解密 - 2'b01:仅对数据访问进行解密 - 2'b10:对所有读访问(指令或数据)进行解密 - 当任一 MODE 位发生更改时,该区域的密钥将被清零。 * - 保留 - 7:6 - / - 0x0 - / * - KEYCRC - 15:8 - 只读 - 0x0 - - 区域密钥 8 位 CRC - 当 KEYLOCK=0 时,KEYCRC 位域在按以下精确序列加载此区域密钥时由硬件自动计算:先 KEYR0,然后 KEYR1,然后 KEYR2,最后 KEYR3(全部只写一次)。一旦开始新的有效序列,就会开始新的计算,并且在一个有效序列完成之前,读取 KEYCRC 为零。 - 当 KEYLOCK=1 时,KEYCRC 保持不变直到下次复位。 CRC 计算使用标准 CRC-8-CCITT 算法 X8 + X2 + X + 1(根据约定)进行 8 位校验和。源代码可参见本手册。 - 此字段为只读。 - 注意:CRC 信息仅在密钥的最后一位写入后更新。 * - VER - 31:16 - 读写 - 0x0 - 区域固件版本 此 16 位位域必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前正确初始化。 FRTDEC 区域 0 起始地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x14`` .. list-table:: 表 5.6:FRTDEC_R0STARTADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - STARTADDR - 31:0 - 读写 - 0x0 - - 区域 AXI 起始地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位和低 12 位返回零。 FRTDEC 区域 0 结束地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x18`` .. list-table:: 表 5.7:FRTDEC_R0ENDADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ENDADDR - 31:0 - 读写 - 0x0 - - 区域总线结束地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器,并且 RxENDADDR 必须严格大于 RxSTARTADDR 才有效。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位返回零,低 12 位返回1。 FRTDEC 区域 0 Nonce 寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x1C`` .. list-table:: 表 5.8:FRTDEC_R0NONCER0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER0 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 0 Nonce 寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x20`` .. list-table:: 表 5.9:FRTDEC_R0NONCER1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER1 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 0 密钥寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x24`` .. list-table:: 表 5.10:FRTDEC_R0KEYR0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY0 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 0 密钥寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x28`` .. list-table:: 表 5.11:FRTDEC_R0KEYR1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY1 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 0 密钥寄存器 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x2C`` .. list-table:: 表 5.12:FRTDEC_R0KEYR2 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY2 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [95:64] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 0 密钥寄存器 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x30`` .. list-table:: 表 5.13:FRTDEC_R0KEYR3 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY3 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [127:96] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 1 配置寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x40`` .. list-table:: 表 5.14:FRTDEC_R1CFGR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - REG_EN - 0 - 读写 - 0x0 - 区域实时解密使能 - 1'b0:禁用此区域的实时解密 - 1'b1:启用此区域的实时解密。数据与相应的密钥流进行异或 **注意:** :设置此位时,区域上下文(版本、密钥、nonce)必须有效,否则将解密出垃圾数据。 * - CFGLOCK - 1 - 读写 - 0x0 - 区域配置锁定 - 1'b0:允许写入此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器 - 1'b1:忽略对此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器的写入,直到下次 FRTDEC 复位 - 如果此位被设置,则只能在 FRTDEC 复位时复位为“0”。设置此位会强制 KEYLOCK 位为“1”。 * - KEYLOCK - 2 - 读写 - 0x0 - 区域密钥锁定 - 1'b0:允许写入此区域的 KEYRx 寄存器 - 1'b1:忽略对此区域的 KEYRx 寄存器的写入,KEYCRC 位域被锁定,直到下次 FRTDEC 复位。 * - 保留 - 3 - / - 0x0 - / * - MODE - 5:4 - 读写 - 0x0 - 操作模式 此位域选择此区域的 FRTDEC 操作模式 - 2'b00:仅对指令访问进行解密 - 2'b01:仅对数据访问进行解密 - 2'b10:对所有读访问(指令或数据)进行解密 - 当任一 MODE 位发生更改时,该区域的密钥将被清零。 * - 保留 - 7:6 - / - 0x0 - / * - KEYCRC - 15:8 - 只读 - 0x0 - - 区域密钥 8 位 CRC - 当 KEYLOCK=0 时,KEYCRC 位域在按以下精确序列加载此区域密钥时由硬件自动计算:先 KEYR0,然后 KEYR1,然后 KEYR2,最后 KEYR3(全部只写一次)。一旦开始新的有效序列,就会开始新的计算,并且在一个有效序列完成之前,读取 KEYCRC 为零。 - 当 KEYLOCK=1 时,KEYCRC 保持不变直到下次复位。 CRC 计算使用标准 CRC-8-CCITT 算法 X8 + X2 + X + 1(根据约定)进行 8 位校验和。源代码可参见本手册。 - 此字段为只读。 - 注意:CRC 信息仅在密钥的最后一位写入后更新。 * - VER - 31:16 - 读写 - 0x0 - 区域固件版本 此 16 位位域必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前正确初始化。 FRTDEC 区域 1 起始地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x44`` .. list-table:: 表 5.15:FRTDEC_R1STARTADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - STARTADDR - 31:0 - 读写 - 0x0 - - 区域 AXI 起始地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位和低 12 位返回零。 FRTDEC 区域 1 结束地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x48`` .. list-table:: 表 5.16:FRTDEC_R1ENDADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ENDADDR - 31:0 - 读写 - 0x0 - - 区域总线结束地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器,并且 RxENDADDR 必须严格大于 RxSTARTADDR 才有效。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位返回零,低 12 位返回1。 FRTDEC 区域 1 Nonce 寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x4C`` .. list-table:: 表 5.17:FRTDEC_R1NONCER0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER0 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 1 Nonce 寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x50`` .. list-table:: 表 5.18:FRTDEC_R1NONCER1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER1 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 1 密钥寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x54`` .. list-table:: 表 5.19:FRTDEC_R1KEYR0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY0 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 1 密钥寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x58`` .. list-table:: 表 5.20:FRTDEC_R1KEYR1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY1 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 1 密钥寄存器 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x5C`` .. list-table:: 表 5.21:FRTDEC_R1KEYR2 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY2 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [95:64] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 1 密钥寄存器 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x60`` .. list-table:: 表 5.22:FRTDEC_R1KEYR3 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY3 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [127:96] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 2 配置寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x70`` .. list-table:: 表 5.23:FRTDEC_R2CFGR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - REG_EN - 0 - 读写 - 0x0 - 区域实时解密使能 - 1'b0:禁用此区域的实时解密 - 1'b1:启用此区域的实时解密。数据与相应的密钥流进行异或 **注意:** :设置此位时,区域上下文(版本、密钥、nonce)必须有效,否则将解密出垃圾数据。 * - CFGLOCK - 1 - 读写 - 0x0 - 区域配置锁定 - 1'b0:允许写入此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器 - 1'b1:忽略对此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器的写入,直到下次 FRTDEC 复位 - 如果此位被设置,则只能在 FRTDEC 复位时复位为“0”。设置此位会强制 KEYLOCK 位为“1”。 * - KEYLOCK - 2 - 读写 - 0x0 - 区域密钥锁定 - 1'b0:允许写入此区域的 KEYRx 寄存器 - 1'b1:忽略对此区域的 KEYRx 寄存器的写入,KEYCRC 位域被锁定,直到下次 FRTDEC 复位。 * - 保留 - 3 - / - 0x0 - / * - MODE - 5:4 - 读写 - 0x0 - 操作模式 此位域选择此区域的 FRTDEC 操作模式 - 2'b00:仅对指令访问进行解密 - 2'b01:仅对数据访问进行解密 - 2'b10:对所有读访问(指令或数据)进行解密 - 当任一 MODE 位发生更改时,该区域的密钥将被清零。 * - 保留 - 7:6 - / - 0x0 - / * - KEYCRC - 15:8 - 只读 - 0x0 - - 区域密钥 8 位 CRC - 当 KEYLOCK=0 时,KEYCRC 位域在按以下精确序列加载此区域密钥时由硬件自动计算:先 KEYR0,然后 KEYR1,然后 KEYR2,最后 KEYR3(全部只写一次)。一旦开始新的有效序列,就会开始新的计算,并且在一个有效序列完成之前,读取 KEYCRC 为零。 - 当 KEYLOCK=1 时,KEYCRC 保持不变直到下次复位。 CRC 计算使用标准 CRC-8-CCITT 算法 X8 + X2 + X + 1(根据约定)进行 8 位校验和。源代码可参见本手册。 - 此字段为只读。 - 注意:CRC 信息仅在密钥的最后一位写入后更新。 * - VER - 31:16 - 读写 - 0x0 - 区域固件版本 此 16 位位域必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前正确初始化。 FRTDEC 区域 2 起始地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x74`` .. list-table:: 表 5.24:FRTDEC_R2STARTADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - STARTADDR - 31:0 - 读写 - 0x0 - - 区域 AXI 起始地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位和低 12 位返回零。 FRTDEC 区域 2 结束地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x78`` .. list-table:: 表 5.25:FRTDEC_R2ENDADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ENDADDR - 31:0 - 读写 - 0x0 - - 区域总线结束地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器,并且 RxENDADDR 必须严格大于 RxSTARTADDR 才有效。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位返回零,低 12 位返回1。 FRTDEC 区域 2 Nonce 寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x7C`` .. list-table:: 表 5.26:FRTDEC_R2NONCER0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER0 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 2 Nonce 寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x80`` .. list-table:: 表 5.27:FRTDEC_R2NONCER1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER1 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 2 密钥寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x84`` .. list-table:: 表 5.28:FRTDEC_R2KEYR0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY0 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 2 密钥寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x88`` .. list-table:: 表 5.29:FRTDEC_R2KEYR1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY1 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 2 密钥寄存器 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x8C`` .. list-table:: 表 5.30:FRTDEC_R2KEYR2 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY2 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [95:64] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 2 密钥寄存器 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x90`` .. list-table:: 表 5.31:FRTDEC_R2KEYR3 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY3 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [127:96] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 3 配置寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xA0`` .. list-table:: 表 5.32:FRTDEC_R3CFGR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - REG_EN - 0 - 读写 - 0x0 - 区域实时解密使能 - 1'b0:禁用此区域的实时解密 - 1'b1:启用此区域的实时解密。数据与相应的密钥流进行异或 **注意:** :设置此位时,区域上下文(版本、密钥、nonce)必须有效,否则将解密出垃圾数据。 * - CFGLOCK - 1 - 读写 - 0x0 - 区域配置锁定 - 1'b0:允许写入此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器 - 1'b1:忽略对此区域的 CFGR1、STARTADDR、ENDADDR 和 NONCERx 寄存器的写入,直到下次 FRTDEC 复位 - 如果此位被设置,则只能在 FRTDEC 复位时复位为“0”。设置此位会强制 KEYLOCK 位为“1”。 * - KEYLOCK - 2 - 读写 - 0x0 - 区域密钥锁定 - 1'b0:允许写入此区域的 KEYRx 寄存器 - 1'b1:忽略对此区域的 KEYRx 寄存器的写入,KEYCRC 位域被锁定,直到下次 FRTDEC 复位。 * - 保留 - 3 - / - 0x0 - / * - MODE - 5:4 - 读写 - 0x0 - 操作模式 此位域选择此区域的 FRTDEC 操作模式 - 2'b00:仅对指令访问进行解密 - 2'b01:仅对数据访问进行解密 - 2'b10:对所有读访问(指令或数据)进行解密 - 当任一 MODE 位发生更改时,该区域的密钥将被清零。 * - 保留 - 7:6 - / - 0x0 - / * - KEYCRC - 15:8 - 只读 - 0x0 - - 区域密钥 8 位 CRC - 当 KEYLOCK=0 时,KEYCRC 位域在按以下精确序列加载此区域密钥时由硬件自动计算:先 KEYR0,然后 KEYR1,然后 KEYR2,最后 KEYR3(全部只写一次)。一旦开始新的有效序列,就会开始新的计算,并且在一个有效序列完成之前,读取 KEYCRC 为零。 - 当 KEYLOCK=1 时,KEYCRC 保持不变直到下次复位。 CRC 计算使用标准 CRC-8-CCITT 算法 X8 + X2 + X + 1(根据约定)进行 8 位校验和。源代码可参见本手册。 - 此字段为只读。 - 注意:CRC 信息仅在密钥的最后一位写入后更新。 * - VER - 31:16 - 读写 - 0x0 - 区域固件版本 此 16 位位域必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前正确初始化。 FRTDEC 区域 3 起始地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xA4`` .. list-table:: 表 5.33:FRTDEC_R3STARTADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - STARTADDR - 31:0 - 读写 - 0x0 - - 区域 AXI 起始地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位和低 12 位返回零。 FRTDEC 区域 3 结束地址寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xA8`` .. list-table:: 表 5.34:FRTDEC_R3ENDADDR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - ENDADDR - 31:0 - 读写 - 0x0 - - 区域总线结束地址。 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器,并且 RxENDADDR 必须严格大于 RxSTARTADDR 才有效。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:确定区域时,忽略前 12 位(LSB)和后 4 位(MSB)。读取此寄存器时,高 4 位返回零,低 12 位返回1。 FRTDEC 区域 3 Nonce 寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xAC`` .. list-table:: 表 5.35:FRTDEC_R3NONCER0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER0 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 3 Nonce 寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xB0`` .. list-table:: 表 5.36:FRTDEC_R3NONCER1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - NONCER1 - 31:0 - 读写 - 0x0 - - 区域 Nonce,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 位被设置时写入此寄存器将被丢弃。 FRTDEC 区域 3 密钥寄存器 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xB4`` .. list-table:: 表 5.37:FRTDEC_R3KEYR0 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY0 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [31:0] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 3 密钥寄存器 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xB8`` .. list-table:: 表 5.38:FRTDEC_R3KEYR1 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY1 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [63:32] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 3 密钥寄存器 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xBC`` .. list-table:: 表 5.39:FRTDEC_R3KEYR2 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY2 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [95:64] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 区域 3 密钥寄存器 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0xC0`` .. list-table:: 表 5.40:FRTDEC_R3KEYR3 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - KEY3 - 31:0 - 只写 - 0x0 - - 区域密钥,位 [127:96] - 必须在 RxCFGR 寄存器中设置对应区域的 REG_EN 位之前写入此寄存器。 读取此寄存器返回零值。 - 当 RxCFGR 寄存器中区域的 CONFIGLOCK 或 KEYLOCK 位被设置时写入此寄存器将被丢弃。 - 注意:当应用程序成功更改 RxCFGR 寄存器中的 MODE 位时,RxKEYR 寄存器将被擦除 FRTDEC 中断状态寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x100`` .. list-table:: 表 5.41:FRTDEC_ISR 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - SEIF - 0 - 读写 - 0x0 - - 安全错误中断标志状态 此位由硬件设置,仅由应用程序读取。 - 当检测到至少一个安全错误(非法访问密钥、对锁定配置的非法写入)时,此位被设置。 - 由应用程序在此位写入 1'b1 清除。应用程序写入 1'b0 无效。 - 1'b0:无错误,无安全错误状态,无中断挂起。 - 1'b1:错误,安全错误标志状态,有中断挂起。实际中断生成取决于 FRTDEC_IER 中的相应位 SEIE。 * - XONEIF - 1 - 读写 - 0x0 - - 仅执行/从不执行错误中断标志状态 此位由硬件设置,仅由应用程序读取 - 当在任何 MODE 位设置为 00 的加密区域上检测到读取访问而非指令取指时,此位被设置。 - 当在任何 MODE 位设置为 01 的加密区域上检测到指令取指而非读取访问时,此位也被设置。 - 由应用程序在此位写入 1'b1 清除。应用程序写入 1'b0 无效。 - 1'b0:无错误,无安全错误状态,无中断挂起。 - 1'b1:错误,在 MODE 位设置为 00 的区域上检测到读取访问,或在 MODE 位设置为 01 的区域上检测到执行访问。 - FRTDEC 对非法访问返回零值,并且如果 FRTDEC_IER 寄存器中的 XONEIE 位设置为“1”,则会生成可选中断。 * - KEIF - 2 - 读写 - 0x0 - - 密钥错误中断标志状态 此位由硬件设置,仅由应用程序读取。 - 当密钥寄存器因异常事件(篡改检测、未经授权的调试器连接、不可信启动、RDP 级别回退)被复位后,在任何加密区域上发生读取访问时,此位被设置。 - 由应用程序在此位写入 1'b1 清除。应用程序写入 1'b0 无效。 - 1'b0:无错误,FRTDEC 正常运行 - 1'b1:错误,在异常事件之后,在已启用的加密区域上检测到读取访问 - FRTDEC 对该读取返回零值,并且如果 FRTDEC_IER 寄存器中的 KEIE 位设置为“1”,则会生成可选中断。 - KEIF 设置后,对任何已启用的加密区域的任何后续读取都返回零值。此状态持续到 FRTDEC 密钥被重新初始化为止。 * - 保留 - 31:3 - / - 0x0 - / FRTDEC 中断使能寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 地址偏移:``0x104`` .. list-table:: 表 5.42:FRTDEC_IER 的寄存器格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - SEIE - 0 - 读写 - 0x0 - 安全错误中断使能 - 1'b0:禁用,安全错误 SEIF 的中断生成被禁用(屏蔽) - 1'b1:启用,安全错误 SEIF 的中断生成被启用(未屏蔽) * - XONEIE - 1 - 读写 - 0x0 - 仅执行/从不执行错误中断使能 - 1'b0:禁用,仅执行错误 XONEIF 的中断生成被禁用(屏蔽) - 1'b1:启用,仅执行错误 XONEIF 的中断生成被启用(未屏蔽) * - KEIE - 2 - 读写 - 0x0 - 密钥错误中断使能 - 1'b0:禁用,密钥错误标志 KEIF 的中断生成被禁用(屏蔽) - 1'b1:启用,密钥错误标志 KEIF 的中断生成被启用(未屏蔽) * - 保留 - 31:3 - / - 0x0 - /