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?
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.
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.
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.
>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.
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
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?
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.
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.
@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.
>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.
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