芯片休眠后死亡,使用OTA时唤醒

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

我在SDK中发现了一个bug。当我把二级引导加载程序放入外部Flash时,当芯片从休眠中唤醒时。它将卡住在“system_DA14531.c”重新应用BANDGAP regs。

if (GetBits16(hibernation_reg, HIBERNATION_ENABLE) == 1) & (GetBits16(SYS_CTRL_REG, REMAP_ADR0) > 1)){//应用BANDGAP_REG值SetWord16(BANDGAP_REG, booter_val.bandgap_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中唤醒时,无论我们在休眠之前设置了什么,REMAP_ADR0在唤醒后总是> 1。它会重新应用这些规则。

但是在引导加载程序中,散射文件没有定义“otp_cs_booter”节的地址。它将导致对这些规则应用不正确的值。它会导致芯片死亡!

LR_1 0x07FC0000 0x00008000 {;load_region ER_1 +0 0x00002000 {;加载地址=执行地址*。o (RESET, +First) *(InRoot$$Sections) startup_DA14531。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关于“otp_cs_booter”一节的Scatter文件。

LR_IROM1 0x07fc0000 0xc0 {;ER_IROM1 0x07fc0000 0xc0 {;加载地址=执行地址*。o (RESET, +FIRST) .ANY (otp_cs_booter)}}

它集.ANY (otp_cs_booter)。所以从休眠中唤醒不会导致应用程序卡住,它只会导致二级引导加载程序卡住!

请告诉我,当我将引导程序刻录到OTP时,bug会消失吗?

或者,我能用这个方法解出来吗?

ER_1 +0 0x00002000 {;加载地址=执行地址*。在这里添加section *(InRoot$$Sections) startup_DA14531。o system_DA14531。o}

添加节到引导加载程序分散.ANY (otp_cs_booter)

设备:
PM_Dialog
离线
最后看到:53分22秒前
工作人员
加入:2018-02-08 11:03
你好,

你好,

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

谢谢,PM_Dialog

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

我使用SDK版本:6.0.14.1114与hotfix_001

PM_Dialog
离线
最后看到:53分22秒前
工作人员
加入:2018-02-08 11:03
你好,

你好,

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

Thansk, PM_Dialog

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

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

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

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

PM_Dialog
离线
最后看到:53分22秒前
工作人员
加入:2018-02-08 11:03
大家好!

大家好!

很抱歉耽搁了。我们正在努力,本周末就会回来。

谢谢,PM_Dialog

PM_Dialog
离线
最后看到:53分22秒前
工作人员
加入:2018-02-08 11:03
大家好!

大家好!

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

谢谢,PM_Dialog