Forum: Mikrocontroller und Digitale Elektronik Speicher > 2 MBit an AVR Zeitprobleme


von Karl (Gast)


Lesenswert?

Hi

fuer meine Diplomarbeit muss ich an einen AVR Speicher dranklemmen.
Das Problem ist das da in 30 sec ca 2 MBIT an Daten anfallen.

Es muessen Daten gelesen werden (Tsample = 1ms).
Die Datenmenge pro sample entspricht 8x8 Bit = 64 Bit.

Ich suche nun also einen Speicher in dem ich in ca 500us 8 Byte
reinschreiben kann.

Das Problem ist, das ich einen Mega 32 nehmen will und somit nicht
allzuviele Pins fuer irgendwelche Adressleitungen verbraten will / kann
/ darf.
Paralleler Speicher ist also quasi raus.

Ich hab mir schon mal die Dataflash Dinger von Atmel angeschaut,
aber so wie ich das Datenblatt verstehe kann man da immer nur
Seitenweise schreiben und das dauert zu lange.
I2C scheint auch zu langsam zu sein.

Wie schauts mit Compact Flash oder besser MMC / SD?

Kann man die (MMC / SD) Byteweise (oder wenn mehrere Bytes zumindest
schnell genug) programmieren?
Filesystem ist nicht noetig.

Hat da irgendwer irgendwelche Ideen? Wenn ja waere ich Euch
sehr dankbar.

Gruss

  Karl

von Deramon (Gast)


Lesenswert?

Ich arbeite im moment mit der Compactflashansteuerung von
http://home.t-online.de/home/holger.klabunde/avr/avrboard.htm
Lesen kann ich ohne probleme mit (min.) 320kbit/s und schreiben sollte
mit dem Script in ähnlicher Geschwindigkeit gehen(laut info der
Website). Ein Bsp. Code für den Mega32 mit Fatfilesystem gibts auf der
Seite zum Download.

von Matthias (Gast)


Lesenswert?

Hi

Seiten hast du bei dieser Art Speicher (Flash ab einer gewissen Größe,
Speicherkarten sowieso) immer. Aber das ist ja eigentlich nicht das
Problem. Du mußt ja nur auf deine 64kBit/s Durchsatz kommen.

Das sollte mit einem Dataflash kein größeres Problem sein. Das Ding
(http://www.atmel.com/dyn/resources/prod_documents/doc3443.pdf) hat 2
Puffer a 264 Byte.

Du schreibst in den ersten Puffer solange deine Samples rein bis du bei
264 Byte angekommen bist (also 33 Samples bzw. ms lang). Dann setzt du
einen Schreibbefehl an das Dataflash ab. Jetzt beginnt das Dataflash zu
schreiben. Während das Dataflash schreibt kannst du aber den zweiten
Puffer bereits befüllen. Das Dataflash braucht etwa 20ms bis eine Seite
beschrieben ist. Du hast aber 33ms bis dein Puffer voll ist. Also genug
Zeit.

Einziges Problem könnten die Schreibzyklen werden. Wenn du da deutlich
über 10k kommst solltest du eher in Richtung SRAM denken. Da gibts aber
AFAIK nichts serielles. Also entweder größerer Controller oder ein paar
Schieberegister. Die Datenrate ist ja nicht wirklich hoch.

Matthias

von Karl (Gast)


Lesenswert?

Hi

und danke erstmal.
Heisst das das ich die Buffer doch Byteweise programmieren kann?
Das hiesse ich kann 8 Byte pro 500 us reinschreiben, warten bis
die Seite voll ist und das ding dann dazu bringen das zu uebertragen
und so lange den anderen puffer fuettern.
Kommt das von der Datenrate hin?
So weit ich das Datenblatt verstanden habe ist der kram zu langsam.
Denke ich da falsch?
Ich les das aber nochmal genau nach.

Soweit schon mal danke

 Tobi

von Matthias (Gast)


Lesenswert?

Hi

was jetzt. Alle 500µs 8 Byte oder alle 1ms 8 Byte. Wenns nur alle ms 8
Byte sind reicht die Datenrate.

Matthias

von ERDI - Soft (Gast)


Lesenswert?

Sollte ohne Probleme mit einem Dataflash von Atmel machbar sein. Damit
kannst du, wenn der SPI mit 4MHz läuft, deine kompletten 2Mbit in 500µs
schreiben. (Da ist natürlich kein Overhead für Adressierung und so
weiter mit eingerechnet.)
Und da man den DataFlash mit bis zu 20MHz betreiben kann, dürfte da
also kein Engpass entstehen.
Und da der Dataflash ja zwei Zwischenspeicher hat, schreibst du einen
voll, gibts das Kommando, den Zwischenspeicher in den Flash zu
schreiben, und währenddessen kannst du schon den zweiten
Zwischenspeicher füllen. Dabei interessiert es nicht, ob nur alle 2
Sekunden 1 Byte kommt oder alle µs.

Du solltest dir also eher Gedanken machen, ob dein µController und dein
Programm die Verarbeitungsgeschwindigkeit hinbekommen. :-)

(Ich hoffe, ich hab mich nicht verrechnet.)

von Matthias (Gast)


Lesenswert?

Hi

@ERDI
ganz so einfach ist es dann doch nicht. Das Dataflash braucht 20ms um
eine Seite mit 264 Byte zu beschreiben. Macht einen maximalen
Datendurchsatz von 13200 Byte/s. Karl benötigt etwa 8000 Byte/s laut
seinen ersten Posting. Es ist also noch genug Luft. Laut seinem zweiten
Posting braucht er aber 16000 Byte/s. Da reicht der Schreibdurchsatz von
einem Dataflash schon nicht mehr.

Matthias

von ERDI - Soft (Gast)


Lesenswert?

Und dann das ganze mal 2 ergibt 26400 Byte/s, da man ja während der
erste Puffer ins Flash geschrieben wird den zweiten Puffer schon
beschreiben kann.
Hab mir die Schreibzeiten gar nicht angeschaut, sondern bin nur nach
der SPI-Geschwindigkeit gegangen. Aber Recht hast du schon. Trotzdem
sollte ein Dataflash reichen.
Und ein 16MBit DataFlash hat ja nen doppelt so großen Puffer. Das
reicht dann auf jeden Fall. (Kostet ja fast das gleiche.)

(Korrigier mich, falls ich wieder etwas falsch liege. Mir schwirrt
leider noch der Kopf von den heutigen Vorlesungen. :-) )

von Matthias (Gast)


Lesenswert?

Hi

du kannst nur einen Schreibbefehl absetzen und mußt dann warten bis
dieser fertig ist um einen neuen abzusetzen. Während dieser Zeit kannst
du zwar schon den zweiten Puffer füllen aber diesen nicht schreiben. Die
Schreibrate ins Flash erhöt sich dadurch nicht. Den einzigen Vorteil den
du dabei hast ist das die Transferzeiten über den SPI fast nicht ins
Gewicht fallen.

Man kann natürlich den größeren Chip nehmen und damit die Transferrate
verdoppeln. Allerdings wird dann das Gehäuse auch größer.

Matthias

von ERDI - Soft (Gast)


Lesenswert?

Nö, Gehäuse bleibt immer gleich. Ist ja seriell. (Immer SO28 oder
TSOP28. Die anderen sind eh fast nicht zu bekommen.)

Hm, stimmt. Hab mal wieder nicht richtig mitgedacht.

Die Frage ist natürlich auch, ob da jede 30 Sekunden 2MBit anfallen
(siehe ersten Post) oder ob das nur ein einmaliges Event ist.

von Matthias (Gast)


Lesenswert?

Hi

Also das 4MBit-Dataflash gibts im aufgeblasenen (weil etwas breiterem)
SO8.

Matthias

von Karl (Gast)


Lesenswert?

Hi

danke erstmal.
Um das mit dem Datendurchsatz zu erklaeren.
Ich muss alle ms 8 Byte daten wegschreiben.
Aber in der ms muessen die Daten auch noch
aus dem AD Wandler geholt werden.
Deshalb ging ich mal so spontan von 500us Schreibzeit aus.
Den rest der Zeit kann man ja dann auf das Sammeln der
Daten verschwenden.

Momentan ist es so geplant das ueber eine dauer von 30s
jede ms 8 Byte daten gesammelt und weggeschrieben werden
muessen.
Also erstmal nur ein einmaliges Ereignis.
Sollte es irgendwann mal noetig werden das es mehrere
30 Sec Messreihen geben sollte wird zwischen diesen
definitiv genug zeit sein um irgendwelche Chips umzuschalten
etc.


Gruss

 Karl

von Matthias (Gast)


Lesenswert?

Hi

dann passt doch das Dataflash ganz ordentlich. Es hat zwar 20ms
Schreibzeit aber kann auch 33ms puffern.

Matthias

von Karl (Gast)


Lesenswert?

Hi

also ich hab da noch mal bisschen gelesen - klingt gut.
Danke soweit.
Das Dumme ist momentan das ich irgendwann (schon bestimmt ein halbes
Jahr her)
mal über einen Code für Codevision gestolpert bin mit dem man den
Dataflash direkt ansprechen konnte.
Das Problem ist ich hab vergessen wo es das gab.
Sollte jemand zufällig wissen wo es das gab wäre ich für den Link ewig
dankbar.

Gruss

  Karl

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.