启动流程详解
理解系统启动流程有助于掌握 RDP 的工作原理和关键配置点:
RDP 使能后,Flash 加密区域存储加密的 TrustZone 安全固件,Image Header 中的地址字段指定需加载的安全地址。 系统从安全 ROM 启动后,后续启动流程都运行在 TrustZone 安全世界中。 启动流程中使用的关键外设(OTP、解密引擎、DMA 等)和内存均通过 MPC、PPC 实现安全隔离,确保固件加载流程的安全性。
各芯片的启动流程如下:
不支持 Flash 地址安全隔离,加密固件使用对称硬件加密引擎进行解密。系统启动时,固件被完整解密并加载至安全 RAM,再由 CPU 执行。 RDP 流程详解:
密钥加载:OTP 中的 RDP 密钥由硬件自动加载至对称硬件加密引擎。
固件读取:内部安全 DMA 分块读取外部 Flash 中的加密固件。
硬件解密:对称硬件加密引擎执行解密操作,并通过安全 DMA 传输至受保护的安全 RAM 区域。
执行:CPU 跳转至安全 RAM 开始执行安全固件。
不支持 Flash 地址安全隔离,加密固件使用对称硬件加密引擎进行解密。系统启动时,固件被完整解密并加载至安全 RAM,再由 CPU 执行。 RDP 流程详解:
密钥加载:OTP 中的 RDP 密钥由硬件自动加载至对称硬件加密引擎。
固件读取:内部安全 DMA 分块读取外部 Flash 中的加密固件。
硬件解密:对称硬件加密引擎执行解密操作,并通过安全 DMA 传输至受保护的安全 RAM 区域。
执行:CPU 跳转至安全 RAM 开始执行安全固件。
不支持 Flash 地址安全隔离,加密固件使用对称硬件加密引擎进行解密。系统启动时,固件被完整解密并加载至安全 RAM,再由 CPU 执行。 RDP 流程详解:
密钥加载:OTP 中的 RDP 密钥由硬件自动加载至对称硬件加密引擎。
固件读取:内部安全 DMA 分块读取外部 Flash 中的加密固件。
硬件解密:对称硬件加密引擎执行解密操作,并通过安全 DMA 传输至受保护的安全 RAM 区域。
执行:CPU 跳转至安全 RAM 开始执行安全固件。
不支持 Flash 地址安全隔离,加密固件使用对称硬件加密引擎进行解密。系统启动时,固件被完整解密并加载至安全 RAM,再由 CPU 执行。 RDP 流程详解:
密钥加载:OTP 中的 RDP 密钥由硬件自动加载至对称硬件加密引擎。
固件读取:内部安全 DMA 分块读取外部 Flash 中的加密固件。
硬件解密:对称硬件加密引擎执行解密操作,并通过安全 DMA 传输至受保护的安全 RAM 区域。
执行:CPU 跳转至安全 RAM 开始执行安全固件。
支持 Flash 地址安全隔离,加密固件使用 RSIP 硬件引擎。除支持将固件加载至 RAM 执行外,还支持 XIP(eXecute In Place)模式,可在 Flash 上实时解密执行,无需将固件完整加载至 RAM。 RDP 流程详解:
Flash 安全配置:首先将安全固件的逻辑地址通过 Flash MPC 配置为安全区域,阻止非安全世界的访问。
密钥加载:OTP 中的 RDP 密钥由硬件自动加载至 RSIP 引擎,随后配置 RSIP Entry。
运行模式选择:支持两种运行模式。
XIP 运行:CPU 在安全世界运行 Flash 中的安全代码时,RSIP 自动将固件解密为明文返还 CPU,无需将固件加载至 RAM。适用于固件较大、RAM 空间有限的场景。
RAM 运行:软件通过 RSIP 读取 Flash 中的密文固件至安全 RAM,读取过程自动解密成明文。CPU 在 RAM 中运行安全固件。适用于需要更高执行性能的场景。
执行:CPU 跳转至安全地址开始执行安全固件。
OTP 配置说明
OTP(One Time Programmable)用于存储 RDP 密钥和使能控制位,是 RDP 功能的硬件基础。 启动时 Bootloader 检查 OTP 中的使能位来决定是否使能 RDP。
OTP 只能写入一次,配置前需仔细核对地址和数据。配置顺序:先烧写密钥,再烧写使能位。
使用 IPSEC-S 硬件引擎配合 OTP 密钥解密安全固件。RDP 相关 OTP 配置如下:
名称 |
OTP 地址 |
大小(比特) |
描述 |
|---|---|---|---|
RDP_EN_PHY |
物理地址 0x368[5] |
1 |
永久使能位。烧写后 RDP 功能即被启用,不可撤销。量产阶段使用。 |
RDP_EN_LOG |
逻辑地址 0x3[4] |
1 |
可撤销使能位。烧写后 RDP 功能即被启用,后续可被禁用。开发调试阶段使用。 |
S_IPSEC_Key1 (RDP) |
物理地址 0x200 ~ 0x21F |
256 |
存储 RDP 密钥。 |
S_IPSEC_Key1_R_Protection_EN |
物理地址 0x365[3] |
1 |
读保护使能。烧写后 CPU 将无法读取密钥,防止密钥被读取。 |
S_IPSEC_Key1_W_Forbidden_EN |
物理地址 0x365[4] |
1 |
写保护使能。烧写后密钥将无法被修改,防止密钥被篡改。 |
备注
RDP OTP 密钥的最高有效字节存储在最高地址。
例如 Manifest.json5 中的密钥字符串为 otp_key_0x200: c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0 ,值 0xc9 需烧写至 eFuse 0x200,0xa8 至 0x201,依此类推。
使用 IPSEC-S 硬件引擎配合 OTP 密钥解密安全固件。RDP 相关 OTP 配置如下:
名称 |
OTP 地址 |
大小(比特) |
描述 |
|---|---|---|---|
RDP_EN_PHY |
物理地址 0x368[5] |
1 |
永久使能位。烧写后 RDP 功能即被启用,不可撤销。量产阶段使用。 |
RDP_EN_LOG |
逻辑地址 0x3[4] |
1 |
可撤销使能位。烧写后 RDP 功能即被启用,后续可被禁用。开发调试阶段使用。 |
S_IPSEC_Key1 (RDP) |
物理地址 0x200 ~ 0x21F |
256 |
存储 RDP 密钥。 |
S_IPSEC_Key1_R_Protection_EN |
物理地址 0x365[3] |
1 |
读保护使能。烧写后 CPU 将无法读取密钥,防止密钥被读取。 |
S_IPSEC_Key1_W_Forbidden_EN |
物理地址 0x365[4] |
1 |
写保护使能。烧写后密钥将无法被修改,防止密钥被篡改。 |
备注
RDP OTP 密钥的最高有效字节存储在最高地址。
例如 Manifest.json5 中的密钥字符串为 otp_key_0x200: c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0 ,值 0xc9 需烧写至 eFuse 0x200,0xa8 至 0x201,依此类推。
使用 IPSEC-S 硬件引擎配合 OTP 密钥解密安全固件。RDP 相关 OTP 配置如下:
名称 |
OTP 地址 |
大小(比特) |
描述 |
|---|---|---|---|
RDP_EN_PHY |
物理地址 0x368[5] |
1 |
永久使能位。烧写后 RDP 功能即被启用,不可撤销。量产阶段使用。 |
RDP_EN_LOG |
逻辑地址 0x3[4] |
1 |
可撤销使能位。烧写后 RDP 功能即被启用,后续可被禁用。开发调试阶段使用。 |
S_IPSEC_Key1 (RDP) |
物理地址 0x200 ~ 0x21F |
256 |
存储 RDP 密钥。 |
S_IPSEC_Key1_R_Protection_EN |
物理地址 0x365[3] |
1 |
读保护使能。烧写后 CPU 将无法读取密钥,防止密钥被读取。 |
S_IPSEC_Key1_W_Forbidden_EN |
物理地址 0x365[4] |
1 |
写保护使能。烧写后密钥将无法被修改,防止密钥被篡改。 |
备注
RDP OTP 密钥的最高有效字节存储在最高地址。
例如 Manifest.json5 中的密钥字符串为 otp_key_0x200: c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0 ,值 0xc9 需烧写至 eFuse 0x200,0xa8 至 0x201,依此类推。
使用 IPSEC-S 硬件引擎配合 OTP 密钥解密安全固件。RDP 相关 OTP 配置如下:
名称 |
OTP 地址 |
大小(比特) |
描述 |
|---|---|---|---|
RDP_EN_PHY |
物理地址 0x368[5] |
1 |
永久使能位。烧写后 RDP 功能即被启用,不可撤销。量产阶段使用。 |
RDP_EN_LOG |
逻辑地址 0x3[4] |
1 |
可撤销使能位。烧写后 RDP 功能即被启用,后续可被禁用。开发调试阶段使用。 |
S_IPSEC_Key1 (RDP) |
物理地址 0x200 ~ 0x21F |
256 |
存储 RDP 密钥。 |
S_IPSEC_Key1_R_Protection_EN |
物理地址 0x365[3] |
1 |
读保护使能。烧写后 CPU 将无法读取密钥,防止密钥被读取。 |
S_IPSEC_Key1_W_Forbidden_EN |
物理地址 0x365[4] |
1 |
写保护使能。烧写后密钥将无法被修改,防止密钥被篡改。 |
备注
RDP OTP 密钥的最高有效字节存储在最高地址。
例如 Manifest.json5 中的密钥字符串为 otp_key_0x200: c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0 ,值 0xc9 需烧写至 eFuse 0x200,0xa8 至 0x201,依此类推。
使用 RSIP 硬件引擎配合 OTP 密钥解密安全固件。RSIP 配置了两组 OTP 密钥供用户选择。RDP 相关 OTP 配置如下:
名称 |
OTP 地址 |
大小(比特) |
描述 |
|---|---|---|---|
RDP_EN_PHY |
物理地址 0x368[5] |
1 |
永久使能位。烧写后 RDP 功能即被启用,不可撤销。量产阶段使用。 |
RDP_EN_LOG |
逻辑地址 0x3[4] |
1 |
可撤销使能位。烧写后 RDP 功能即被启用,后续可被禁用。开发调试阶段使用。 |
RSIP 密钥在 OTP 中的位置及对应的读写保护位请参考 RSIP OTP 章节。
密钥组选择:
RSIP 配置了两组 OTP 密钥供用户选择。Bootloader 代码中默认使用第一组密钥(RSIP_KEY_NUM0)。若需使用第二组密钥,需修改 component/soc/amebagreen2/loader/bootloader/boot_security_km4tz.c 代码,将 RSIP_KEY_NUM0 改为 RSIP_KEY_NUM1。修改后需重新编译 bootloader。
int BOOT_DecRDPImg(u32 SrcAddr, Manifest_TypeDef *Manifest, SubImgInfo_TypeDef *SubImgInfo, u8 *Cnt)
{
...
/* check RSIP enable bit and set RSIP */
BOOT_RSIPIvSet(Manifest, RSIP_IV3);
FIH_CALL(BOOT_ROM_OTFCheck, fih_rc, LogAddr, (u32)__km4tz_img3_text_end__, RSIP_IV3, RSIP_REGION3,
RSIP_KEY_NUM0, IMG3_GCM_TagBase, Manifest->RSIPConfig, MANIFEST_SECURE_IMG3_ID);
...
}
备注
RDP OTP 密钥的最高有效字节存储在最高地址。
例如 Manifest.json5 中的密钥字符串为 otp_key_0x2C0: E2A0D6500BBF1DD8DC212098C230EB731ECE3A81AA11D0E6E538FA36BBA4FF6E ,值 0xE2 需烧写至 eFuse 0x2C0,0xA0 至 0x2C1,依此类推。
使能方法
RDP 使能分为三个阶段,请按顺序执行:
开发阶段:SDK 配置和固件编译
生产阶段:OTP 烧写和固件烧录
产线验证阶段:检查 RDP 功能是否正常使能
开发阶段
步骤 1:启用 TrustZone
RAM 安全区域大小由 SDK 默认配置。用户可根据固件大小通过修改工程目录下链接脚本
ameba_layout.ld中的TZ_S_SIZE宏定义来调整区域大小。
步骤 2:配置安全固件加密参数
配置安全固件的 Manifest 文件以指定加密参数,配置文件为
<SDK>\component\soc\amebadxxx\project\manifest.json5:RTL8721Dx:后处理脚本将根据配置文件中的密钥生成 AES-CBC 加密的 RDP 固件。
配置项说明
rdp_enable:启用 RDP 加密功能
rdp_iv:AES-CBC 加密的初始化向量
otp_key_0x200:RDP 密钥,需与 OTP 中烧写的密钥保持一致配置步骤
将 image3 中
rdp_enable设为 1,启用 RDP 加密功能。填写
rdp_iv,长度必须为 8 字节(AES-CBC 需要 16 字节 IV,另外 8 字节复用 image2 的rsip_iv)。填写
otp_key_0x200,长度必须为 32 字节,且需与生产阶段烧写的 OTP 密钥保持一致。{ ... image2: { rsip_iv: "213253647586a7b8", }, image3: { rdp_enable: 1, rdp_iv: "0123456789abcdef", rdp_key: "otp_key_0x200", }, /* =================================== OTP key value =================================== */ ... otp_key_0x200: "c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0", ... }RTL8720E:后处理脚本将根据配置文件中的密钥生成 AES-CBC 加密的 RDP 固件。
配置项说明
rdp_enable:启用 RDP 加密功能
rdp_iv:AES-CBC 加密的初始化向量
otp_key_0x200:RDP 密钥,需与 OTP 中烧写的密钥保持一致配置步骤
将 image3 中
rdp_enable设为 1,启用 RDP 加密功能。填写
rdp_iv,长度必须为 8 字节(AES-CBC 需要 16 字节 IV,另外 8 字节复用 image2 的rsip_iv)。填写
otp_key_0x200,长度必须为 32 字节,且需与生产阶段烧写的 OTP 密钥保持一致。{ ... image2: { rsip_iv: "213253647586a7b8", }, image3: { rdp_enable: 1, rdp_iv: "0123456789abcdef", rdp_key: "otp_key_0x200", }, /* =================================== OTP key value =================================== */ ... otp_key_0x200: "c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0", ... }RTL8726E:后处理脚本将根据配置文件中的密钥生成 AES-CBC 加密的 RDP 固件。
配置项说明
rdp_enable:启用 RDP 加密功能
rdp_iv:AES-CBC 加密的初始化向量
otp_key_0x200:RDP 密钥,需与 OTP 中烧写的密钥保持一致配置步骤
将 image3 中
rdp_enable设为 1,启用 RDP 加密功能。填写
rdp_iv,长度必须为 8 字节(AES-CBC 需要 16 字节 IV,另外 8 字节复用 image2 的rsip_iv)。填写
otp_key_0x200,长度必须为 32 字节,且需与生产阶段烧写的 OTP 密钥保持一致。{ ... image2: { rsip_iv: "213253647586a7b8", }, image3: { rdp_enable: 1, rdp_iv: "0123456789abcdef", rdp_key: "otp_key_0x200", }, /* =================================== OTP key value =================================== */ ... otp_key_0x200: "c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0", ... }RTL8730E:后处理脚本将根据配置文件中的密钥生成 AES-CBC 加密的 RDP 固件。
配置项说明
rdp_enable:启用 RDP 加密功能
rdp_iv:AES-CBC 加密的初始化向量
otp_key_0x200:RDP 密钥,需与 OTP 中烧写的密钥保持一致配置步骤
将 image3 中
rdp_enable设为 1,启用 RDP 加密功能。填写
rdp_iv,长度必须为 8 字节(AES-CBC 需要 16 字节 IV,另外 8 字节复用 image2 的rsip_iv)。填写
otp_key_0x200,长度必须为 32 字节,且需与生产阶段烧写的 OTP 密钥保持一致。{ ... image2: { rsip_iv: "213253647586a7b8", }, image3: { rdp_enable: 1, rdp_iv: "0123456789abcdef", rdp_key: "otp_key_0x200", }, /* =================================== OTP key value =================================== */ ... otp_key_0x200: "c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0", ... }RTL8721F:后处理脚本将根据配置生成使用 RSIP 指定模式(XTS、GCM)加密的 RDP 固件。
加密模式选择
XTS 模式:适用于数据加密,安全性高,推荐使用
GCM 模式:支持完整性验证,适用于需要同时保证机密性和完整性的场景
CTR 模式:不推荐使用
配置项说明
rsip_enable:启用 RSIP 加密功能
rsip_mode:选择加密模式(2=GCM,1=XTS,0=CTR)
rsip_key_group:选择密钥组
otp_key_0xXXX:RSIP 密钥,需与 OTP 中烧写的密钥保持一致配置步骤
将
rsip_enable设为 1,启用 RSIP 加密功能。
image3默认继承 image1 的 RSIP 加密配置(image1 也是安全固件)。用户也可去除 image3 中的inherit_from关键字,单独在 image3 中添加 RSIP 加密配置。
otp_key_0xXXX密钥长度必须为 32 字节,且需与生产阶段烧写的 RSIP OTP 密钥保持一致。{ version: 1, image1: { ... /* rsip_key_group valid option: "rsip_xts_g0", "rsip_xts_g1", "rsip_gcm_g0", "rsip_gcm_g1", "rsip_ctr_g0", "rsip_ctr_g1" */ rsip_key_group: "rsip_xts_g0", rsip_iv: "0102030405060708", ... }, ... image3: { inherit_from: "image1", }, ... /* ================================ RSIP globle settings =============================== */ rsip_enable: 1, /* rsip_mode valid option: 2 (GCM), 1 (XTS), 0 (CTR) */ rsip_mode: 1, /* rsip_gcm_tag_len valid option: 4 / 8 / 16 (bytes) */ rsip_gcm_tag_len: 4, /* rsip key group define, users do not modify */ rsip_xts_g0: ["otp_key_0x2C0", "otp_key_0x2E0"], rsip_xts_g1: ["otp_key_0x200", "otp_key_0x220"], rsip_gcm_g0: ["otp_key_0x2E0"], rsip_gcm_g1: ["otp_key_0x220"], /* ctr mode not recommend */ rsip_ctr_g0: ["otp_key_0x2E0"], rsip_ctr_g1: ["otp_key_0x220"], /* =================================== OTP key value =================================== */ otp_key_0x2C0: "E2A0D6500BBF1DD8DC212098C230EB731ECE3A81AA11D0E6E538FA36BBA4FF6E", otp_key_0x2E0: "6AA34203018334474B25A0600996CA0968AA6228B886FF234B4EB9628B703C0A", otp_key_0x200: "c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0", otp_key_0x220: "9874918301909234686574856692873911223344556677889900aabbccddeeff", }
步骤 3:编译固件
重新编译工程,后处理脚本会根据配置文件中的密钥自动生成加密的安全固件。加密后的安全固件会被自动集成在 app.bin 的末尾部分。
完成开发阶段配置后,固件已准备就绪。接下来进入生产阶段,进行 OTP 烧写和固件烧录操作。
生产阶段
备注
使用 AT+SEC 命令前需在 menuconfig 中使能 CONFIG_ATCMD_SECURE ,路径: CONFIG SHELL → Enable ATCMD SECURE (默认关闭)。
RDP 量产需要使用量产工具固件执行 OTP 烧录动作。这是因为加密的应用固件必须依赖 OTP 中正确配置的密钥才能启动,在 OTP 配置完成之前,加密的应用固件无法正常运行。 RDP 量产流程与 RSIP 类似,详细流程请参考 应用手册的 Flash XIP 解密 (RSIP) 量产指导章节。
步骤 4:烧写 RDP 密钥
RDP 密钥用于加密安全固件,硬件在启动时使用该密钥解密固件。
RTL8721Dx:设备进入量产阶段时必须烧写 RDP 密钥。
备注
使用 AT+SEC 命令前需在 menuconfig 中使能
CONFIG_ATCMD_SECURE,路径:CONFIG SHELL → Enable ATCMD SECURE(默认关闭)。使用以下命令烧写 RDP 密钥:
AT+SEC=RDP_KEY,c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0RDP 密钥长度必须为 32 字节。上述为示例值,请随机生成其他密钥。写入后命令会自动回读 OTP 并校验,若校验失败会返回错误信息。
确认密钥烧写正确后,置位密钥读保护与写保护比特:
AT+SEC=RDP_PROT,rw此操作将同时置位
S_IPSEC_Key1_R_Protection_EN(防止密钥被读取)和S_IPSEC_Key1_W_Forbidden_EN(防止密钥被篡改)。RTL8720E:设备进入量产阶段时必须烧写 RDP 密钥。
备注
使用 AT+SEC 命令前需在 menuconfig 中使能
CONFIG_ATCMD_SECURE,路径:CONFIG SHELL → Enable ATCMD SECURE(默认关闭)。使用以下命令烧写 RDP 密钥:
AT+SEC=RDP_KEY,c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0RDP 密钥长度必须为 32 字节。上述为示例值,请随机生成其他密钥。写入后命令会自动回读 OTP 并校验,若校验失败会返回错误信息。
确认密钥烧写正确后,置位密钥读保护与写保护比特:
AT+SEC=RDP_PROT,rw此操作将同时置位
S_IPSEC_Key1_R_Protection_EN(防止密钥被读取)和S_IPSEC_Key1_W_Forbidden_EN(防止密钥被篡改)。RTL8726E:设备进入量产阶段时必须烧写 RDP 密钥。
备注
使用 AT+SEC 命令前需在 menuconfig 中使能
CONFIG_ATCMD_SECURE,路径:CONFIG SHELL → Enable ATCMD SECURE(默认关闭)。使用以下命令烧写 RDP 密钥:
AT+SEC=RDP_KEY,c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0RDP 密钥长度必须为 32 字节。上述为示例值,请随机生成其他密钥。写入后命令会自动回读 OTP 并校验,若校验失败会返回错误信息。
确认密钥烧写正确后,置位密钥读保护与写保护比特:
AT+SEC=RDP_PROT,rw此操作将同时置位
S_IPSEC_Key1_R_Protection_EN(防止密钥被读取)和S_IPSEC_Key1_W_Forbidden_EN(防止密钥被篡改)。RTL8730E:设备进入量产阶段时必须烧写 RDP 密钥。
备注
使用 AT+SEC 命令前需在 menuconfig 中使能
CONFIG_ATCMD_SECURE,路径:CONFIG SHELL → Enable ATCMD SECURE(默认关闭)。使用以下命令烧写 RDP 密钥:
AT+SEC=RDP_KEY,c9a8b1f4e7d293b6a5d8f009be6c3d21e4a7b8f5d3b901a984087844c2f7b6e0RDP 密钥长度必须为 32 字节。上述为示例值,请随机生成其他密钥。写入后命令会自动回读 OTP 并校验,若校验失败会返回错误信息。
确认密钥烧写正确后,置位密钥读保护与写保护比特:
AT+SEC=RDP_PROT,rw此操作将同时置位
S_IPSEC_Key1_R_Protection_EN(防止密钥被读取)和S_IPSEC_Key1_W_Forbidden_EN(防止密钥被篡改)。RTL8721F:RDP 使用 RSIP 密钥组进行加解密。RSIP 密钥在 OTP 中的位置及对应的读写保护位请参考 RSIP OTP 章节。
备注
使用 AT+SEC 命令前需在 menuconfig 中使能
CONFIG_ATCMD_SECURE,路径:CONFIG SHELL → Enable ATCMD SECURE(默认关闭)。用户可从 RSIP 的两组密钥中选择使用其中一组。
烧录 RSIP 密钥
根据所选密钥组和模式,使用以下命令烧录密钥(以第一组 group0 密钥 XTS 模式为例):
AT+SEC=RSIP_KEY,grp0,xts,E2A0D6500BBF1DD8DC212098C230EB731ECE3A81AA11D0E6E538FA36BBA4FF6E,6AA34203018334474B25A0600996CA0968AA6228B886FF234B4EB9628B703C0AXTS 模式需分别传入两段 32 字节密钥(ECB 密钥, CTR 密钥);CTR/GCM 模式为一段 32 字节密钥。上述为示例值,请随机生成其他密钥。
备注
写入后命令会自动回读 OTP 并校验,若校验失败会返回错误信息。
置位保护比特
确认密钥烧写正确后,使用以下命令置位 group0 对应的读写保护:
AT+SEC=RSIP_PROT,grp0,rw
步骤 5:烧写 RDP 使能位
RDP 使能位用于启用 RDP 功能,根据设备所处阶段选择合适的使能方式:
开发阶段:设备处于开发阶段时,建议使用临时使能(后续可关闭):
AT+SEC=RDP_EN,temp关闭上述临时使能(若已通过
perm永久使能,则此命令无效):AT+SEC=RDP_EN,temp_off量产阶段:设备进入量产阶段时,应使用永久使用以永久启用 RDP 功能:
AT+SEC=RDP_EN,perm
步骤 6:烧写固件
将开发阶段编译生成的 boot.bin 和 app.bin 烧录至 Flash。
产线验证
完成上述所有配置后,复位开发板进行验证。若 RDP 功能正常使能,启动日志中会显示 RDP EN 打印。
小心
RDP 功能不会验证固件的合法性。为防止固件被篡改,需与安全启动配合使用。详情请参考 安全启动章节 。