# ===== EEPROM Simulation (File-based) =====
EEPROM_FILE = "eeprom.dat"
EEPROM_SIZE = 256 # bytes
def eeprom_init():
try:
with open(EEPROM_FILE, "rb"):
print("EEPROM exists")
except:
print("Creating EEPROM...")
with open(EEPROM_FILE, "wb") as f:
f.write(bytearray(EEPROM_SIZE))
def eeprom_write(addr, value):
if not (0 <= addr < EEPROM_SIZE):
raise ValueError("Address out of range")
if not (0 <= value <= 255):
raise ValueError("Value must be 0–255")
with open(EEPROM_FILE, "r+b") as f:
f.seek(addr)
f.write(bytes([value]))
def eeprom_read(addr):
if not (0 <= addr < EEPROM_SIZE):
raise ValueError("Address out of range")
with open(EEPROM_FILE, "rb") as f:
f.seek(addr)
data = f.read(1)
if not data:
return 0
return data[0]
# ===== Test Logic =====
import time
eeprom_init()
addr = 10
write_value = 123
print("Writing", write_value, "at address", addr)
eeprom_write(addr, write_value)
time.sleep(1)
read_value = eeprom_read(addr)
print("Read from EEPROM:", read_value)
# ===== Boot Counter Demo =====
count = eeprom_read(0)
if count >= 255: # overflow protect
count = 0
count += 1
eeprom_write(0, count)
print("Boot counter:", count)