Skip to content

Instantly share code, notes, and snippets.

@four0four
Created September 6, 2024 18:11
Show Gist options
  • Save four0four/0ba2711d7689f840e5dce85755b5ede6 to your computer and use it in GitHub Desktop.
Save four0four/0ba2711d7689f840e5dce85755b5ede6 to your computer and use it in GitHub Desktop.
for use w/ 'glasgow script memory-25x' - little spi flash wearout experiment
import time
import statistics
cur_iter = 0
write_size = 256
base_addr = 0
inv = False
erase_times = []
prog_times = []
while True:
if inv:
page = (cur_iter ^ 0xffff_ffff_ffff_ffff).to_bytes(8, "little") * (write_size // 8)
else:
page = cur_iter.to_bytes(8, "little") * (write_size // 8)
base_time = time.perf_counter_ns()
await iface.write_enable()
await iface.sector_erase(base_addr)
erase_times.append(time.perf_counter_ns() - base_time)
out = await iface.read(base_addr, len(page))
if out != bytearray(b'\xff' * len(page)) :
print(f"read {out.hex()} instead of all FF...")
input("waiting...")
base_time = time.perf_counter_ns()
await iface.write_enable()
await iface.page_program(base_addr, page)
prog_times.append(time.perf_counter_ns() - base_time)
if cur_iter % 100 == 0:
avg_prog = statistics.mean(prog_times)
avg_erase= statistics.mean(erase_times)
prog_times = []
erase_times = []
print(f"current count: {cur_iter}, erase avg ms: {avg_erase / 1E6 : ,.3f}, prog avg ms: {avg_prog/1E6 : ,.3f}")
out = await iface.read(base_addr, len(page))
if out != page:
print("wtf? mismatch:\nwrote:\n\t" + page.hex() + "\ngot:\n\t" + out.hex())
print(f"currently: {cur_iter}")
input("waiting....")
inv = not inv
cur_iter += 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment