banner
Nachrichtenzentrum
Umfangreiche Erfahrung und fortschrittliche Technologie

Raspberry Pi Pico-Dateisystem und SD-Kartenleser

May 06, 2023

Der Raspberry Pi Pico verfügt über keinen Wechselspeicher, aber Sie können seinen internen Flash-Speicher zum Lesen und Schreiben von Dateien verwenden und einen SD-Kartenleser problemlos hinzufügen. Wir zeigen, wie es in MicroPython geht.

Dies ist neues Material, das unser aktuelles Buch erweitert:

Kaufen Sie bei Amazon.

Auch von Interesse:

Raspberry Pico-Dateisystem

Der Pico verfügt über 2 MB Flash-Speicher, der zum Speichern des MicroPython-Interpreters verwendet wird. Der Rest des Speichers wird in ein Dateisystem umgewandelt, das Sie in Ihren eigenen MicroPython-Programmen nutzen können.

Der Flash-Speicher ist in mehrere Partitionen unterteilt, die das System und die Daten enthalten. Im Gegensatz zu einigen anderen Implementierungen von MicroPython ist nur die Datenpartition (1,6 MB) verfügbar und wird beim Systemstart automatisch als Root gemountet. Sie können auf diese Partition zugreifen, indem Sie die Funktion rp2.Flash() verwenden, die ein Partitionsobjekt zurückgibt, das die Datenpartition darstellt.

Sobald Sie eine Instanz von Partition haben, können Sie eine der folgenden Methoden verwenden:

Diese Methoden implementieren sowohl die einfachen als auch die erweiterten Blockprotokolle, die von os.AbstractBlockDev definiert werden. Für den Pico ist nur eine Teilmenge der ioctl-Befehle implementiert:

4 – Ermitteln Sie die Anzahl der Blöcke, sollte eine Ganzzahl zurückgeben (Arg wird nicht verwendet)

5 – Ruft die Anzahl der Bytes in einem Block ab, sollte eine Ganzzahl oder „Keine“ zurückgeben. In diesem Fall wird der Standardwert 512 verwendet (arg wird nicht verwendet).

6 – Einen Block löschen, arg ist die zu löschende Blocknummer

Im Allgemeinen sind diese Befehle zu niedrig, um mit einer Partition zu arbeiten. Stattdessen möchten Sie ein Dateisystem installieren, damit Sie in Bezug auf Dateien arbeiten können. Wenn Sie das Rad jedoch wirklich neu erfinden möchten, können Sie direkt mit Rohblöcken arbeiten.

Das Flash-Objekt ist so eingerichtet, dass es Sie von den anderen Partitionen isoliert und seine Blocknummern bei Null beginnen. Um also einige Daten in den Block Null zu schreiben und sie zurückzulesen, können wir Folgendes verwenden:

Zuerst unmounten wir das Dateisystem, damit es nicht verwendet werden kann. Wenn die Partition gemountet bliebe, könnte das Dateisystem den Block verwenden, den wir verwenden möchten, und ihn überschreiben. Als nächstes erhalten wir die Anzahl der Blöcke und die Blockgröße. Bevor wir neue Daten in einen Block schreiben können, müssen wir diese mit dem ioctl-Befehl 6 löschen. Danach können wir beliebig viele Bytes bis zur Blockgröße schreiben. Beim Zurücklesen der Daten muss lediglich die Länge des Puffers festgelegt werden, um die Anzahl der einzulesenden Bytes anzugeben. Wenn Sie dies ausprobieren, werden Sie feststellen, dass wir „Hello World“ gespeichert haben:

Die Bytes hinter „Hello World“ sind alles, was bereits im Block gespeichert war.