www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Karte (1GB) mit AT89C4051 beschreiben?


Autor: Peter R. (koal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter R. (koal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter R. (koal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter R. (koal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Peter R. (koal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso na also es soll schon benutzerfreundlich sein sprich mann schiebt 
die Karte rein und eine .txt Datei is da...

mfg peter

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ist FAT ein MUSS.

MFG
Falk

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> auch mit einzelnen Bytes beschreiben

Woher nimmst du diese Info?

Autor: Peter R. (koal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 )

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Peter R. (koal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> blockgröße 512bit is und deshalb

Hey, bitte nicht Bit und Byte verwechseln.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.