M5CardComputer SD-Card: Unterschied zwischen den Versionen

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen
Peter (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Peter (Diskussion | Beiträge)
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


== SD-Card initialisieren==
== SD-Card initialisieren==
Bevor wir eine SD-Card benutzen können, muss das Gerät erst initialisiert werden.
In UIFlow2 gibt es dafür einen großen Block, der auch schon die richtigen Voreinstellungen mitbringt:<br>
[[file:sdcard_init_01.png]]
<br>
Die Übersetzung in Micopython sieht dann so aus:
<pre>
import os, sys, io
import M5
from M5 import *
from hardware import *
import time
from hardware import sdcard
sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12)
# sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12, freq=1000000)
# Funktioniert, bringt aber diese Fehlermeldung: [Errno 22] EINVAL]
</pre>
Sonderbarer Weise gibt das Original eine Fehlermeldung. Siehe Auskommentierte Zeilen im Listing. Nach dem Entfernen der Frequenzangabe erscheint sie nicht mehr. Es funktionierte aber auch mit der Fehlermeldung.
<br>
Die Fehlermeldung: [Errno 22] EINVAL] tritt wohl an verschiedenen Stellen auf. Sie deutet darauf hin, dass ein falscher Wert übergeben wurde.


== SD-Card formatieren==
Ich habe keine Möglichkeit gefunden die SD-Card im M5CardComputer zu formatieren. Deshalb habe ich sie unter Linux Mint formatiert und gleich ein Verzeichnis mit einigen Dateien darauf kopiert.
== Zugriff auf die SD-Card==
Mit den Dateifunktionen aus dem Modul '''os''' funktionierte der Zugriff auf die SD-Card sofort problemlos.<br>
Sie ist als '<nowiki/>'''/sd'''' ins Filesystem eingehängt.


== Ein Beispiel==


<pre>
<pre>
Zeile 13: Zeile 40:
from hardware import sdcard
from hardware import sdcard


# sdcard initialisieren
sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12)
sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12)


# sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12, freq=1000000)
# Datei anlegen und 2 Zeilen hineinschreiben
# Funktioniert, bringt aber diese Fehlermeldung: [Errno 22] EINVAL]
with open('testdatei', 'w') as f:
    f.write('Erste Datei auf SD Card!\n')
    f.write('2. Zeile\n')
 
# Eine weitere Zeile anhängen
with open('testdatei', 'a') as f:
    f.write('Noch eine Zeile drangehängt.\n')
 
# Datei zeilenweise auslesen und anzeigen
with open('testdatei', 'r') as f:
    for zeile in f:
        print(zeile)
</pre>
</pre>
Da die Datei mit '''with''' geöffnet wird muss sie nicht geschlossen werden. Das macht '''with''' im Hintergrund wenn der '''with-Block''' verlassen wird.


== Aus der M5Stack Doku==
Die SD-Card muss wohl gemountet werden. Bei meiner ging es auch ohne, war vielleicht Zufall?
<br>
Das Thema '''slot''' muss ich noch mal bearbeiten!
<pre>
import machine, os
# Slot 2 uses pins sck=18, cs=5, miso=19, mosi=23
sd = machine.SDCard(slot=2)
os.mount(sd, "/sd")  # mount
os.listdir('/sd')    # list directory contents
os.umount('/sd')    # eject
</pre>


==Navigation==
== Navigation==
[[M5CardComputer|Zurück zur '''M5CardComputer''' Startseite]]
[[M5CardComputer|Zurück zur '''M5CardComputer''' Startseite]]

Aktuelle Version vom 19. April 2024, 16:43 Uhr

https://community.m5stack.com/topic/6128/cardputer-sd-card-issues-how-to-format/6

SD-Card initialisieren[Bearbeiten | Quelltext bearbeiten]

Bevor wir eine SD-Card benutzen können, muss das Gerät erst initialisiert werden. In UIFlow2 gibt es dafür einen großen Block, der auch schon die richtigen Voreinstellungen mitbringt:

Die Übersetzung in Micopython sieht dann so aus:

import os, sys, io
import M5
from M5 import *
from hardware import *
import time
from hardware import sdcard

sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12)

# sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12, freq=1000000)
# Funktioniert, bringt aber diese Fehlermeldung: [Errno 22] EINVAL]

Sonderbarer Weise gibt das Original eine Fehlermeldung. Siehe Auskommentierte Zeilen im Listing. Nach dem Entfernen der Frequenzangabe erscheint sie nicht mehr. Es funktionierte aber auch mit der Fehlermeldung.
Die Fehlermeldung: [Errno 22] EINVAL] tritt wohl an verschiedenen Stellen auf. Sie deutet darauf hin, dass ein falscher Wert übergeben wurde.

SD-Card formatieren[Bearbeiten | Quelltext bearbeiten]

Ich habe keine Möglichkeit gefunden die SD-Card im M5CardComputer zu formatieren. Deshalb habe ich sie unter Linux Mint formatiert und gleich ein Verzeichnis mit einigen Dateien darauf kopiert.

Zugriff auf die SD-Card[Bearbeiten | Quelltext bearbeiten]

Mit den Dateifunktionen aus dem Modul os funktionierte der Zugriff auf die SD-Card sofort problemlos.
Sie ist als '/sd' ins Filesystem eingehängt.

Ein Beispiel[Bearbeiten | Quelltext bearbeiten]

import os, sys, io
import M5
from M5 import *
from hardware import *
import time
from hardware import sdcard

# sdcard initialisieren
sdcard.SDCard(slot=3, width=1, sck=40, miso=39, mosi=14, cs=12)

# Datei anlegen und 2 Zeilen hineinschreiben
with open('testdatei', 'w') as f:
    f.write('Erste Datei auf SD Card!\n')
    f.write('2. Zeile\n')

# Eine weitere Zeile anhängen
with open('testdatei', 'a') as f:
    f.write('Noch eine Zeile drangehängt.\n')

# Datei zeilenweise auslesen und anzeigen
with open('testdatei', 'r') as f:
    for zeile in f:
        print(zeile)

Da die Datei mit with geöffnet wird muss sie nicht geschlossen werden. Das macht with im Hintergrund wenn der with-Block verlassen wird.

Aus der M5Stack Doku[Bearbeiten | Quelltext bearbeiten]

Die SD-Card muss wohl gemountet werden. Bei meiner ging es auch ohne, war vielleicht Zufall?
Das Thema slot muss ich noch mal bearbeiten!

import machine, os

# Slot 2 uses pins sck=18, cs=5, miso=19, mosi=23
sd = machine.SDCard(slot=2)
os.mount(sd, "/sd")  # mount

os.listdir('/sd')    # list directory contents

os.umount('/sd')     # eject

Navigation[Bearbeiten | Quelltext bearbeiten]

Zurück zur M5CardComputer Startseite