你好呀,
我正在研究DA14580的项目,我需要在断电或重置时将一些数据存储到DB中。我可以找到一些信息如何做到这一点?
嗨Bulbera,
您必须使用外部内存设备来存储数据,您可以看一下智能标签参考设计,它基于旧的SDK(SDK3),但是在那里您将在有关如何在外部存储数据的示例闪存设备。该示例存储绑定数据或有效配对连接。
谢谢mt_dialog.
嗨mt_dialog,
谢谢你的支持!
如果我搞定,我必须使用nvds将数据存储到闪存中?如果这是正确的,我可以定义自己的标签来存储必要的数据吗?还如何处理像看门狗重置的软复位?
谢谢!
NVDS与将数据存储到闪光灯中无关,NVDS是设备的持久性静态数据,如设备的名称或设备的BD地址,一旦将这些数据放入设备中或者到您刻录的代码中无法改变。请检查我提到的参考设计,以检查如何将数据存储到闪存中。
你是什么意思如何处理看门狗重置,如果设备应该重置看门狗中断,可以检查以下帖子https://support.dialog-semicondiondionder.com/testing-watchdog.。
抱歉,我是BLE堆栈的新手。我检查了智能标签的参考设计,如果我正确地,我需要使用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_wdog2)我已经评论了Arch_Main.cwdg_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,0x2);该程序再次开始。到目前为止,一切都很好。
通过设置remap_adr0,= 0x2是保留空间清除?我有struct.volatile struct app_data_tag env_tag __attribute__((部分(“保留_mem_area0”),zero_init);我想在保留空间中存储一些数据和标志,并在看门狗重置后读取此数据。但是在看门狗重置后,开始程序env_tag是空的。
这个定义是否正确,我该如何做到,以防止保留空间被清除?
通过设置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)}
这做了这项工作!非常感谢!
我可以在生产中使用这个新地区,或者我应该坚持保留_mem_area0?0x4也是该区域的大小吗?
是的,它是该地区的大小。
在生产中,我想你的意思是通过外部设备或OTP再次上传到Sysram时,我假设如果您这样做,则将属于Retent_Mem_area0的变量将在新的启动时将其设置为零由于它是一个未初始化的全局变量,因此它属于Zi数据,它将在新上传中重新初始化为零,因此您不会在重置之前获取您拥有的值。
是的,我的意思是,当图像上载到OTP时,所以我应该坚持在这种情况下的自定义定义区域。
如果您认为上述任何建议都有助于请将答案标记为“已接受”。
嗨Bulbera,
您必须使用外部内存设备来存储数据,您可以看一下智能标签参考设计,它基于旧的SDK(SDK3),但是在那里您将在有关如何在外部存储数据的示例闪存设备。该示例存储绑定数据或有效配对连接。
谢谢mt_dialog.
嗨mt_dialog,
谢谢你的支持!
如果我搞定,我必须使用nvds将数据存储到闪存中?如果这是正确的,我可以定义自己的标签来存储必要的数据吗?
还如何处理像看门狗重置的软复位?
谢谢!
嗨Bulbera,
NVDS与将数据存储到闪光灯中无关,NVDS是设备的持久性静态数据,如设备的名称或设备的BD地址,一旦将这些数据放入设备中或者到您刻录的代码中无法改变。请检查我提到的参考设计,以检查如何将数据存储到闪存中。
你是什么意思如何处理看门狗重置,如果设备应该重置看门狗中断,可以检查以下帖子https://support.dialog-semicondiondionder.com/testing-watchdog.。
谢谢mt_dialog.
嗨mt_dialog,
谢谢!
抱歉,我是BLE堆栈的新手。我检查了智能标签的参考设计,如果我正确地,我需要使用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
2)我已经评论了Arch_Main.cwdg_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,0x2);
该程序再次开始。到目前为止,一切都很好。
通过设置remap_adr0,= 0x2是保留空间清除?
我有struct.
volatile struct app_data_tag env_tag __attribute__((部分(“保留_mem_area0”),zero_init);
我想在保留空间中存储一些数据和标志,并在看门狗重置后读取此数据。
但是在看门狗重置后,开始程序env_tag是空的。
这个定义是否正确,我该如何做到,以防止保留空间被清除?
非常感谢!
嗨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.
嗨mt_dialog,
这做了这项工作!非常感谢!
我可以在生产中使用这个新地区,或者我应该坚持保留_mem_area0?
0x4也是该区域的大小吗?
谢谢!
嗨Bulbera,
是的,它是该地区的大小。
在生产中,我想你的意思是通过外部设备或OTP再次上传到Sysram时,我假设如果您这样做,则将属于Retent_Mem_area0的变量将在新的启动时将其设置为零由于它是一个未初始化的全局变量,因此它属于Zi数据,它将在新上传中重新初始化为零,因此您不会在重置之前获取您拥有的值。
谢谢mt_dialog.
嗨mt_dialog,
是的,我的意思是,当图像上载到OTP时,所以我应该坚持在这种情况下的自定义定义区域。
谢谢!
嗨Bulbera,
如果您认为上述任何建议都有助于请将答案标记为“已接受”。
谢谢mt_dialog.