你好,
我正在做一个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的SW视角设置闪光点,您可以检查智能标签如何与闪光灯接口如何设置引脚等。有关其他信息,您可以查看与外部内存的AN-B-023接口。
您正在请求的内容或者您可以读取的内容(580中的寄存器)毫无示例,它在重置后将指示重置从意外情况下出现故障,这是一个看门狗的硬盘,但您可以尝试的想法,在发生意外条件时且启动时,将在外部SPI内存中存储标志,您可以从外部存储器读取该标志并相应地进行行动。
我看了AN-B-023,看起来很有希望。是否有一个处理程序将被调用时,意外条件发生?或者我应该修改重置逻辑(在哪里可以这个逻辑?)?
当错误发生时,没有特定的处理程序被调用,SDK实现了以下处理程序:
谢谢你的帮助!
我正在模拟看门狗重启,调试器进入nmi_handlerc但是之后我无法设置一个断点。我认为的是重新启动后未再次连接调试器。任何想法如何解决它?
当NMI_Handler命中时,如果您没有定义的Development_debug(否则您被卡住),函数的最后一行已被执行,它会强制580重新映射到ROM,因此引导加载程序运行这意味着代码执行此刻与您的Keil项目无关。为了做你想要的东西,您将必须在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(我也用原始值尝试)4)3后我被困..
我做错了什么??
谢谢
所以我发现了问题。在执行之前setword16(sys_ctrl_reg,(getword16(sys_ctrl_reg))| sw_reset)
我必须设置SetBits16 (SYS_CTRL_REG REMAP_ADR0 0 x2);是项目重新开始。到目前为止,一切都好。
通过设置REMAP_ADR0, = 0x2是否清除了保留空间?我有struct.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也是该区域的大小吗?
是的,它是这个地区的大小。
在生产中,我想你的意思是通过外部设备或OTP再次上传到Sysram时,我假设如果您这样做,则将属于Retent_Mem_area0的变量将在新的启动时将其设置为零由于它是一个未初始化的全局变量,因此它属于Zi数据,它将在新上传中重新初始化为零,因此您不会在重置之前获取您拥有的值。
是的,我的意思是,当图像上载到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的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重新映射到ROM,因此引导加载程序运行这意味着代码执行此刻与您的Keil项目无关。为了做你想要的东西,您将必须在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(我也用原始值尝试)
4)3后我被困..
我做错了什么??
谢谢
所以我发现了问题。在执行之前
setword16(sys_ctrl_reg,(getword16(sys_ctrl_reg))| sw_reset)
我必须设置
SetBits16 (SYS_CTRL_REG REMAP_ADR0 0 x2);
是项目重新开始。到目前为止,一切都好。
通过设置REMAP_ADR0, = 0x2是否清除了保留空间?
我有struct.
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,
是的,它是这个地区的大小。
在生产中,我想你的意思是通过外部设备或OTP再次上传到Sysram时,我假设如果您这样做,则将属于Retent_Mem_area0的变量将在新的启动时将其设置为零由于它是一个未初始化的全局变量,因此它属于Zi数据,它将在新上传中重新初始化为零,因此您不会在重置之前获取您拥有的值。
由于MT_dialog
嗨mt_dialog,
是的,我的意思是,当图像上载到OTP时,所以我应该坚持在这种情况下的自定义定义区域。
谢谢!
嗨bulbera,
如果你认为上面的建议有帮助,请将答案标记为“已接受”。
由于MT_dialog