Rad s datotečnim sustavima¶
Ovaj vodič opisuje kako OpenMV Cam omogućuje datotečni sustav na samom uređaju, čime se standardne Python metode za ulazno/izlazni rad s datotekama mogu koristiti s trajnom pohranom.
OpenMV Cam pri uključivanju stvara zadanu konfiguraciju te automatski otkriva i montira primarni datotečni sustav, pa je ovaj vodič uglavnom koristan ako želite ponovno particionirati flash memoriju, promijeniti vrstu datotečnog sustava ili koristiti prilagođeni blok uređaj.
Datotečni sustav je smješten u internoj flash memoriji ili na SD kartici kad je ona umetnuta.
VFS¶
MicroPython implementira Unix-oliki sloj virtualnog datotečnog sustava (VFS). Svi montirani datotečni sustavi spajaju se u jedinstveni virtualni datotečni sustav koji počinje u korijenu /. Datotečni sustavi montiraju se u direktorije ove strukture, a pri pokretanju radni direktorij postavlja se na primarni datotečni sustav.
Na OpenMV Cam uređaju interna flash memorija montirana je na /flash i predstavlja radni direktorij. Ako je umetnuta SD kartica, ona se montira na /sdcard i umjesto toga postaje radni direktorij.
Blok uređaji¶
Blok uređaj je instanca klase koja implementira protokol vfs.AbstractBlockDev.
Pri uključivanju OpenMV Cam pokušava otkriti datotečni sustav na internoj flash memoriji (ili SD kartici) te ga automatski konfigurirati i montirati. Ako nije pronađen nijedan datotečni sustav, stvara se FAT datotečni sustav koji obuhvaća cijelu flash memoriju. Za brisanje ili ponovno formatiranje ugrađenog datotečnog sustava najlakši je put OpenMV IDE ili vraćanje na tvorničke postavke; niskorazinski Python API u nastavku namijenjen je naprednoj/programskoj upotrebi.
Interna flash memorija¶
Na OpenMV Cam uređajima temeljenim na STM32 klasa pyb.Flash omogućuje pristup internoj flash memoriji. Na pločama koje imaju veću vanjsku flash memoriju umjesto toga koristit će se ona. Argument start uvijek treba navesti, tj. pyb.Flash(start=0).
Napomena: Radi kompatibilnosti unatrag, kad se konstruira bez argumenata (tj. pyb.Flash()), implementira samo jednostavno blok sučelje i odražava virtualni uređaj prikazan USB masovnoj pohrani (tj. uključuje virtualnu tablicu particija na početku).
Prilagođeni blok uređaji¶
Možete i sami stvoriti vlastiti blok uređaj u Pythonu i montirati ga — primjerice RAM disk. Sljedeća klasa implementira jednostavan blok uređaj koji svoje podatke pohranjuje u RAM koristeći bytearray
class RAMBlockDev:
def __init__(self, block_size, num_blocks):
self.block_size = block_size
self.data = bytearray(block_size * num_blocks)
def readblocks(self, block_num, buf):
for i in range(len(buf)):
buf[i] = self.data[block_num * self.block_size + i]
def writeblocks(self, block_num, buf):
for i in range(len(buf)):
self.data[block_num * self.block_size + i] = buf[i]
def ioctl(self, op, arg):
if op == 4: # get number of blocks
return len(self.data) // self.block_size
if op == 5: # get block size
return self.block_size
Može se koristiti na sljedeći način:
import vfs
bdev = RAMBlockDev(512, 50)
vfs.VfsFat.mkfs(bdev)
vfs.mount(bdev, '/ramdisk')
Nakon montiranja datotečni sustav može se koristiti onako kako bi se inače koristio iz Python koda, primjerice:
with open('/ramdisk/hello.txt', 'w') as f:
f.write('Hello world')
print(open('/ramdisk/hello.txt').read())
Datotečni sustavi¶
OpenMV Cam formatira internu flash memoriju kao FAT kako bi, na pločama koje izlažu datotečni sustav putem USB masovne pohrane, glavno računalo moglo čitati i pisati po njemu bez dodatnih upravljačkih programa.
FAT nije otporan na nestanak napajanja tijekom upisivanja, što može dovesti do oštećenja datotečnog sustava. Izbacite/odmontirajte pogon na glavnom računalu prije isključivanja kamere i za podatke koje skripta zapisuje natrag radije koristite SD karticu nego internu flash memoriju.
Na OpenMV Cam uređajima temeljenim na STM32 interna flash memorija može se ponovno formatirati iz Pythona:
import os, vfs, pyb
vfs.umount('/flash')
vfs.VfsFat.mkfs(pyb.Flash(start=0))
vfs.mount(pyb.Flash(start=0), '/flash')
os.chdir('/flash')