我使用 Raspberry Pi 制作了一个可编程电源开关(尽管这个问题不是 RPi 特有的 - 它更多的是“通用 Linux”,其问题是由硬件缺陷引起的。)Raspberry 没有电池支持的 RTC;它旨在联网工作并在通过网络启动后立即同步其时钟。
我的问题是,当我通过网络对所述开关进行编程时,我可以通过这种方式让给定的插座在给定的时间打开/关闭,但设备本身将在不同的位置使用,包括非联网的位置。当我把它从编程的地方带到要插入的地方时,它会断电并且时钟会丢失状态。当我重新启动电源后,它没有连接来恢复日期。
断电的几分钟对我来说不是问题——我不介意时钟慢一两分钟。我介意它是否会像我打开非联网后那样关闭 43 年。
是否有一些巧妙的方法可以将启动时的时钟恢复到系统因断电而停机之前的状态? (每秒将其写入 SD 卡(RPi 的存储介质)会很快杀死该卡,因此这不是一个选择。)
答案1
我看到了几种可以解决这个问题的方法
扫描文件系统以查找具有最新修改或访问时间的文件。使用该时间来设置时钟。它很慢,而且准确性可能会很差,但它会起作用。如果您知道某个目录/文件修改得相当频繁,您可以将其用作源。
遵循你提到的想法; “每隔几秒触摸一个文件”。许多 SD 卡都具有磨损均衡功能。因此,您不会一直写入完全相同的位置,因此这根本不是问题。
使用 NVRAM。根据需要经常将当前日期写入 NVRAM,然后在启动时恢复该日期。 NVRAM 很小,但您可以毫无问题地在其中存储几个字节。
使用 GPS 进行时间同步。这就是我在需要时间但无法访问网络的设备上所做的事情。 USB GPS 设备价格便宜,并且提供非常准确的时间源。
答案2
我怀疑最简单的方法是实际添加一个实时时钟,如下所示: http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/