当μc(nRF52840)进入睡眠模式时,我们如何保存稍后唤醒时要使用的数据?

问题描述 投票:0回答:1

我正在开发一个 nRF52840,它将每 3 小时唤醒一次。我必须将数据(4 个字节)保存到选项卡 [16] 中,以便我可以在 2 天后发送这 16 个值。

c embedded nrf52 segger-jlink
1个回答
3
投票

不熟悉该部件,但查看参考手册,片上 RAM 是静态的,这意味着只要保持电源供应,即使在睡眠模式或通过重置,它也会保留其值。 您需要设置链接映射和启动代码以避免在启动时初始化保留区域。

或者,256K闪存被分为4K擦除块页面,您可以保留整个页面(即设置链接映射以避免在那里定位代码)。 闪存的耐用性只有 10000 次擦除周期,但即使每两天擦除一次块,它也能持续 >54 年。 由于您正在写入仅 64 字节的数据块,因此您可以通过 4K 按顺序写入这些块,这样最高寻址的 64 字节非空白块就是当前数据;那么您只需在页面完全写满后擦除页面即可,将寿命延长至 3500 年。

但请注意,闪光灯有一些限制:

  • 必须以32位字书写
  • 一个 32 位字只能写入两次,然后必须将其擦除才能再次写入。

也就是说,您可以先写 0xFFFFFF00,然后写 0xFFFF00FF,然后该字将包含 0xFFFF0000,但您不能再写该字的高两个字节。

使用代码闪存的另一个问题是,在擦除时,总线停止并且无法获取指令。 这意味着您的代码停止运行。 这种扫描在实时系统中是一个严重的问题;但考虑到您的系统一次休眠 3 小时,大概不存在关键的微秒级计时期限?

部件提供的另一种可能性是 UICR(用户信息配置寄存器),这是一个非易失性存储器的特殊区域,其中包含 32 个字(128 字节)的客户定义数据。 然而,这对于动态存储来说可能不太实用,因为该区域包含 Nordic 保留字和设备配置,并且像常规闪存一样,擦除会删除整个 UICR,因此您必须在擦除之前复制数据并重写它。 并不是真正的断电安全。 耐用性仍然是 10000 次擦除周期,如果像上面那样进行条带化,只有 128 字节就可以将耐用性扩展到 20000 次循环或每 4 天擦除 109 年。

除了这些可能性之外,还有片外 NV 存储设备,例如 EEPROM、FRAM、闪存,甚至 SD/MMC 卡(带有文件系统)。 这些可以通过可用的 SPI、I2C (TWI) 或 QSPI 接口之一进行连接。 虽然可能比片上闪存具有更高的耐用性,但这可能仍然是某些设备的考虑因素。 FRAM 不存在耐用性问题,而且 SD 卡容量很大,因此在所述应用中不太可能成为问题。

© www.soinside.com 2019 - 2024. All rights reserved.