你好,
我正在做一个DA14580的项目,我需要存储一些数据到db,以防断电或复位。我在哪里可以找到一些如何做到这一点的信息?
嗨bulbera,
你必须使用一个外部存储设备来存储数据,你可以看看Smart Tag参考设计,它是基于一个较老的SDK (SDK3),但在那里你会找到一个如何在外部闪存设备上存储数据的例子。该示例存储绑定数据或有效的配对连接。
由于MT_dialog
嗨MT_dialog,
感谢您的支持!
如果我做对了,我必须使用nvds把数据存储到闪存?如果这是正确的,我可以定义自己的标记来存储必要的数据吗?我如何处理软复位,如看门狗复位?
谢谢你!
nvd已经与将数据存储到flash, nvd是持久等静态数据设备的名称或设备的bd地址,一旦这些数据被放置到设备OTP或者为你燃烧他们的代码不能被改变。请检查我提到的参考设计,以便检查如何存储数据到flash。
你的意思是如何处理看门狗复位,如果看门狗中断发生设备应该复位,你可以查看以下帖子的一些信息这https://support.dialog-semiconductor.com/testing-watchdog.
抱歉,我是新来的。我已经检查了Smart Tag的参考设计,如果我正确的话,我需要使用spi_flash ?如果这是正确的,是否有一个如何正确设置spi_flash的指南?
关于看门狗,我没有解释清楚。我想要完成的是在系统上开始存储一些数据到db,只有当有复位(由看门狗或什么),但不断电/下电再次加载这个数据。这是可能的吗?
很多谢谢!
是的,你需要设置一个闪存设备来存储你的应用程序的数据。对于设置闪光灯从sw的观点,你可以检查如何与闪光灯的智能标签接口,引脚如何设置等。要了解更多信息,你可以看看AN-B-023与外部存储器的接口。
没有例子可以说明你的请求或者你可以读取的东西(580的寄存器)在重置后表明重置来自于一个意外的情况,一个看门狗的硬故障但是你可以尝试一个想法,是在外部SPI内存中存储一个标志,以防止意外情况发生,当启动时,您可以从外部内存读取该标志并采取相应的行动。
嗨MT_Dialog,
我看了AN-B-023,看起来很有希望。是否有一个处理程序将被调用时,意外条件发生?或者我应该修改重置逻辑(在哪里可以这个逻辑?)?
当错误发生时,没有特定的处理程序被调用,SDK实现了以下处理程序:
谢谢你的帮助!
我模拟看门狗重启和调试器进入NMI_HandlerC,但之后我不能设置断点。我在想的是,调试器在重启后没有再次连接。有什么好办法吗?
谢谢!
NMI_Handler击中时,如果你不该有DEVELOPMENT_DEBUG定义(其他你陷入)得到执行函数的最后一行,它迫使580罗重新映射,所以引导装载程序运行这意味着代码执行在那一刻与你无关凯尔项目。为了做你想要的,你将不得不重新映射在RAM和强制软件重置,这样你的设备将保持连接,你将能够继续调试。我所附的帖子有关于你所要求的信息。
所以1)我定义了CFG_DEVELOPMENT_DEBUG和CGF_WDOG我已经注释了arch_main.c wdg_reload(WATCHDOG_DEFAULT_PERIOD)3)我已经设置SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET);和REMP_ADRO = 0x02(我也尝试它的原始值)3 .我被困住了。
我做错了什么??
谢谢
所以我发现了问题。在执行之前SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET)
我必须设置SetBits16 (SYS_CTRL_REG REMAP_ADR0 0 x2);是项目重新开始。到目前为止,一切都好。
通过设置REMAP_ADR0, = 0x2是否清除了保留空间?我有结构Volatile struct app_data_tag env_tag __attribute__ (((section(“retention_mem_area0”),zero_init);我想在保留空间中存储一些数据和标志,并读取看门狗复位后的数据。但看门狗复位后启动程序env_tag为空。
这个定义是正确的吗?我应该做什么来防止保留空间被清除?
通过设置remap地址,只需将syram映射为零地址即可执行。这不是数据初始化的原因,我认为ARM库在sysram中设置的代码在scatterfile中声明,每次ARM开始执行代码。另外,由于您将变量放置在retention_mem_area0中,并且您看到在重置后您得到的是0,我认为您正在为扩展睡眠使用内存映射。在扩展内存配置的情况下,retention_mem_area0标记不会显示在保留ram中,但它位于syram中(因为syram总是在上,所以在内存保留区域中保留任何数据没有实际意义)。因此,由于retention_mem_area0位于sysram中包含零初始化数据的位置,所以每次系统重启时变量都会被置零。为了保留数据而不初始化你的变量,你必须在scatterfile中设置一个新的标签,使你的数据未初始化。你可以通过在分散文件中使用UNINIT关键字来做到这一点,例如:
TEST_IRAM 0x20008338 UNINIT 0x4 {* (test_variable)}
干这活!谢谢!
我可以在生产中使用这个新区域吗?还是应该坚持使用retention_mem_area0?0x4是区域的大小,对吧?
是的,它是这个地区的大小。
在生产中,我假设你的意思当图像上传到sysram再次通过外部设备或OTP,我认为如果你这样做你的变量属于retention_mem_area0将被设置为一分之零新启动以来未初始化的全局变量,所以它属于子数据,它将重新初始化为零在一个新的上传,所以你不会得到你之前重置的值。
是的,我的意思是,当图像上传到OTP,所以我应该坚持我的自定义区域在这种情况下。
如果你认为上面的建议有帮助,请将答案标记为“已接受”。
嗨bulbera,
你必须使用一个外部存储设备来存储数据,你可以看看Smart Tag参考设计,它是基于一个较老的SDK (SDK3),但在那里你会找到一个如何在外部闪存设备上存储数据的例子。该示例存储绑定数据或有效的配对连接。
由于MT_dialog
嗨MT_dialog,
感谢您的支持!
如果我做对了,我必须使用nvds把数据存储到闪存?如果这是正确的,我可以定义自己的标记来存储必要的数据吗?
我如何处理软复位,如看门狗复位?
谢谢你!
嗨bulbera,
nvd已经与将数据存储到flash, nvd是持久等静态数据设备的名称或设备的bd地址,一旦这些数据被放置到设备OTP或者为你燃烧他们的代码不能被改变。请检查我提到的参考设计,以便检查如何存储数据到flash。
你的意思是如何处理看门狗复位,如果看门狗中断发生设备应该复位,你可以查看以下帖子的一些信息这https://support.dialog-semiconductor.com/testing-watchdog.
由于MT_dialog
嗨MT_dialog,
谢谢你!
抱歉,我是新来的。我已经检查了Smart Tag的参考设计,如果我正确的话,我需要使用spi_flash ?如果这是正确的,是否有一个如何正确设置spi_flash的指南?
关于看门狗,我没有解释清楚。我想要完成的是在系统上开始存储一些数据到db,只有当有复位(由看门狗或什么),但不断电/下电再次加载这个数据。这是可能的吗?
很多谢谢!
嗨bulbera,
是的,你需要设置一个闪存设备来存储你的应用程序的数据。对于设置闪光灯从sw的观点,你可以检查如何与闪光灯的智能标签接口,引脚如何设置等。要了解更多信息,你可以看看AN-B-023与外部存储器的接口。
没有例子可以说明你的请求或者你可以读取的东西(580的寄存器)在重置后表明重置来自于一个意外的情况,一个看门狗的硬故障但是你可以尝试一个想法,是在外部SPI内存中存储一个标志,以防止意外情况发生,当启动时,您可以从外部内存读取该标志并采取相应的行动。
由于MT_dialog
嗨MT_Dialog,
我看了AN-B-023,看起来很有希望。
是否有一个处理程序将被调用时,意外条件发生?或者我应该修改重置逻辑(在哪里可以这个逻辑?)?
很多谢谢!
嗨bulbera,
当错误发生时,没有特定的处理程序被调用,SDK实现了以下处理程序:
由于MT_dialog
嗨MT_Dialog,
谢谢你的帮助!
我模拟看门狗重启和调试器进入NMI_HandlerC,但之后我不能设置断点。我在想的是,调试器在重启后没有再次连接。有什么好办法吗?
谢谢!
嗨bulbera,
NMI_Handler击中时,如果你不该有DEVELOPMENT_DEBUG定义(其他你陷入)得到执行函数的最后一行,它迫使580罗重新映射,所以引导装载程序运行这意味着代码执行在那一刻与你无关凯尔项目。为了做你想要的,你将不得不重新映射在RAM和强制软件重置,这样你的设备将保持连接,你将能够继续调试。我所附的帖子有关于你所要求的信息。
由于MT_dialog
嗨MT_dialog,
所以
1)我定义了CFG_DEVELOPMENT_DEBUG和CGF_WDOG
我已经注释了arch_main.c wdg_reload(WATCHDOG_DEFAULT_PERIOD)
3)我已经设置SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET);和REMP_ADRO = 0x02(我也尝试它的原始值)
3 .我被困住了。
我做错了什么??
谢谢
所以我发现了问题。在执行之前
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET)
我必须设置
SetBits16 (SYS_CTRL_REG REMAP_ADR0 0 x2);
是项目重新开始。到目前为止,一切都好。
通过设置REMAP_ADR0, = 0x2是否清除了保留空间?
我有结构
Volatile struct app_data_tag env_tag __attribute__ (((section(“retention_mem_area0”),zero_init);
我想在保留空间中存储一些数据和标志,并读取看门狗复位后的数据。
但看门狗复位后启动程序env_tag为空。
这个定义是正确的吗?我应该做什么来防止保留空间被清除?
很多谢谢!
嗨bulbera,
通过设置remap地址,只需将syram映射为零地址即可执行。这不是数据初始化的原因,我认为ARM库在sysram中设置的代码在scatterfile中声明,每次ARM开始执行代码。另外,由于您将变量放置在retention_mem_area0中,并且您看到在重置后您得到的是0,我认为您正在为扩展睡眠使用内存映射。在扩展内存配置的情况下,retention_mem_area0标记不会显示在保留ram中,但它位于syram中(因为syram总是在上,所以在内存保留区域中保留任何数据没有实际意义)。因此,由于retention_mem_area0位于sysram中包含零初始化数据的位置,所以每次系统重启时变量都会被置零。为了保留数据而不初始化你的变量,你必须在scatterfile中设置一个新的标签,使你的数据未初始化。你可以通过在分散文件中使用UNINIT关键字来做到这一点,例如:
TEST_IRAM 0x20008338 UNINIT 0x4 {
* (test_variable)
}
由于MT_dialog
嗨MT_dialog,
干这活!谢谢!
我可以在生产中使用这个新区域吗?还是应该坚持使用retention_mem_area0?
0x4是区域的大小,对吧?
谢谢!
嗨bulbera,
是的,它是这个地区的大小。
在生产中,我假设你的意思当图像上传到sysram再次通过外部设备或OTP,我认为如果你这样做你的变量属于retention_mem_area0将被设置为一分之零新启动以来未初始化的全局变量,所以它属于子数据,它将重新初始化为零在一个新的上传,所以你不会得到你之前重置的值。
由于MT_dialog
嗨MT_dialog,
是的,我的意思是,当图像上传到OTP,所以我应该坚持我的自定义区域在这种情况下。
谢谢!
嗨bulbera,
如果你认为上面的建议有帮助,请将答案标记为“已接受”。
由于MT_dialog