当 µc (nRF52840) 进入休眠模式时,我们如何保存他起床后要使用的数据?

when the µc (nRF52840) is passing into sleep mode how can we save Data that we want to use later when he's up?

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

不熟悉该部分,但查看参考手册,on-chip RAM 是静态的,这意味着只要保持电源供电,它就会保持其值 - 即使在睡眠模式下或通过重置.您需要 set-up link 映射和 start-up 代码以避免初始化 start-up 上的保留区域。

或者,将 256K 闪存分成 4K erase-block 页,您可以保留整个页(即设置 link 映射以避免在此处定位代码)。闪存的耐久性只有 10000 次擦除周期,但即使您每两天擦除一次块,它也会持续 >54 年。由于您正在写入一个只有 64 字节的数据块,您可以通过 4K 顺序写入块,这样最高地址的 non-blank 64 字节块就是当前数据;那么您只需要在页面完全填满后擦除页面,将耐用性延长至 3500 年。

不过要注意flash作为一些限制:

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

也就是说你可以写 0xFFFFFF00,然后是 0xFFFF00FF,然后这个词就会包含 0xFFFF0000,但是你不能再写那个词的高两个字节。

使用代码闪存的另一个问题是,在擦除时,总线停顿并且无法获取指令。这意味着您的代码停止 运行。此扫描在 real-time 系统中是一个严重的问题;但考虑到您的系统一次休眠 3 小时,大概没有关键的 micro-second 级别计时截止日期?

部件提供的另一种可能性是 UICR(用户信息配置寄存器),non-volatile 内存的一个特殊区域,包括 32 个字(128 字节)的客户定义数据。然而,这对于动态存储可能不太实用,因为该区域包含 Nordic 保留字和设备配置,并且像普通闪存一样,擦除会删除整个 UICR,因此您必须在擦除和重写之前复制数据。不是真正的电源故障安全。耐力仍然是 10000 次擦除周期,如果你像上面那样条带化,只有 128 字节将耐力延长到 20000 次周期或每 4 天擦除 109 年。

除此之外还有 off-chip NV 存储设备,例如 EEPROM、FRAM、闪存,甚至 SD/MMC 卡(带有文件系统)。这些可以通过可用的 SPI、I2C (TWI) 或 QSPI 接口之一连接。 Whist 可能比 on-chip flah 具有更高的耐用性,这可能仍然是某些设备的考虑因素。 FRAM 没有耐久性问题,而 SD 卡的容量很大,因此在描述的应用程序中不太可能成为问题。