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


von puffer (Gast)


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?

von holger (Gast)


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.

von puffer (Gast)


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.

von puffer (Gast)


Lesenswert?

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

von Benedikt K. (benedikt)


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.

von holger (Gast)


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.

von lightninglord (Gast)


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

von puffer (Gast)


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?

von Benedikt K. (benedikt)


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.

von puffer (Gast)


Lesenswert?

na dann werd ich das mal testen, klingt gut.

von puffer (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von puffer (Gast)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von Peter (Gast)


Lesenswert?

Wie schnell kommen denn die 8-10 kByte an?

von Rex Gildo jr. (Gast)


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

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
Noch kein Account? Hier anmelden.