kopia lustrzana https://github.com/peterhinch/micropython_eeprom
91 wiersze
2.3 KiB
Python
91 wiersze
2.3 KiB
Python
# wemos_flash.py Test flash chips with ESP8266 host
|
|
|
|
# Released under the MIT License (MIT). See LICENSE.
|
|
# Copyright (c) 2020 Peter Hinch
|
|
|
|
import uos
|
|
from machine import SPI, Pin
|
|
from flash_spi import FLASH
|
|
|
|
cspins = (Pin(5, Pin.OUT, value=1), Pin(14, Pin.OUT, value=1))
|
|
|
|
spi=SPI(-1, baudrate=20_000_000, sck=Pin(4), miso=Pin(0), mosi=Pin(2))
|
|
|
|
def get_flash():
|
|
flash = FLASH(spi, cspins)
|
|
print('Instantiated Flash')
|
|
return flash
|
|
|
|
directory = '/fl_ext'
|
|
a = bytearray(range(256)) # Data to write
|
|
b = bytearray(256) # Data to read back
|
|
files = {} # n:length
|
|
errors = 0
|
|
|
|
def fname(n):
|
|
return '{}/{:05d}'.format(directory, n + 1) # Names start 00001
|
|
|
|
def fcreate(n): # Create a binary file of random length
|
|
length = int.from_bytes(uos.urandom(2), 'little') + 1 # 1-65536 bytes
|
|
linit = length
|
|
with open(fname(n), 'wb') as f:
|
|
while(length):
|
|
nw = min(length, 256)
|
|
f.write(a[:nw])
|
|
length -= nw
|
|
files[n] = length
|
|
return linit
|
|
|
|
def fcheck(n):
|
|
length = files[n]
|
|
with open(fname(n), 'rb') as f:
|
|
while(length):
|
|
nr = f.readinto(b)
|
|
if not nr:
|
|
return False
|
|
if a[:nr] != b[:nr]:
|
|
return False
|
|
length -= nr
|
|
return True
|
|
|
|
def check_all():
|
|
global errors
|
|
for n in files:
|
|
if fcheck(n):
|
|
print('File {:d} OK'.format(n))
|
|
else:
|
|
print('Error in file', n)
|
|
errors += 1
|
|
print('Total errors:', errors)
|
|
|
|
|
|
def remove_all():
|
|
for n in files:
|
|
uos.remove(fname(n))
|
|
|
|
def flash_test(format=False):
|
|
eep = get_flash()
|
|
if format:
|
|
uos.VfsLfs2.mkfs(eep)
|
|
try:
|
|
uos.mount(eep,'/fl_ext')
|
|
except OSError: # Already mounted
|
|
pass
|
|
for n in range(128):
|
|
length = fcreate(n)
|
|
print('Created', n, length)
|
|
print('Created files', files)
|
|
check_all()
|
|
for _ in range(100):
|
|
for x in range(5): # Rewrite 5 files with new lengths
|
|
n = int.from_bytes(uos.urandom(1), 'little') & 0x7f
|
|
length = fcreate(n)
|
|
print('Rewrote', n, length)
|
|
check_all()
|
|
remove_all()
|
|
|
|
msg='''Run wemos_flash.flash_test(True) to format new array, otherwise
|
|
wemos_flash.flash_test()
|
|
Runs prolonged test of filesystem.'''
|
|
print(msg)
|