17个帖子/ 0新
最后一篇
布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
保留数据

你好呀,

我正在研究DA14580的项目,我需要在断电或重置时将一些数据存储到DB中。
我在哪里可以找到一些如何做到这一点的信息?

设备:
mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

您必须使用外部内存设备来存储数据,您可以看一下智能标签参考设计,它基于旧的SDK(SDK3),但是在那里您将在有关如何在外部存储数据的示例闪存设备。该示例存储绑定数据或有效配对连接。

谢谢mt_dialog.

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
嗨MT_dialog,

嗨MT_dialog,

谢谢你的支持!

如果我搞定,我必须使用nvds将数据存储到闪存中?如果这是正确的,我可以定义自己的标签来存储必要的数据吗?
还如何处理像看门狗重置的软复位?

谢谢你!

mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

NVDS与将数据存储到闪光灯中无关,NVDS是设备的持久性静态数据,如设备的名称或设备的BD地址,一旦将这些数据放入设备中或者到您刻录的代码中无法改变。请检查我提到的参考设计,以检查如何将数据存储到闪存中。

你的意思是如何处理看门狗复位,如果看门狗中断发生设备应该复位,你可以查看以下帖子的一些信息这https://support.dialog-semicondiondionder.com/testing-watchdog.

谢谢mt_dialog.

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
嗨MT_dialog,

嗨MT_dialog,

谢谢你!

抱歉,我是BLE堆栈的新手。我检查了智能标签的参考设计,如果我正确地,我需要使用spi_flash?如果是正确的,那么有一个指南如何正确设置SPI_FLASH?

关于看门狗我没有正确解释它。我想要完成的是系统开始将一些数据存储到DB中,只有在重置(由看门狗或什么以上)但没有关闭/关闭电源以再次加载此数据。这可能吗?

很多谢谢!

mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

是的,你需要设置一个闪存设备来存储你的应用程序的数据。对于设置闪光灯从sw的观点,你可以检查如何与闪光灯的智能标签接口,引脚如何设置等。要了解更多信息,你可以看看AN-B-023与外部存储器的接口。

没有例子可以说明你的请求或者你可以读取的东西(580的寄存器)在重置后表明重置来自于一个意外的情况,一个看门狗的硬故障但是你可以尝试一个想法,是在外部SPI内存中存储一个标志,以防止意外情况发生,当启动时,您可以从外部内存读取该标志并采取相应的行动。

谢谢mt_dialog.

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
嗨MT_Dialog,

嗨MT_Dialog,

我看过AN-B-023,看起来很有希望。
发生意外情况时是否有一个处理程序?或者我应该修改重置逻辑(这个逻辑可以在哪里?)?

很多谢谢!

mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

当发生错误时,没有一个特定的处理程序,当发生错误时,SDK实现以下处理程序:

  • HardFault_Handlerc()对于ARM的任何硬故障。
  • 看门狗中断的NMI_HandlerC()
  • wrap_platform_reset(),在ROM代码分配内存失败的情况下调用(这不是一个处理器,而是一个重置设备的实际函数)。

谢谢mt_dialog.

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
嗨MT_Dialog,

嗨MT_Dialog,

谢谢你的帮助!

我模拟看门狗重启和调试器进入NMI_HandlerC,但之后我不能设置断点。我在想的是,调试器在重启后没有再次连接。有什么好办法吗?

谢谢!

mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

NMI_Handler击中时,如果你不该有DEVELOPMENT_DEBUG定义(其他你陷入)得到执行函数的最后一行,它迫使580罗重新映射,所以引导装载程序运行这意味着代码执行在那一刻与你无关凯尔项目。为了做你想要的,你将不得不重新映射在RAM和强制软件重置,这样你的设备将保持连接,你将能够继续调试。我所附的帖子有关于你所要求的信息。

谢谢mt_dialog.

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
嗨MT_dialog,

嗨MT_dialog,

所以
1)我已定义cfg_development_debug和cgf_wdog
2)我已经评论了Arch_Main.cwdg_reload(WatchDog_default_Period)
3)我已经设置SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET);和REMP_ADRO = 0x02(我也尝试它的原始值)
3 .我被困住了。

我做错了什么?

谢谢

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
所以我发现了这个问题。

所以我发现了这个问题。在执行之前
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET)

我必须设置
setbits16(sys_ctrl_reg,remap_adr0,0x2);
该程序再次开始。到目前为止,一切都很好。

通过设置remap_adr0,= 0x2是保留空间清除?
我有结构
volatile struct app_data_tag env_tag __attribute__((部分(“保留_mem_area0”),zero_init);
我想在保留空间中存储一些数据和标志,并在看门狗重置后读取此数据。
但是在看门狗重置后,开始程序env_tag是空的。

这个定义是否正确,我该如何做到,以防止保留空间被清除?

非常感谢!

mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

通过设置REMAP地址,您只需将SYSRAM映射为ZER ZERE ADDREND以进行执行。这不是数据初始化的原因,我假设ARM库在Sysram中将代码设置为在ARM开始执行代码时在ScatterFile中声明。此外,由于您将变量放在Retention_mem_area0中,并且您看到重置后,您才能获得零,我想您正在使用扩展睡眠的内存映射。在扩展内存配置的情况下,Retention_Mem_area0标签未显示在保留RAM上,但它位于Sysram中(因为Sysram始终没有,因此没有实际含义来保留存储器保留区域中的任何数据)。因此,由于Retent_Mem_area0位于Sysram中,因此在包含零初始化数据的位置,因此每次系统重新启动时变量都会归零。为了保留数据而不获得变量初始化,您必须在散点图中使用新标记设置一个新的区域,使您的数据脱初级化。例如,您将通过使用分散文件中的UNINIT关键字来执行此操作,例如:

test_iram 0x20008338 uninit 0x4 {
*(test_variable)
}

谢谢mt_dialog.

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
嗨MT_dialog,

嗨MT_dialog,

干这活!谢谢!

我可以在生产中使用这个新地区,或者我应该坚持保留_mem_area0?
0x4是区域的大小,对吧?

谢谢!

mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

是的,它是该地区的大小。

在生产中,我假设你的意思当图像上传到sysram再次通过外部设备或OTP,我认为如果你这样做你的变量属于retention_mem_area0将被设置为一分之零新启动以来未初始化的全局变量,所以它属于子数据,它将重新初始化为零在一个新的上传,所以你不会得到你之前重置的值。

谢谢mt_dialog.

布伯拉
离线
最后一次露面:3年10个月前
加入:2016-10-31 07:02
嗨MT_dialog,

嗨MT_dialog,

是的,我的意思是,当图像上传到OTP,所以我应该坚持我的自定义区域在这种情况下。

谢谢!

mt_dialog.
离线
最后一次露面:1个月20个小时前
职员
加入:2015-06-08 11:34
嗨Bulbera,

嗨Bulbera,

如果您认为上述任何建议都有助于请将答案标记为“已接受”。

谢谢mt_dialog.