mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schreiben auf SD-Karte puffern - welcher RAM?


Autor: puffer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe eine SD-Karte am ATMEGA16 über SPI und noch ein anderes 
Gerät, das mit immer schubweise so 8-10 kByte Daten liefert, die ich auf 
die SD-Karte schreiben will. Weil der Mega16 ja nicht so viel SRam hat, 
müßte ich die Daten irgendwo zwischenspeichern - aber wie am Besten? 
externes RAM? parallel oder seriell? Ich habe noch den PortA und 4 
andere Pins frei..

Ich habe schon gedacht, evtl. baue ich mir einen einfachen FIFO mit 
einem zweiten Mega16 und einem "normalen" RAM - aber geht es auch 
einfacher?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage ist wie schnell die Daten kommen. Evtl. geht es auch so.
Ersatzweise könnte man ATMega32 oder ATMega644 nehmen. Die haben
ein bißchen mehr RAM. Denkbar wäre auch ein FRAM (Ferro RAM).
Ist aber teuer.

Autor: puffer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja ich habe es probiert, die SD-Karte schafft es nicht "einfach so". 
Ich schreibe einfach Sektoren, ohne FAT. Ein bischen besser wird es, 
wenn man die Sektoren vorher löscht. Zwischen den Datenblöchen a 10KByte 
ist genug Zeit zum Schreiben.

Autor: puffer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie haben die Megas alle nicht mehr als 8kByte SRAM, und ein 
bischen Stack und Variablen brauche ich ja auch noch..

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde SPI RAM nehmen, z.B. sowas wie den 23K256. Der wird ähnliche 
wie die M25Pxx SPI Flashs angesteuert. Das sind bis zu 32kByte in DIL8 
oder SO8.
Da man das SPI Interface der SD Karte mitbenutzen kann, wird so nur ein 
weiterer Pin für den CS Anschluss benötigt.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Naja ich habe es probiert, die SD-Karte schafft es nicht "einfach so".

Tja, diese blöden Busy Zeiten ;) Wo kommen die Daten denn
nun her, und wie schnell? Beim ATMega644 könnte man mit
Doublebuffer von jeweils 1,5kB schon ne Menge machen.

Autor: lightninglord (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja man kann den SRAM eines Megas vergrößern indem man nen externes 
SRAM anhängt, das kann man dann wie das interne über Pointer ansprechen. 
Kostet hald ne menge Pins. Einfach mal nach external SRAM beim AVR 
googlen und im Datenbaltt nachschaun

Autor: puffer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPI Ram klingt gut.. Ich hab noch keine Erfahrung mit mehreren 
SPI-Geräten an gleichen Bus.. die SD-Karte braucht ja immer mal ein paar 
Clocks, obwohl CS high (inaktiv) ist, z.B. bevor man ein Kommando 
sendet.. Wird die da bei einem zweiten Gerät nicht durcheinanderkommen, 
wenn ich dann viel mehr Clocks sende bevor das CS für die SD-Karte auf L 
geht und das Kommando gesendet wird?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
puffer schrieb:
> Wird die da bei einem zweiten Gerät nicht durcheinanderkommen,
> wenn ich dann viel mehr Clocks sende bevor das CS für die SD-Karte auf L
> geht und das Kommando gesendet wird?

Sobald CS inaktiv ist, ist der Karte egal was auf dem Bus passiert 
(abgesehen von den paar zusätzlichen Clocks). Ich betreibe eine SD Karte 
und einen ENC28J60 Ethernetcontroller am gleichen Bus, läuft absolut 
problemlos.

Autor: puffer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na dann werd ich das mal testen, klingt gut.

Autor: puffer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja - gibt es so ähnliche Chips auch in größer? (128K)

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum nimmste denn nicht einen AVR, der sein RAM-Interface bereits 
mitbringt, wie den Mega128 und größer? Die neuen XMegas erlauben sogar 
bis 16MByte externes SRAM. Das Gefrickel an einem Mega16 macht keinen 
Sinn, zumal einige ausgereifte SD-Karten-Routinen auch einiges an Flash 
benötigen und zuwenig Pins hat man sowieso auch immer bei den kleineren 
AVRs. Ach und Du könntest spaßhalber mal das Kommando: MultiBlockWrite 
bei der SD-Karte ausprobieren, welches deutlichen 
Geschwindigkeitszuwachs beim Schreiben bringt. Allerdings schützt auch 
dieses nicht vor gelegentlichen WearLevelling-Busy-Zeiten im Bereich bis 
200ms.

Autor: puffer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Travel Rec.

weil ich schon eine fertige, passende Platine habe für den Mega16 inkl. 
SD-Slot. Generell hast Du natürlich Recht. Aber die 6 Beinchen für den 
ext. SPI-RAM sind in meinem Fall einfacher anzulöten, und schnell genug 
ist es dann auch.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>weil ich schon eine fertige, passende Platine habe für den Mega16

Das ist keine Entschuldigung, wenn das Gerät später nicht oder nur 
unzureichend funktioniert.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schnell kommen denn die 8-10 kByte an?

Autor: Rex Gildo jr. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin !
Ist zwar schon länger her, dass ich mal was mit ner SD Karte und nem AVR 
gemacht habe. Aber damals war ein Atmega32 schon arg knapp bemessen.
Die Zeit die du dafür brauchst nen externen RAM rannzufrickeln würd ich 
eher für ein Redesign der Platine raushauen. Wenn es nicht auf den Euro 
ankommt, spendier generell für solche Aufgaben lieber nen µC der ne 
Nummer größer ist.
Klar kostet der nen Euro oder 2 Mehr, aber Frickelarbeit aufgrund von 
Hardwareressourcen die total am Limit sind, kostet dem AG immens Kohle 
und/oder dir unnötig Nerven ;).
Da muss es schon um Centbeträge gehen innerhalb einer 
Großserienproduktion, damit das Frickeln sich lohnt ;)

Falls es sich um ein Hobbyprojekt handelt, gilt das gleiche. Geld sparen 
durch ausreichend bemessene Hardware.

Gruß

Rex

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.