Der Betreff beeinhaltet im Grunde bereits die Frage: Ich habe gerade meinen Bildlogger (Beitrag "IQP 500 GSM Bildübertragung Tonerätzverfahren") auf SD-Kartenbetrieb umgestellt. Dafür habe ich eine Mini-SD-Karte verwendet. Diese kann auch problemlos betrieben werden. Ich habe mir anfangs ein eigenes Dateisystem entwickelt, bei welchem neben Name, Zeit, Größe, Lage auch die Position in einer seperaten TOC hinterlegt werden können. Ich ging davon aus, dass das "besonders clever" ist - leider zu kurz gedacht. Auf dem uC ist das prima speicherschonend und auch richtig schnell. Aber sobald ich die Daten (also die Bilder) über die serielle Schnittstelle übertragen möchte - und das sind dann schnell einige MB - kann ich warten und warten und warten. Da ist einfach kein Durchsatz möglich. Daher meine Idee (oder irgendwo gelesen) anstatt eines FAT-Dateisystems die SD-Karte mit Windows zu formatieren und nur eine einzige Textdatei darauf abzulegen. Da ich es bisher nicht getestet habe, würde es mich interessieren, ob diese Datei immer an der selben Stelle (Sektoren) liegt, wie man die Längen und Lageangabe manipulieren kann (oder ob das überhaupt notwendig ist (Thema Fragmentbildung))?
Nee... das ist nicht "anstatt" sondern das ist FAT. Du legst eine einzige Datei an, welche so groß ist wie deine SD Karte. Dann suchst du per Hand den Anfang der Datei (z.B. mit einem Hex/Disk Editor) und merkst dir diesen im Programm. Dein Programm kann nun von diesem Sektor beginnend in die Datei reinschreiben und trotzdem ist die (große) Datei per PC lesbar. Seriell übertragen geht mit Baudratenquarz aber doch auch recht fix? ggf. ein USB/Seriellwandler von FTDI mit parallel Eingang?
Stimmt - das ist der springende Punkt - einfach die Datei groß genug machen. Danke für den Tip. Ja, habe einen Schnittstellenquarz drinne. Da die Verbindung aber immer noch über einen Softwareuart läuft, bekomme ich nur bis zu 57,6kbit/s fehlerfreie Datensätze. Also fehlerfrei bedeutet hier auf 11MByte drei gekippte Bits.
Das mit der Datei funktioniert soweit ganz gut. Bei einer leeren SD-Karte wird diese Datei immer ab dem ersten Cluster beginnen. Welcher Sektor das ist hängt von der Clustergröße ab, da diese dann auch bestimmt wie groß die Cluster-Tabelle sein muss. Ich habe einfach im Treiber (der FAT funktionen enthält) ein wenig rumgefummelt. Das öffnen einer Datei liefert mir dann den ersten Sektor dieser Datei zurück. Von da an benutze ich die Datei nur noch per Sektor-Addressen. Das hat den Vorteil, dass man auf die SD-Karte auch noch andere Dateien packen kann. (Ich habe z.B. 3 solcher riesen-Dateien für Sektor-Zugriff und noch Programm-Images und andere Text-Dateien). Fragmentierung tritt nur dann auf, wenn man eine Datei vergrößert und direkt hinter der Datei der Platz schon von einer anderen Datei belegt ist, oder beim löschen von Dateien mit anschließendem wiederbeschreiben z.B. durch kleinere Dateien.
Ich mache das so das ich auch eine grosse Datei auf einer leeren Karte kopiere damit die nicht fragmentiert ist. Aber ich nutze den ersten Sektor von 512Bytes dieser Datei nicht fuer meine Daten. In diesem ersten Sektor habe ich eine Magicnumber stehen. So kann der Controller die Datei auf der Karte selber finden und es funktioniert auch mit unterschiedlichen Karten. Und es ist auch egal ob die Karten partioniert sind oder als superfloppy formatiert wurden. Und die restlichen Bytes dieses ersten Sektor kann man dann noch fuer ein paar Verwaltungsinformationen nutzen. Da steht dann z.B drin wieviele der Bytes der grossen Datei nun mit Daten belegt sind. Also sozusagen ein kleines Primitivfilesystem in einer Datei. Wichtig ist nur das automatische erkennen. Das schoene an dieser Loesung ist dann auch das man auf der PC-Seite mit ganz normalen Filezugriffen darauf zugreifen kann. Und man kann so eine Datendatei auch mal einfach irgendwohin kopieren! Olaf
>In diesem ersten Sektor habe ich eine Magicnumber stehen.
Muss mal fragen: Was ist eine Magicnumber?
MfG
Joa, Kinnings, datt wird wohl eineh Zaubärzoahl sein. MfG Blaubär
Wolfgang-G schrieb: > Muss mal fragen: Was ist eine Magicnumber? @ Wolfgang: http://en.wikipedia.org/wiki/Magic_number_%28programming%29
Die Frage ist nicht, wo die Datei steht, sondern wie dein Gerät die SD-Karte so beschreibt, das ein Windows sie als EXAKTE kund KORREKTE Speicherkarte sieht. Das ist nicht schwer, du schriebst neben der Datei auch einen Boot-Sektor (Partitionheader), die FAT und das Stammverzeichnis mit raus, das sind ja immer dieselben, also konstante Daten. Siehe: http://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.7.6
Vielen Dank für die vielen guten Informationen. Meine jetztige Idee ist die Folgende: Ich lese die SD-Karte im Kartenlesegerät des PCs. Dazu verwende ich ein Programm, das ich gerade in Delphi geschrieben habe (hätte ich auch früher drauf kommen können...). Das Ganze geht sehr fix und ich kann das selbst entwickelte Dateisystem auf dem uC behalten. Ich bin bisher eben davon ausgegangen, dass man ein nicht formatiertes Laufwerk nicht am PC auslesen kann - aber Programme wie HXDde machen das ja schließlich auch - nur da stört mich am Rand die Sektorbezeichnung, die immer mit abgespeichert wird. In diesem Sinne nochmals meine Danksagung an alle Ideengeber...
Du kannst auch das Programm dd verwenden um direkt die Daten von der Karte in eine Datei zu lesen. In Linux ist das ja keine Hexerei und das Programm gibt es auch für Windows (siehe http://www.chrysocome.net/dd mit Beispielen für lese-operationen). gruß Mobius
Nachtrag: Die selbst zusammengeschriebene Software liest die SD-Karte mit akzeptablen 0,24 Mbit/s aus und generiert auch gleich die entsprechenden Bilddaten. Die limitierende Größe scheint aber am Programm selbst zu liegen, da es keine fertigen Routinen verwendet und daher recht viel zu berechnen hat.
Niels Keller schrieb: > ...einfach die Datei groß genug machen... Sorry für die dumme Frage: Einfach irgendeine große Datei nehmen und auf die Karte kopieren? zB ne .txt Datei mit irgendwelchen Zeichen auffüllen bis sie gewünschte Größe erreicht ist? Oder geht da zB auch, was weis ich, irgend ne x-beliebige zB 100MB große Datei? Ist normal egal oder? Gruß Aige
Stefan A. schrieb: > Niels Keller schrieb: >> ...einfach die Datei groß genug machen... > > Sorry für die dumme Frage: Einfach irgendeine große Datei nehmen und auf > die Karte kopieren? > zB ne .txt Datei mit irgendwelchen Zeichen auffüllen bis sie gewünschte > Größe erreicht ist? Oder geht da zB auch, was weis ich, irgend ne > x-beliebige zB 100MB große Datei? Ist normal egal oder? Naja, Du solltest schon wissen, was in der Datei drin ist, damit Du die betreffenden Sektoren auch wieder findest, wenn Du ohne Dateisystem darauf zugreifen willst. Ich hab's zwar noch nicht gemacht, aber ich würde den ersten Sektor mit einer Kennung versehen und den Rest mit $FF auffüllen. > > Gruß Aige
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.