你好
有没有办法通过设备硬件重置来维护配对信息?
我们的设备作为外围设备运行。我们希望在完全重置设备后,当服务器尝试重新连接时,能够允许恢复先前配对/加密的连接。这需要包括可能已收到的任何IRK。
我们使用的是辅助引导加载程序,因此在重新引导时,它当前会删除保留RAM。
谢谢汤姆
嗨,汤姆,
为了维护配对信息,需要将LTK等信息保存在一些内存中。闪存或EEPROM将允许您通过电源循环保留此信息。如果你不关心功率循环,但仅仅是HW重置,你可以考虑以下方法。完全保留RAM在通电初始化序列时初始化为零。您可以在内存中划出一部分来存储这些配对信息。一旦将该内存从init序列中分离并阻止,您就必须在此块上添加一些cookie/签名和/或CRC检查,以确定此块中包含的数据的有效性。
谢谢
tru对话框
你好,TR_对话
我在这里面临着类似的情况。我使用的DA14580没有外部闪存或EEPROM。我希望将配对状态存储在设备中,以便在看门狗重置芯片的情况下,设备仍将保留配对状态,而不是重置所有内容。能否请您澄清一下,即使芯片自行复位,如何在内存中留出一部分来存储故事配对信息。有几行代码就好了。提前谢谢。
弘毅
你好,佛照,
app_sec_env是存储绑定过程数据的结构变量,该变量是SDK中保留变量的allready部分,关键是当设备处于延长睡眠和深度睡眠时,内存的不同部分被视为保留,例如,处于扩展睡眠模式(根据散布文件)的保留内存区域的一部分被视为0x20008000上的系统ram(因为处于扩展睡眠状态的系统ram保持通电),而处于深度睡眠状态的保留内存仅被视为580上的实际保留ram。关于您的请求,没有特定的代码允许您在NMI发生后保留绑定数据,只要您具有保留属性(retention_mem_area0),这意味着数据被保留。因此,当重置发生时,实际擦除数据的是实际的分散文件(取决于分散文件zero init或UNINIT中声明区域的方式,您可能会猜测,如果zero初始化,设备将使用零擦除内存,而UNINIT将保留内存原样)SDK中的一个小for循环会清除实际保留内存中的数据(清除保留内存应该发生在SystemInit中)。因此,为了将数据保存在保留内存区域中,并在重置后仍保留这些数据,您应该在分散文件中分配一个空间,用于保存绑定数据(具体位置取决于您将使用相应内存配置的睡眠模式),并用UNINIT标识符描述该空间,这样一旦重置,scatterfile就不会用零将其清除。此外,如果您选择的位置是实际的保留RAM,则必须从SystemInit()函数中的for循环中删除所选部件以进行初始化。
谢谢你的对话
嗨,汤姆,
为了维护配对信息,需要将LTK等信息保存在一些内存中。闪存或EEPROM将允许您通过电源循环保留此信息。如果你不关心功率循环,但仅仅是HW重置,你可以考虑以下方法。完全保留RAM在通电初始化序列时初始化为零。您可以在内存中划出一部分来存储这些配对信息。一旦将该内存从init序列中分离并阻止,您就必须在此块上添加一些cookie/签名和/或CRC检查,以确定此块中包含的数据的有效性。
谢谢
tru对话框
你好,TR_对话
我在这里面临着类似的情况。我使用的DA14580没有外部闪存或EEPROM。我希望将配对状态存储在设备中,以便在看门狗重置芯片的情况下,设备仍将保留配对状态,而不是重置所有内容。能否请您澄清一下,即使芯片自行复位,如何在内存中留出一部分来存储故事配对信息。有几行代码就好了。提前谢谢。
弘毅
你好,佛照,
app_sec_env是存储绑定过程数据的结构变量,该变量是SDK中保留变量的allready部分,关键是当设备处于延长睡眠和深度睡眠时,内存的不同部分被视为保留,例如,处于扩展睡眠模式(根据散布文件)的保留内存区域的一部分被视为0x20008000上的系统ram(因为处于扩展睡眠状态的系统ram保持通电),而处于深度睡眠状态的保留内存仅被视为580上的实际保留ram。关于您的请求,没有特定的代码允许您在NMI发生后保留绑定数据,只要您具有保留属性(retention_mem_area0),这意味着数据被保留。因此,当重置发生时,实际擦除数据的是实际的分散文件(取决于分散文件zero init或UNINIT中声明区域的方式,您可能会猜测,如果zero初始化,设备将使用零擦除内存,而UNINIT将保留内存原样)SDK中的一个小for循环会清除实际保留内存中的数据(清除保留内存应该发生在SystemInit中)。因此,为了将数据保存在保留内存区域中,并在重置后仍保留这些数据,您应该在分散文件中分配一个空间,用于保存绑定数据(具体位置取决于您将使用相应内存配置的睡眠模式),并用UNINIT标识符描述该空间,这样一旦重置,scatterfile就不会用零将其清除。此外,如果您选择的位置是实际的保留RAM,则必须从SystemInit()函数中的for循环中删除所选部件以进行初始化。
谢谢你的对话