我可能在SDK中发现了一个bug。当我将辅助引导加载程序放入外部闪存时,当芯片从休眠状态唤醒时。如果重新应用带隙寄存器,它将卡在“system_DA14531.c”上。
如果((GetBits16(HIBERN\u CTRL\u REG,HIBERNATION\u ENABLE)=1)和(&(GetBits16(SYS\u CTRL\u REG,REMAP\u ADR0)>1)){//应用带隙\u REG值SetWord16(带隙\u REG,booter\u val.BANDGAP\u REG);//应用CLK\u RC32M\u REG值SetWord16(CLK\u RC32M\u REG,booter\u val.CLK\u RC32M\u REG)//应用CLK\u RC32K\u REG值SetWord16(CLK_RC32K_REG,booter_val.CLK_RC32K_REG)//应用调试器配置SetBits16(SYS_CTRL_REG,debugger_ENABLE,booter_val.dbg_cfg);)
当我们从休眠中唤醒ExtFlash中的二级botloader存储时,无论我们在休眠前设置什么,在唤醒后重新映射ADR0总是>1。它将重新应用这些regs。
但在引导加载程序中,分散文件未定义“otp_cs_booter”部分的地址。这将导致对这些注册表应用不正确的值。这将导致芯片死机!
LR_1 0x07FC0000 0x00008000{;加载区域大小\u区域ER_1+0 0x00002000{;加载地址=执行地址*.o(重置,+First)*(在root$$Sections中)启动\u DA14531.o系统\u DA14531.o}ER_2 0x07FC8000 0x3000{;将其推到SysRAM的末尾。ANY(+RO)。ANY(+RW+ZI)。ANY(堆栈)}在地址0x07FCB000(0x07FC8000+0x3000)上方辅助引导加载程序不应使用RAM,且应保持未初始化状态。DA14531 TRNG软件机制使用的缓冲区必须仅使用未初始化的RAM空间,以便生成随机种子;自DA14531闪存编程以来,可馈送至;TRNG缓冲区的未初始化RAM数据的最大大小为0xA00rammer(UART版本);保留从0x07FCB000到0x7FCBA00的未附加内存空间。***********************************************************************************************************************************************************************************************************}
这是引导加载程序使用的分散文件。其中没有“otp_cs_booter”部分。
现在,让我们看看SDK关于“otp_cs_booter”部分的分散文件。
LR_IROM1 0x07fc0000 0xc0{;ER_IROM1 0x07fc0000 0xc0{;加载地址=执行地址*.o(重置,+FIRST).ANY(otp_cs_引导器)}
它设置.ANY(otp\u cs\u引导器)。所以从休眠中唤醒不会导致应用程序卡住,它只会导致辅助引导加载程序卡住!
请告诉我,当我将引导加载程序刻录到OTP时,bug会消失吗?
或者,我可以用这种方法来解决它吗?
ER_1+0 0x00002000{;加载地址=执行地址*.o(重置,+First).ANY(otp_cs_booter);在此处添加节*(InRoot$$Sections)启动_DA14531.o系统_DA14531.o}
将节添加到引导加载程序scatter.ANY(otp_cs_booter);在此处添加节
设备:


你好,
感谢您的反馈。请您指出您正在使用的SDK版本好吗?
谢谢,下午好
我正在使用SDK版本:6.0.14.1114和修补程序
你好,
谢谢你的意见。让我来评估一下,我会很快告诉你的。
坦斯克,下午对话
这是SDK中确认的错误吗?我还面临着休眠和在Flash中使用辅助引导加载程序的问题
为什么对话还没有注意到呢?
大家好,,
抱歉耽搁了。我们正在处理这件事,将在本周末回来。
谢谢,下午好
大家好,,
请查看更新的软件示例,演示如何在休眠模式下配置DA14531。这是下载DA14531的链接:DA14531配置休眠和状态感知休眠模式. 在运行这个示例之前,我建议首先检查自述文件。
谢谢,下午好