使用OTA时休眠唤醒后死亡

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support。我们会在接下来的几天修复bug /优化搜索和标记。
8个职位/ 0个新职位
最后发表
wanhuaqifang
离线
最后看到:6个月2个星期前
加入:2020-01-02 07:07
使用OTA时休眠唤醒后死亡

我在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)

设备:
PM_Dialog
离线
最后看到:2天7小时前
工作人员
加入:2018-02-08 11:03
你好,

你好,

谢谢你的反馈。请问您使用的SDK版本是什么?

谢谢,PM_Dialog

wanhuaqifang
离线
最后看到:6个月2个星期前
加入:2020-01-02 07:07
我使用的是SDK版本:6.0.14

我使用SDK版本:6.0.14.1114与hotfix_001

PM_Dialog
离线
最后看到:2天7小时前
工作人员
加入:2018-02-08 11:03
你好,

你好,

谢谢你的建议。让我评估一下,我很快就会告诉你。

Thansk, PM_Dialog

eddwhite1
离线
最后看到:9个月3天前
加入:2020-10-02 23:29
这是一个确认的错误吗

这是SDK中确认的bug吗?我还面临着Flash中的休眠和二级引导加载的问题

wanhuaqifang
离线
最后看到:6个月2个星期前
加入:2020-01-02 07:07
为什么Dialog_PM没有呢

为什么Dialog_PM还没有注意到它?

PM_Dialog
离线
最后看到:2天7小时前
工作人员
加入:2018-02-08 11:03
大家好!

大家好!

很抱歉耽搁了。我们正在做这件事,本周末会回来。

谢谢,PM_Dialog

PM_Dialog
离线
最后看到:2天7小时前
工作人员
加入:2018-02-08 11:03
大家好!

大家好!

请查看更新后的SW示例,演示如何在休眠模式下配置DA14531。以下是下载链接:DA14531配置休眠和状态感知休眠模式。在运行这个示例之前,我建议首先检查README文件。

谢谢,PM_Dialog