SD Karte Adressen

OP #3774045
Lesenswert?
• ▲
▼
Hallo!

Ich beschäftige mich gerade damit, eine microSD(HC)-Karte  mit einem 
Mikrocontroller (MSP430 Familie) zu verbinden.

Die Initialisierung läuft schon sauber und auch das CSD Register kann 
ich ohne Probleme auslesen. Für mich stellt sich dann allerdings beim 
Schreiben bzw. Lesen auf/von der Karte die erste Frage. Woher weiß ich 
welche Adressen es gibt?

Das Ergebnis von diesem Projekt sollte am Ende so sein: Es soll auf der 
microSD(HC)-Karte ein .txt-File oder .csv-File erzeugt werden. In diese 
Datei soll dann immer wieder (ca. 1mal pro Sekunde) geschrieben werden.

Das Filesystem ist FAT32. Hier sollte ich (wie ich gelesen habe) mich an 
vorhandene Bibliotheken halten (FatFS). Diese ist mir auch noch nicht so 
ganz klar, aber das kommt dann zu einem späteren Zeitpunkt.

LG Christoph
#3774381
Lesenswert?
• ▲
▼
@Sascha Weber (sascha-w)

>In der Bibliothek wird mit dem Öffnen der Karte die Partitionstabelle
>ausgelesen und über die Einträge dort lassen sich die Blockadressen
>berechnen.

Mit einer gescheiten Bibliothek interessieren mich solche Dinge nicht 1 
Sekunde! Da gibt es nur Verzeichnisse und Dateien.
OP #3774960
Lesenswert?
• ▲
▼
@Falk:
Der Sascha wollte mir, denk ich zumindest, nur einmal erklären, woher 
die Adressen für das eigentliche schreiben und lesen kommen.

Gleich mal ein Danke an alle :)

Die Worte "Mach das" haben mir schon mal die Augen geöffnet. Und dann 
bekam ich noch die Bestätigung.

Also werde ich mal das probieren und wenn ich nicht mehr weiter komme 
werde ich mich wieder melden. Momentan macht mir das Errorhandling ein 
bisschen zu schaffen.

Kann ich eigentlich bei einer microSD(HC)-Karte einen nichtreversiblen 
Schaden durch eine falsche Schreiboperation hervorrufen? (nur mal aus 
reinem Interesse)

Christoph
#3774963
Lesenswert?
• ▲
▼
@ Christoph H. (hoc)

>Kann ich eigentlich bei einer microSD(HC)-Karte einen nichtreversiblen
>Schaden durch eine falsche Schreiboperation hervorrufen?

Man kann die FAT Struktur zerstören, dann ist halt der Dateninhalt weg 
und man muss ggf. neu formatieren. Einen Hardwaredefekt bekommt man 
durch eine fehlerhafte Ansteuerung eigentlich nicht hin.
#3775151
Lesenswert?
• ▲
▼
Christoph H. schrieb:
> Das Ergebnis von diesem Projekt sollte am Ende so sein: Es soll auf der
> microSD(HC)-Karte ein .txt-File oder .csv-File erzeugt werden. In diese
> Datei soll dann immer wieder (ca. 1mal pro Sekunde) geschrieben werden.

In einem 24/7 System oder wie ist die Auslastung des Systems.

Je nach Hersteller und Spezifikation des Controllers und des Speicher 
Chips könnte das schon nach kurzer Laufzeit zu Problemen führen mit der 
SD(HC) Karte.

Gruß Ronny
Gast #3775710
Lesenswert?
• ▲
▼
Rudolph schrieb im Beitrag #3775690:
> Glaubwürdigkeit und wie man sie nicht verdient.
> Und im Zweifel ist das hier auch nicht so anonym wie manche offenbar
> glauben.

Naja, DU sprichst es ja im Grunde selbst hier aus: Glaube ist etwas, was 
manche hier so verstehen, als wären die Antworten tatsächlich 
beitragsbezogen.. Und weuißt du: Hier liegt ja gerade das Interessante 
daran, dass ein Forum in der Regel nur ein Meinungsaustausch ist - 
zumindest empfinde ich das so, denn Themenbezogene schlüssige Antworten 
hab ich hier noch nie gefunden, die auch wirklich einem 
Beitrags-Anfrager hier gerecht werden.

Und, auch das stimmt: im Zweifel ist das hier auch nicht so anonym wie 
manche offenbar glauben.

Nuzn, lass sie doch bitte in diesem Glauben, denn der Glaube versetzt 
gewöhnlich Berge, und das machts Forum so spannend. Daumen hoch, DU hast 
den "Sinn" verstanden und ich pflichte Deinem Eintrag bei! Danke!

Besser hätt ich das auch nicht geschrieben.

Also schönen Sonntag wünsch ich
Moderator (Firma: Titel) Persönliche Seite #3776455
Lesenswert?
• ▲
▼
DerElko schrieb:
> im Zweifel ist das hier auch nicht so anonym wie manche offenbar
> glauben.
Ganz und gar nicht. Und man sieht evtl. auch gleich, wer mit 
unterschiedlichem Namen sich selber den Ball zuspielt um andere zu 
reizen...

Also sagen wir mal so: solange die Pegel an den Pins einer SD-Karte im 
spezifizierten Rahemn bleiben, geht die Karte physikalisch nicht kaputt. 
Man muss evtl. nur neu formatieren, was evtl. mit den Bordmitteln eines 
Windows-OS nicht funktioniert, und man deshalb meinen könnte, die Karte 
sei defekt.

Christoph H. schrieb:
> Die Auslastung des wird sehr wahrscheinlich 24/7 sein. Zu welchen
> Problemen könnte es kommen?
Deine Karte könnte nach kurzer Zeit keine lösch- und beschreibbaren 
Sektoren mehr haben. Flashspeicher sind trotz ausgeklügeltem 
Speichermanagement nicht die optimale Lösung für sich laufend ändernde 
Daten...

Christoph H. schrieb:
> In diese Datei soll dann immer wieder (ca. 1mal pro Sekunde)
> geschrieben werden.
Da könntest du einfach mal mit einer Batch-Datei an einem PC testen, wie 
lange die Karte das mitmacht...
#3776505
Lesenswert?
• ▲
▼
Lothar Miller schrieb:
> Christoph H. schrieb:
>> Die Auslastung des wird sehr wahrscheinlich 24/7 sein. Zu welchen
>> Problemen könnte es kommen?
> Deine Karte könnte nach kurzer Zeit keine lösch- und beschreibbaren
> Sektoren mehr haben. Flashspeicher sind trotz ausgeklügeltem
> Speichermanagement nicht die optimale Lösung für sich laufend ändernde
> Daten...
>
> Christoph H. schrieb:
>> In diese Datei soll dann immer wieder (ca. 1mal pro Sekunde)
>> geschrieben werden.
> Da könntest du einfach mal mit einer Batch-Datei an einem PC testen, wie
> lange die Karte das mitmacht...

Hallo,
sorry das ich jetzt erst Antworte.

Aber Lothar hat Dir das ja schon beantwortet und der Typ mit der 
Batch-Datei zum testen ist sehr gut.
Habe den Fehler mit dem Sekundentakt selber mal bei einem Logger 
gemacht.

Die erste 2GB Micro SD war nach ca. 4 Woche defekt okay kann mal 
passieren die nächste hielt leider auch nicht viel länger durch.

Kurz noch mal nach gerechnet "Oh Oh" NUR 86400 Schreibzugriffe pro Tag.
Das sind grob gerechnet 1 Million Schreibzugriffe in 12 Tagen.

Gruß Ronny
#3776516
Lesenswert?
• ▲
▼
Da wahrschein pro Sekunde weniger als 512 Byte an Daten afallen, ist es 
so oder so sinnvoll, einen Zwischenpuffer aka FIFO im RAM aufzubauen 
und nur alle ?? Sekunden oder Minuten oder gar Stunden auf die SD-Karte 
zu schreiben. Al Minimum sollte man immer einen ganzen Sektor 
vollschreiben, sonst wird es Unsinn.

Wenn man 2GB in 12 Tagen vollschreibt ist das kein Beinbruch, 
schließlich verkrafter so eine Flashzelle je nach Typ 1000-100.000 
Schreibvorgänge, das sind 2TB  und mehr an Daten, die man auf so eine 
Karte schreiben kann.

Das klappt natürlich NUR, wenn man eben NICHT wegn einer handvoll Bytes 
immer wieder einen vollständigen FAT Schreibzugriff macht!
OP #3777204
Lesenswert?
• ▲
▼
Danke für die ausführliche Antwort!

Mit welchen "Mitteln" kann man denn die Karte dann formatieren?

Momentan bin ich soweit, dass die Initialisierung einer microSDHC-Karte 
schon funktioniert, zumindest bei der Transcend gibt es keine Probleme, 
eine Sandisk antwortet auf CMD55 oder ACMD41 nicht.

Die Transcend liefert jedoch nach dem Befehl f_write den Error 2 zurück.
Und ich kann mir nicht so wirklich erklären wieso. Das Erstellen einer 
Datei mit f_open funktioniert, jedoch kann ich nichts hineinschreiben.

Hatte von euch schon jemand einmal sowas? Ich werde vermutlich auch noch 
einen neuen Beitrag schreiben, wo ich dann auch noch meinen Code 
anhänge.

LG Christoph
(Firma: www.harerod.de) Persönliche Seite #3777275
Lesenswert?
• ▲
▼
Hallo Christoph,
zu Deiner Aufgabenstellung gibt es mehrere gangbare Ansätze. Das Ziel 
ist Schreibzugriffe, z.B. auf die FAT, zu reduzieren.

Um einen Flash-freundlichen Datenlogger zu bauen, gibt es z.B. folgende 
Ansätze:

Zum einen gibt es Dateisysteme/Treiber, die für Flash optimiert sind. In 
diesem Fall wird ein laufendes Beschreiben der immer selben Sektoren 
verhindert. Bei großen Solid State Drives heißt das "Overproviosioning".
Du könntest mal schauen, ob es solche Treiber für Dein System gibt.

Der andere Ansatz wäre, dass Du Dir auf der frisch formatierten Karte 
eine große Containerdatei anlegst. Die ist nur dafür da, dass Dein Host 
OS (z.B. Windows) hinterher an die Daten kommt.

Auf dem MCU-System holst Du Dir den ersten Sektor der Datei - entweder 
vom Filesystem, oder Du suchst nach einer Magic-Startsequenz. Dann 
schreibst Du nacheinander in die Datei. Soll das Ganze einfach nur 
sequenziell sein, reicht eine Initialisierung mit einer "leer"-Kennung.
Willst Du wahlfrei auf die Daten zugreifen, könnte vom Konzept her sowas 
wie die STM32 EEPROM im Flash Emulation helfen.

Vielleicht helfen Dir diese Gedanken weiter, bzw. geben eine Grundlage 
zum Suchen.

Grüße,
 Marcus
OP #3777311
Lesenswert?
• ▲
▼
@Marcus: Danke für deine Ansätze, werde mich später damit beschäftigen 
und mal sehen was ich so finde.

@Sonntag: Hast du auch vielleicht eine Referenz für deine Aussage? Ich 
habe deine Antwort nicht unbeachtet gelassen und habe mich auf die Suche 
gemacht, aber nichts entsprechendes gefunden.

Ich kann die Karte auf einem Computer aber ohne Probleme auslesen und 
auch Dateien darauf speichern!? Somit kann ich die Karte ja noch nicht 
ganz zerstört haben?!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.