c语言 - 当 μc (nRF52840) 进入睡眠模式时,我们如何保存我们以后在他起床时要使用的数据?



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

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

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

然而,请注意,闪光作为一些限制:

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

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

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

部分提供的另一种可能性是UICR(用户信息配置寄存器(,这是一种非易失性存储器的特殊区域,包括32个字(128字节(的客户定义数据。然而,这对于动态存储来说可能不是很实用,因为该区域包含北欧保留字和设备配置,并且像普通闪存一样,擦除会删除整个UICR,所以你必须在擦除和重写之前复制数据。这并不是真正的电源故障安全。续航能力仍然是10000个擦除周期,如果你像上面那样将其分条,只有128个字节可以将续航能力扩展到20000个周期或109年,每4天擦除一次。

除了这些可能性之外,芯片外的NV存储设备,如EEPROM、FRAM、Flash,甚至SD/MMC卡(带文件系统(。这些可以通过可用的SPI、I2C(TWI(或QSPI接口之一连接。Whist可能比片上flah具有更高的续航能力,这可能仍然是一些设备的考虑因素。FRAM没有耐久性问题,而且SD卡容量很大,在所描述的应用程序中不太可能出现问题。

相关内容

  • 没有找到相关文章

最新更新