因为你是使用DA14580和假设SDK5.04,couple of SDK changes should be don win order to retain initialized data during reset. DA14585/6 and our newest SDK6 (latest version 6.0.10), has the capability if storing initialized data. Do you have any thought for moving into DA14585/6? There is a software example demonstrating this functionality.
嗨,cgha,
因为你是使用DA14580和假设SDK5.04,couple of SDK changes should be don win order to retain initialized data during reset. DA14585/6 and our newest SDK6 (latest version 6.0.10), has the capability if storing initialized data. Do you have any thought for moving into DA14585/6? There is a software example demonstrating this functionality.
软件示例:DA14585/586检测复位源
谢谢,下午好
您能告诉我,我应该对sdk 5.0.4进行的更改,以便在重置后存储和获取值。在我的想法中,我应该对分散文件进行更改,在sdk 5.0.4中,为了在重置后保留值,我应该在sdk 5.0.4中修改其他任何地方?
我使用正常模式下的延长睡眠,当ble接收到睡眠命令时,da14580将进入深度睡眠,另一个mcu在需要重启时会给da14580一个复位信号,重启后,需要保留键信息才能连接回绑定的ios设备。
我注意到要存储的数据位于散布文件中标记为Unnit的区域,例如,地图文件显示我的数据起始地址为0x00082448,数据长度为476字节,散布文件将此区域列为Unnit“ZI RET20 0x00080768 unnit 0x22b8”,但是,即使在重置前设置da14580以延长睡眠时间,重置后,我的数据似乎仍然丢失(因为我注意到这个区域在SysRAM区域)。
嗨,cgha,
请检查SystemInit()函数,您将发现挫折16(PMU CTRL\u REG,RETENTION_umode,0xF),因此,保留ram的所有位都设置为零,因为您已经看到保留内存区域的归零是在设备自保留区启动时所做的,而在深度睡眠中保持时,除了用户数据、额外的可布尔信息(BLE堆、堆栈等)。
重置后,调零功能将再次运行,并将擦除您在保留内存区域中的任何数据。为了避免这样做,您可以知道“数据”位于保留内存区域中的位置,并且在初始化期间,您应该避免将它们归零。没有参考设计或示例表明,我将要做的是:
In the scatterfile where the retention memory area is defined for deep sleep allocate a space that will hold your data that should be not initialized.
部分重传将从新的部分使用,因此从定义重传中删除您将使用的字节数并添加新节的大小(新的重传长度=重传长度–SZ\u AFT\u RST\u数据):
在LR炣RETENTIONRAM0中声明一个从0x00080768开始的执行区域。新的执行区域将从区域0x00080768开始,并具有您的需求范围(例如,您希望的范围为SZ\u AFT\u RST\u DATA 80 bytes)。因此,散射文件将更改为:
完成此操作后,ZI炣RET00将从地址0x00080768+SZ_uaft\u RST_u数据开始,而不是从0x00080768开始。
因此现在您知道,将使用统一化的\u数据_u测试标记的数据将从地址0x00080768驻留到地址0x00080768+SZ\u AFT\u RST\u data。因为您知道可以转到SystemInit()函数,并指示函数不要将0x00080768和0x00080768+SZ\u AFT\u RST\u数据之间的内存归零。
谢谢,下午好