Hallo, ich arbeite von der Schule her an einem Projekt wo ich regelmäßig ankommende Daten(wie temperatur,uhrzeit und soche sachen) auf eine SD Karte abspeichern muss damit manns dann am PC als .txt datei bekommt. Ich hab mich im Forum hier durchklickt und hab mir dabei einige ähnliche "projekte" angschaut und mir ist aufgefallen das die meißten da AVR controller verwenden und des niemand den µC verwendet den ich werwende... oder einen ähnlichen also 8051. Deshalb hab ich mich jetzt gefragt ob das überhaupt möglich ist mit dem AT89C4051 erstens weil ich halt nirgends was ähnliches gefunden habe und zweitens weil nachdem ich ma die Datenblätter über den Physikal layer von der SD Card ein wenig durchgelesen hab , habe ich mir gedacht das der µC das viellecht nicht packt weil er wenig RAM hat und das Befehle für die SD-Card ziemlich lang sind und ausserdem im vergleich zu anderen µC die ich ma noch angeschaut habe hat der keinen SPI aber ich will ja die Karte im SPI modus verwenden.... Aber die Anforderungen sind halt auch nich wirklich hoch das einzige was ich machen will ist, Daten (max. so 50Byte) die in regelmäßigen abständen zum µC kommen auf die SD karte schreiben. Schnell braucht das ganze nicht sein... und die Daten sollen dann als eine .txt Datei auf der Karte sein damit manns am PC auslesen kann. Ich hoffe jemand kann mir da weiterhelfen ich bin für jeden Hinweis dankbar. mfg Peter
Die meisten Programme sind in C geschrieben. Mit ein wenig Anpassung an die Microcontroller- und Compilerspezifik lassen sich AVR Programme meist problemlos auch für 8051-Systeme oder umgekehrt verwenden. SPI muss nicht als Hardware vorhanden sein, lässt sich leicht als Software implementieren. RAM des AT89C4051 sollte ausreichen. (Nimm lieber AT89S4051!) Als C-Compiler gibts SDCC als freeware.
Danke für die Antwort. Ürsrünglich hatte ich ja vor in Assembler zu schreibn aber naja :D i glaub i werd doch der einfachheit halber in C schribn...
Du musst Dir im Klaren sein, dass so ein Projekt nicht gerade als Einstieg geeignet ist. Einige Erfahrungen in ANSI C und von Microkontrollern solltest Du schon haben. Es wird nicht funktionieren, wenn Du den Programm-Kode der Beispiele nicht verstehst und Dir die Funktionen und Arbeisweise der SD-Karte / FAT nicht 100%ig bekannt sind.
naja ich hab bisher eigentlich nur C++ programmiert und naja ich sag amal Miniprogramme in Assembler sprich a paar LEDs ansteuern.... also du hast recht mir fehlt sicher einiges an Grundwissen das merk ich ständig wenn ich versuche die Datenblätter zu studieren... Als ich zugestimmt habe den Part zu übernehmen hatte ich keine Ahnung wie komplex so eine SD karte ist ich hab mir eigentlich gedacht des da kein großer Unterschied zu an normalen EEPROM ist. Ich bin erst jetzt im nachhinein draufkommen das das ein IC ist... Im moment bin ich dabei die Datenblätter vom physical layer von der SD Karte zu studieren und ich schreibs mir halt auf Deutsch zusammen und hoffe das ich dadurch schlauer werde :D mfg Peter
Du kannst eine SD/MMC Karte nur in Bloecken von 512Bytes beschreiben. Wenn man dann noch bedenkt das dein Programm ja auch selber noch etwas Speicher braucht ist die absolut unterste Grenze wo ich das fuer sinnvoll halte 1kB Ram. Wenn du dann noch eine halbwegs brauchbare FAT16 Implementierung schreiben willst dann wuerde ich schon so 8kb haben wollen, 128kb waeren aber netter. Allerdings kannst du natuerlich deine Datei an einer festen Position ablegen und so beschreiben, aber auch dann sollten es schon 1kB sein. Olaf
Das heisst ich kann mir meinen AT89C4051 mit 128 Byte RAM abschminken wenn ich des jetzt richtig verstehe... Als alternative hätte ich noch einen ATMEGA16 der hat auch SPI und 1k SRAM mit dem müsste es dann gehn? Olaf wrote: > Allerdings kannst du natuerlich deine Datei an einer festen Position > ablegen und so beschreiben, aber auch dann sollten es schon 1kB sein. Meinst du damit ich könnte eventuell auf FAT verzichten? mfg Peter
@ Peter R. (koal) >Das heisst ich kann mir meinen AT89C4051 mit 128 Byte RAM abschminken >wenn ich des jetzt richtig verstehe... Ja. >Als alternative hätte ich noch einen ATMEGA16 der hat auch SPI und 1k >SRAM mit dem müsste es dann gehn? Ja. >Meinst du damit ich könnte eventuell auf FAT verzichten? Naja, dann kann dein PC aber nicht wirklich einfach Dateien lesen. Dann müsstest du auf dem PC ein Programm schreiben, das feste Sektoren ausliest und verarbeitet. Der Aufwand ist auch nicht wesentlich geringer als eine FAT Umsetzung, zum es davon schon dutzende fix und fertig gibt. MFG Falk
achso na also es soll schon benutzerfreundlich sein sprich mann schiebt die Karte rein und eine .txt Datei is da... mfg peter
> Du kannst eine SD/MMC Karte nur in Bloecken von 512Bytes beschreiben.
Laut Spezifikation kann man eine nicht SDHC-Karte (also eine SD 1.0)
auch mit einzelnen Bytes beschreiben.
> auch mit einzelnen Bytes beschreiben
Woher nimmst du diese Info?
also was i weis is des die mind. blockgröße 512bit is und deshalb kamma nur mindesten 512bit Daten schreiben... btw. zu meinem projekt: hab an ATmega32 und ich versuch die ganze sache mit den routinen von holger-klabunde.de zu realisieruen ... gar nicht so einfach^^ (für mich jedenfalls :D )
Hallo Peter, ein Kollege von mir hat sich auch schon mal lange mit Beschreiben von SD-Cards beschäftigt. Es sind ja nicht nur die Probleme, die beim grundsätzlichen Umsetzen (Protokoll, FAT) viel Zeit in Anspruch nehmen. So ganz nebenbei kommen auch noch so Eigenheiten wie Timing-Unterschiede zwischen verschiedenen Karten. Also wenn die eine läuft, muss es noch lange nicht mit einer weiteren funktionieren. Daher mein Vorschlag der Umstieg auf ein Produkt, das USB-Sticks beschreiben kann: http://www.vinculum.com/prd_vdrive1.html Ich habe das Produkt bereits mal getestet, funktioniert sehr gut. Und über die serielle Schnittstelle kann man dann Daten lesen und schreiben. Alle Kommandos sind sehr einfach gehalten. Es funktionierte mit allen auffindbaren USB-Sticks, keine Inkompatibilitäten festgestellt. Vor allem aber: Man kann sich auf die wesentliche Aufgabe konzentrieren!
naja hab eh scho dacht des usb die einfachere variante gewesen wäre da viel mehr verbreitet... aber zu diesem zeitpunkt is bei mir nimmer möglich umzusteigen(Hardware is schon in da fertigung und auf mmc/sd ausgelegt) mfg Peter
Ich hätte da einen Tip: Wir haben das schon mal an der Uni realisiert, war gar nicht so schwer! Das mit den 512 Byte stört aber nicht, denn unsere Karte war 64MB groß und wir haben einfach die 128 Byte RAM komplett und den Rest mit Nullen geschrieben. Ein Zähler hat die Blöcke hochgezählt und so hatten wir über 128000 Blöcke, also Messwerte. Die Karte (war bei uns MMC) wird einfach von Anfang bis Ende beschrieben. Das Auslesen ist noch einfacher. Kein Programm oder sowas... ein dd in Linux und alles ist super. Dann ein kleines Skript, das die Messwerte aus dem Dump parst und alles ist da. Keine Ahnung was man Adressieren kann aber müsste wohl bis 2GB gehen. Einfach mal Knoppix (Bootcd) oder Ubuntu (installieren) nehmen und ausprobieren. Der dd Befehl lautet dd if=/dev/sdb of=daten.dump count=128000 if -- Inputfile of -- Outputfile count -- Zahl der Blöcke bei mir ist sdb die SD-Karte. mache als root ein fdisk -l dann siehst du wo was liegt. Aber ganz wichtig ist vor der Benutzung ein dd if=/dev/zero of=/dev/sdb machen!! Das setzt alle Bytes auf 0. Der Befehl bricht ab wenn alles gesetzt ist. Falls die automtisch gemountet werden sollte erst unmounten. Das ist zwar verschwenderisch, aber die Karten sind doch so billig... viel Spaß
> blockgröße 512bit is und deshalb
Hey, bitte nicht Bit und Byte verwechseln.
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.