www.mikrocontroller.net

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

Autor: Peter R. (koal)
Datum: 27.01.2008 12:40

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: 27.01.2008 12:57

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: 27.01.2008 14:08

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: 27.01.2008 15:28

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: 27.01.2008 16:25

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: 27.01.2008 17:12

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: 27.01.2008 17:44

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: 27.01.2008 17:53

@ 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: 27.01.2008 18:41

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: 27.01.2008 19:15

Also ist FAT ein MUSS.

MFG
Falk
Autor: Philipp (Gast)
Datum: 12.04.2008 10:25

> 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: 12.04.2008 13:49

> auch mit einzelnen Bytes beschreiben

Woher nimmst du diese Info?
Autor: Peter R. (koal)
Datum: 13.04.2008 00:02

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: 13.04.2008 15:09

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: 13.04.2008 20:43

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: 07.05.2008 17:34

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: 07.05.2008 17:59

> blockgröße 512bit is und deshalb

Hey, bitte nicht Bit und Byte verwechseln.

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net