Schreiben auf SD-Karte puffern - welcher RAM?

Gast #1346291
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?
Gast #1346299
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.
Gast #1346306
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.
Gast #1346326
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.
Gast #1346337
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
Gast #1346338
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?
#1346347
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.
(Firma: TravelRec.) Persönliche Seite #1347425
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.
Gast #1348965
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.
Gast #1349012
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren