有没有办法检测来自eeprom的首次访问

Is there a way to detect first time access from eeprom

环境

我正在为 atmega328p 上的 arduino 编写一个小游戏,我正试图从 eeprom 内存中保持 reading/writing 的高分。

但我不知道你如何检查eeprom中的数据是正确的高分还是一些随机数据。

问题

有没有一种方法可以检测 eeprom 中的数据是否是程序的一部分或手动将其重置为 Atmel Studio / Arduino IDE 中的特定值?

你总是可以试着写一个像这样的小结构:

struct
{
uint32_t Signature;
uint32_t HighScore;
}EEPROMData;

您将签名设置为已知的硬编码值,设置高分,然后编写整个结构。阅读时,您将检查签名。这不太可能是你的价值。

如果您需要更多保险,而不仅仅是随机数据,您可以这样做:

struct
{
uint32_t Signature;
uint32_t HighScore;
uint32_t XORRResult;
}EEPROMData;

同时写入签名和高分的异或结果。当你阅读它时,你会将签名和高分的异或与 XORResult 进行比较。如果匹配,则说明您写入的数据不是随机的。

首先:

你不应该将高分写入EEPROM,它应该被视为read-only

回答你的问题:最好在高分中添加一些奇偶校验方式https://en.wikipedia.org/wiki/Parity_bit

如果您对电路板进行编程,您可以擦除 eeprom。这意味着所有字节都读为 0xFF。如果您将高分存储为 BCD 或 ASCII(任何从不为您的数据使用 0xFF 的表示形式),您可以轻松检测高分是否是第一次写入。