mikrocontroller.net

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


Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Deramon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite im moment mit der Compactflashansteuerung von
http://home.t-online.de/home/holger.klabunde/avr/a...
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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/...) 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

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. :-) )

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.