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
Gast
#3774093
> Hier sollte ich (wie ich gelesen habe) mich an vorhandene Bibliotheken halten.
Mach das.
@Christoph In der Bibliothek wird mit dem Öffnen der Karte die Partitionstabelle ausgelesen und über die Einträge dort lassen sich die Blockadressen berechnen. Sascha
@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.
@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
@ 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.
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
@Ronny S. Die Auslastung des wird sehr wahrscheinlich 24/7 sein. Zu welchen Problemen könnte es kommen?
Gast
#3775619
Autsch, was geht denn hier? Ist doch noch zu früh für Popcorn. Und jetzt mal bitte Belege für die Behauptung, dass man SD-Karten durch bestimmte Byte-Folgen am SPI killen kann.
Gast
#3775710
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
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...
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
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!
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
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
@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?!