class Flash – pääsy sisäänrakennettuun flash-muistiin

Flash-luokka tarjoaa suoran, lohkotason pääsyn RP2040:n ulkoiseen QSPI-flashpiiriin. Ajuri toteuttaa vfs.AbstractBlockDev -rajapinnan, joten sen voi antaa vfs.mount() -funktiolle mukautettuja tiedostojärjestelmäasetuksia varten.

Useimmat skriptit säilyttävät tietoja automaattisesti liitetyn tiedostojärjestelmän kautta polussa / eivätkä koskaan luo Flash -oliota suoraan. Luo sellainen käsin, kun sinun täytyy:

  • Liittää oletuksesta poikkeava tiedostojärjestelmä (esim. kääriä vfs.VfsFat -luokalla) mukautettuun osioon.

  • Lukea tai kirjoittaa laiteohjelmistoalueita tai tehdasdatalohkoja, jotka eivät kuulu tiedostojärjestelmälle.

  • Toteuttaa mukautetun flash-pohjaisen tallennusmuodon, joka ohittaa tiedostojärjestelmäkerroksen.

Konstruktorit

class rp2.Flash Flash

Palauttaa singleton-tyyppisen Flash -lohkolaiteolion, jonka taustalla on RP2040:n QSPI-flashpiiri. Ensimmäinen näkyvä lohko on heti laiteohjelmistoalueen jälkeen, joten kutsujat näkevät vain piirin tiedostojärjestelmälle kelpaavan alueen.

Metodit

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

Lukee tavuja flash-muistista puskuriin buf. Vakiomuotoinen vfs.AbstractBlockDev -lohkolaitteen sisääntulopiste, jota tiedostojärjestelmäkerros käyttää.

Yksinkertainen muoto (readblocks(block_num, buf)): lukee kokonaisia lohkoja alkaen lohkoindeksistä block_num. len(buf) -arvon on oltava flash-lohkokoon monikerta.

Laajennettu muoto (readblocks(block_num, buf, offset)): lukee len(buf) tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusiirtymästä offset lohkon block_num sisällä. Käytössä littlefs:ssä ja muissa tavuosoitteellisissa tiedostojärjestelmissä.

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, offset: int) None

Kirjoittaa tavuja puskurista buf flash-muistiin. Vakiomuotoinen vfs.AbstractBlockDev -lohkolaitteen sisääntulopiste, jota tiedostojärjestelmäkerros käyttää.

Yksinkertainen muoto (writeblocks(block_num, buf)): kirjoittaa kokonaisia lohkoja alkaen lohkoindeksistä block_num. len(buf) -arvon on oltava flash-lohkokoon monikerta. Jokainen kohdelohko tyhjennetään automaattisesti ennen kirjoittamista.

Laajennettu muoto (writeblocks(block_num, buf, offset)): kirjoittaa len(buf) tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusiirtymästä offset lohkon block_num sisällä. Implisiittistä tyhjennystä ei suoriteta – kutsujan on varmistettava, että kohdelohkot on tyhjennetty aiemmalla ioctl(6, block_num) -kutsulla.

ioctl(cmd: int, arg: int) int | None

Vakiomuotoinen vfs.AbstractBlockDev -ohjauksen sisääntulopiste. Tiedostojärjestelmäkerros kutsuu tätä liitos-/irrotushetkellä ja jokaisen synkronoinnin yhteydessä. Tunnistetut cmd -arvot:

  • 1 – alusta. Palauttaa onnistuessaan 0.

  • 2 – poista alustus. Palauttaa onnistuessaan 0.

  • 3 – synkronoi odottavat kirjoitukset. Palauttaa 0.

  • 4 – palauttaa tiedostojärjestelmälle näkyvien flash-lohkojen määrän.

  • 5 – palauttaa lohkokoon tavuina (tyypillisesti flash-sektorin koko, 4096).

  • 6 – tyhjentää lohkon indeksistä arg. Vaaditaan ennen laajennetun writeblocks -muodon käyttöä.

  • 7 – palauttaa, tukeeko laite lohkon tyhjennyskomentoa (1 RP2040:llä).

Suorat kutsujat eivät yleensä käytä tätä metodia – tiedostojärjestelmäajuri välittää vakiokoodit automaattisesti, kun Flash on liitetty.