Moin, für ein Uni-Projekt müssen wir Daten von Sensoren sammeln, und diese längerfristig speichern. Dafür wollten wir eine SD-Karte nehmen. Nun war meine Idee, das ganze nicht großartig über FAT etc. zu machen, sondern die Daten einfach so (wie sie kommen) auf die Karte zu schreiben. Es sind alles 8-Bit-Werte, die in einer genauen Reihenfolge hintereinander kommen. Aber hat jemand von Euch Ahnung, wie das geht? Oder wie das Timing aussehen muss? Oder vielelicht sogar etwas Code dafür??? MfG, und vielen Dank schon einmal, Ozzy
Die Suche ist dein Freund. Es sollte genug Infos dazu im Netz und hier im Forum dazu geben. Schau dir auch mal die Datenblätter zu deiner SD-Karte an.
Hi, durch die Suche habe ich jetzt schon etwas Assembler-Code gefunden (vom Midi-Recorder), und bei Ulrich Radig habe ich auch ein Datenblatt für eine SD-Karte gefunden (meine stammt aus einem Navi, da steht kein Firmenname drauf). Aber ich weiß eben nicht genau, wie das mit dem Timing geht, außer, dass man am Anfang wohl 74 Takte warten muss... Hat vielleicht jemand noch mehr Informationen? MfG, Ozzy
Mehr Infos als die von Ulrich Radig und die dazu gehörigen Datenblätter wirst Du für Dein Vorhaben eigentlich nicht brauchen.
Bei Ulrich Radig gibt's ein Datenblatt (Ist glaub' von Hitachi), welches die Ansteuerung im SPI-Modus recht gut aufzeigt. Ist zwar für MMC-Karten, das spielt aber keine Rolle. Falls du aber was Fertiges nehmen willst, solltest du dich mal bei elm-chan umsehn: http://elm-chan.org/docs/mmc/mmc_e.html Da gibt's auch schon fertigen Code für eine FAT-Implementierung (Hardwareunabhängig) mit den Zugriffsfunktionen für ein paar verschiedene Controller. Darunter auch für AVR und AFAIK ARM. Willst du die Daten ohne Dateisystem schreiben solltest du einfach beachten, dass nur in Blöcken von 512 Bytes geschrieben werden kann. Entweder musst du also sehr viel Speicher einfach verschwenden oder aber einen Controller mit genügend RAM (min. 600 Bytes, also eigentlich 1kB) verwenden.
Hallo Deine Idee ist gut Christoph. Nur eine Frage: Wie willst du die Daten am PC auslesen? Gruss Laurentius
Laurentius wrote: > Hallo > Deine Idee ist gut Christoph. > > Nur eine Frage: Wie willst du die Daten am PC auslesen? Na über den Mikrocontroller und die serielle Schnittselle (zur Not auch über USB-SER-Wandler). Denn der Mikrocontroller weiß schließlich, wo er hingeschrieben hat. Solange die Speicherkarte keine fehlerhaften Sektoren hat ist das kein Problem. > > Gruss Laurentius ...
Erscheint mir erstmal komplizierter als direkt Dateien auf die Karte zu schreiben. Aber ich lasse mich gerne eines Besseren belehren. Gruss Laurentius
Du kannst die Karte FAT-formatieren und eine Datei drauf schreiben, die die Karte vollständig belegt. Dann ist einigermaßen garantiert, daß die Cluster in logischer Adressfolge physikalisch auf der Karte stehen. Dein µC schreibt dann direkt in den Datenbereich. Hinterher liest Du die Datei ganz normal am PC ein. Du mußt Dich dann nur noch darum kümmern, daß ein logischer EOF-Marker geschrieben wird, oder daß Du es sonst wie erkennen kannst, denn für den PC ist die Datei so groß, wie sie ursprünglich angelegt wurde.
Hi, gibt es denn eine einfache Methode, in eine Datei zu schreiben? Der Code sollte wirklich klein und schnell sein. Im Zweifellsfall mache ich die Datei genauso groß wie die Karte... Mal sehen, womit er den Rest der Datei auffüllt... MfG, und vielen Dank schon einmal für Eure Hilfe, Ozzy
Da gerade über SD-Karten diskutiert wird, möchte ich gleich eine Frage stellen. Bei den Beispielen werden immer nur maximal 128MB große Karten verwendet. Leider werden die Karten dieser Größe immer seltener. Können auch Karten mit 1 bzw. 2GB verwendet werden? Oder gibt es da Probleme mit dem Adressbereich bzw. andere Kompatibilitätsprobleme? mfg Bastler
@ Christoph: Du kannst die Holzhammermethode verwenden, wenn Du so vorgehst, wie ich oben beschrieben habe: Sieh Dir mit einem Diskdump-Programm die Karte nach der Formatierung und der Anlage der leeren Datei an und suche den Sektor, ab dem der Datenbereich beginnt. (Sieh Dir die FAT-Specs an, dort ist beschrieben, wie die Verwaltungsstrukturen aussehen - das ist alles ziemlich simpel..) Dann verdrahtest Du einfach die Adresse des ersten Datensektors fest in Deinem µC-Programm und schreibst ab dort einfach hart auf die Karte. Dazu brauchst Du keine FAT-Routinen - quick and dirty...
Hi, hab jetzt was bei Mr. Midi gefunden. Da steht: [...]Beliebige MMC/SD-Karten verwendbar, allerdings muss sie mit Windows formatiert werden und dann muss ein leeres File mit etwa der Kapazität der Karte (unter Eigenschaften im Windows-Explorer wird der freie Speicher in Bytes angegeben) drauf kopiert werden. (Das kann irgendeine Datei sein, die halt gerade noch draufpasst.) Erst dann sollte man sie in Mr.MIDI stecken :-) Sollte die Karte größer als 16 MB sein, kann man die Dateigröße so berechnen: 512 256 Anzahl "Files", dann allerdings nicht in Mr.MIDI zu große Filenummern verwenden! Sonst geht es auf der Karte so durcheinander, dass Windows sie neu formatieren muss...[...] @ Uhu Uhuhu: Ist das das, was Du meintest? Wie erstellt man denn eine Datei, die so groß ist, wie die Karte? Wie kann man denn die Größe der Datei verändern??? MfG, Ozzy
Ja, das meinte ich. Das Schreiben der Datei: Sieh Dir unter Windows an, wieviel Platz auf der Karte frei ist. (Nimm eine Methode, die das aufs Byte genau tut!) Dann schreibst Du Dir ein kleines Programm, das auf der Karte eine Datei anlegt und einfach so viele Daten darauf schreibt, wie Windows vorher angezeigt hat. Noch einfacher: Du schreibst einfach Datenblocks, die so lang sind, wie ein Cluster. Das machst Du so lange, bis Du einen Schreibfehler bekommst. Anschließend die Datei mit close() ordentlich zu machen!
man kann die SD Karte auch unter Windows Sektorweise auslesen, z.B. mit dskprobe.exe aus Windows NT-Reskit oder mit eigenem Code wie hier beschrieben: http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5765/ Aber mit richtigen Dateien sieht es doch etwas eleganter aus.
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.