我在SDK里发现了一个漏洞。当我把二级引导加载程序放入外部Flash时,当芯片从休眠状态醒来时。它将停留在“system_DA14531.c”重新应用BANDGAP规则。
if ((GetBits16(HIBERN_CTRL_REG, HIBERNATION_ENABLE) == 1) && (GetBits16(SYS_CTRL_REG, REMAP_ADR0) > 1)){//应用BANDGAP_REG值SetWord16(BANDGAP_REG, booter_val.bandgap_reg);//应用CLK_RC32M_REG值SetWord16(CLK_RC32M_REG, booter_val.clk_rc32m_reg);//应用CLK_RC32K_REG值SetWord16(CLK_RC32K_REG, booter_val.clk_rc32k_reg);//应用调试器配置SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, booter_val.dbg_cfg);}
当我们从ExtFlash中的次级botloader store休眠中唤醒时,无论我们在休眠前设置的是什么,唤醒后REMAP_ADR0总是> 1。它会重新应用这些规则。
但是在引导加载程序中,分散文件没有定义“otp_cs_booter”节的地址。这将导致对这些规则应用不正确的值。这会导致芯片失效!
LR_1 0x07FC0000 0x00008000 {;加载区域size_region ER_1 +0 0x00002000 {;加载地址=执行地址*。o (RESET, +First) *(InRoot$$Sections) startup_DA14531. o (RESET, +First) *(InRoot$$Sections)o system_DA14531。o}ER_2 0x07FC8000 0x3000 { ; push it to the end of SysRAM .ANY (+RO) .ANY (+RW +ZI) .ANY (STACK) } ; *************************************************************************** ; Above the address 0x07FCB000 (0x07FC8000 + 0x3000) the RAM shall not be ; used by the secondary bootloader and shall remain uninitialized. The buffer ; used by the DA14531 TRNG software mechanism must use only uninitialized ; RAM space in order to generate random seeds. ; ; The maximum size of the uninitialized RAM data, which can be fed to the ; TRNG buffer, is 0xA00 since the DA14531 flash programmer (UART version) ; leaves unattached the memory space from 0x07FCB000 to 0x7FCBA00. ; *************************************************************************** }
这是引导加载程序使用的分散文件。其中没有“otp_cs_booter”节。
现在,让我们看看SDK的Scatter文件关于“otp_cs_booter”部分。
LR_IROM1 0x07fc0000 0xc0 {;ER_IROM1 0x07fc0000 0xc0 {;加载地址=执行地址*。o (RESET, +FIRST) .ANY (otp_cs_booter)}}
它集.ANY (otp_cs_booter)。所以从休眠中唤醒不会导致应用程序卡住,它只会导致二级引导加载程序卡住!
请告诉我,当我将bootloader刻录到OTP时,bug会消失吗?
或者,我可以用这种方法来解它吗?
ER_1 +0 0x00002000 {;加载地址=执行地址*。在这里添加section *(InRoot$$Sections) startup_DA14531.在这里添加sectiono system_DA14531。o}
Add section to bootloader scatter .ANY (otp_cs_booter)
设备:

你好,
谢谢你的反馈。请问您使用的SDK版本是什么?
谢谢,PM_Dialog
我使用SDK版本:6.0.14.1114与hotfix_001
你好,
谢谢你的建议。让我评估一下,我很快就会告诉你。
Thansk, PM_Dialog
这是SDK中确认的bug吗?我还面临着Flash中的休眠和二级引导加载的问题
为什么Dialog_PM还没有注意到它?
大家好!
很抱歉耽搁了。我们正在做这件事,本周末会回来。
谢谢,PM_Dialog
大家好!
请查看更新后的SW示例,演示如何在休眠模式下配置DA14531。以下是下载链接:DA14531配置休眠和状态感知休眠模式。在运行这个示例之前,我建议首先检查README文件。
谢谢,PM_Dialog