Forum: Mikrocontroller und Digitale Elektronik FIFO mit ATmega8515


von Christian K. (christiankarle)


Lesenswert?

Hallo liebe Community,

ist es möglich einen FIFO Speicher in "Software" auf einem ATmega8515 @ 
20 MHz zu simulieren? Am Besten mit einer SD Karte. Für eine 
Schreibaktion (1 Byte) wären ca. 1us Zeit.

Was sagen die Profis dazu?

Mit freundlichen Grüßen,

Christian

von holger (Gast)


Lesenswert?

>ist es möglich einen FIFO Speicher in "Software" auf einem ATmega8515 @
>20 MHz zu simulieren?

Ja.

>Am Besten mit einer SD Karte. Für eine
>Schreibaktion (1 Byte) wären ca. 1us Zeit.

Da bist du mit einer SD Karte aber an der falschen Adresse.

von Falk B. (falk)


Lesenswert?

@ Christian Karle (christiankarle)

>ist es möglich einen FIFO Speicher in "Software" auf einem ATmega8515 @
>20 MHz zu simulieren? Am Besten mit einer SD Karte.

Sicher. Aber wie schnell soll dein FIFO sein?

> Für eine Schreibaktion (1 Byte) wären ca. 1us Zeit.

Das ist recht schnell. 1MB/s Datendurchsatz schaffst du mit dem AVR + 
SD-karte nicht. Bei meinen Experimenten bin ich auf bis zu 700kB/s beim 
reinen Lesezugriff gekommen.

Beitrag "Re: Geschwindigkeitsfrage AVR auf SD"

Dort ist schon ein FIFO im FatFs drin, nämlich 512 Byte.

von Christian K. (christiankarle)


Lesenswert?

> Da bist du mit einer SD Karte aber an der falschen Adresse.

Zu was würdest Du mir raten? Es handelt sich um größere Datenmengen... 
Im Extremfall um mehrere MB...
Die müssen iwie raus aus dem uC, dieser dient nur zur Kommunikation mit 
dem Bus und der Pufferung eines Paketes.

von Christian K. (christiankarle)


Lesenswert?

> Dort ist schon ein FIFO im FatFs drin, nämlich 512 Byte.

Kann ich den "frei" beschreiben?

von Amateur (Gast)


Lesenswert?

>Kann ich den "frei" beschreiben?

Das Schreiben "von der Seite" her wiederspricht aber dem FIFO-Konzept.

Ein FIFO ist nämlich ein ganz normaler Speicher mit einer 
Anfang/Ende-Verwaltung. Das Beschreiben, unter Umgehung der dafür 
vorgesehenen Routinen, bringt die Verwaltung durcheinander bzw. legt 
diese still.

von Christian K. (christiankarle)


Lesenswert?

Ok, einmal abgesehen vom FIFO, wie bekomme ich eine so enorme Datenmenge 
schnellstmöglich aus meinem ATmega auf ein anderes Speichermedium. Bzw. 
Welches externe Speichermedium ist schnell und groß genug?

von Christian K. (christiankarle)


Lesenswert?

Der FIFO wird "normal" (in Reihenfolge der Bytes) beschrieben, ein Byte 
kommt, das nächste rutscht hinterher etc...

von holger (Gast)


Lesenswert?

>Zu was würdest Du mir raten? Es handelt sich um größere Datenmengen...
>Im Extremfall um mehrere MB...

Dann ist der kleine ATMega evtl. der falsche uC.

>Die müssen iwie raus aus dem uC, dieser dient nur zur Kommunikation mit
>dem Bus und der Pufferung eines Paketes.

Worum geht es eigentlich?

von Falk B. (falk)


Lesenswert?

@ Christian Karle (christiankarle)

>Ok, einmal abgesehen vom FIFO, wie bekomme ich eine so enorme Datenmenge
>schnellstmöglich aus meinem ATmega auf ein anderes Speichermedium.

Auf welchem sind die Daten denn jetzt? 1MB/s kontinuierlicher 
Datendurchsatz ist mit einem AVR IMO nicht drin. Ich würde mal 
bestenfalls mit 250kB/s rechnen (Die Daten müssen REIN und wieder RAUS). 
ATXMega könnte mit DMA und höherem Takt etwas besser sein, aber 1MB/s 
halte ich für unrealistisch.

>Welches externe Speichermedium ist schnell und groß genug?

SD-Karten schaffen 1MB/s relativ leicht, selbst im langsamen 1 Bit SPI 
Modus. Aber der Prozessor muss das mitmachen. Nimm lieber einen 
schnellen ARM mit ausreichend RAM und SDIO Interface zur SD-Karte, damit 
geht das relativ sicher und einfach.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Christian Karle schrieb:
> ist es möglich einen FIFO Speicher in "Software" auf einem ATmega8515 @
> 20 MHz zu simulieren? Am Besten mit einer SD Karte. Für eine

 Wenn du es Byte für Byte beschreiben willst, ist SD nicht die richtige
 Wahl. Überhaupt ist M8515 damit überfördert, ob einzelne Bytes oder
 Buffer. Bei 20MHz kommst du höchstens auf 10MHz SPI-Geschwindigkeit,
 das sind 800nS pro Byte, dazu kommen noch die Adressen und Commands -
 - no way dass M8535 das schafft. Selbst mit XMEGA ist das kaum zu
 schaffen, den die Daten müssen erst empfangen werden, das ist nochmal
 teilen durch zwei (mindestens)...

 P.S.
 Soviel ich weiss,gibts M8515 nur bis 16MHz. RAM ist 512Bytes, das ist
 sowieso zu wenig...

Falk Brunner schrieb:
> Nimm lieber einen
> schnellen ARM mit ausreichend RAM und SDIO Interface zur SD-Karte, damit
> geht das relativ sicher und einfach.

 Genau.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Falk Brunner schrieb:

> Auf welchem sind die Daten denn jetzt? 1MB/s kontinuierlicher
> Datendurchsatz ist mit einem AVR IMO nicht drin.

Natürlich ist das drin. Allerdings nicht auf eine SD-Karte.

> Ich würde mal
> bestenfalls mit 250kB/s rechnen (Die Daten müssen REIN und wieder RAUS).

Nun ja, es kommt halt darauf an, wie sie rein- und rauskommen. Wenn z.B. 
die Quelle eine simple Abtastung eines Ports mit Vmax ist (viel was 
anderes kann es ja kaum sein, weil die sonstigen Schnittstellen allesamt 
schon von Haus aus kein MByte/s schaffen), dann kostet das Lesen genau 
einen Takt.

Wenn man das dann auf einen 8Bit-Port mit Strobe/Ack-Signalspiel 
rausschreibt, dann ergibt sich folgende Schleife:

.equ ctrl_idle=1<<strobe
.equ ctrl_data=0

 ldi regidle,1<<strobe
 ldi regdata,0

loop:
 in tmp,data_in_port   ; 1   1
 sbic ctrl_pin,ack     ; 2   1
 rjmp loop             ;     2
 out ctrl_port,regidle ; 1
 out data_out_port     ; 1
 out ctrl_port,regdata ; 1
 rjmp loop             ; 2
                       ;--
                       ; 8

Macht bei 20MHz Takt einen Durchsatz von 2,5MByte/s, wenn er nie auf den 
Abnehmer der Daten warten muß. Und wenn er in jedem Zyklus einmal durch 
die Warteschleife muß, sind es immer noch 1,67MBytes/s. Aber schon dann 
wäre ja der Abnehmer der Daten der beschränkende Faktor und nicht der 
AVR.

von Falk B. (falk)


Lesenswert?

@ c-hater (Gast)

Unser Oberschlaumeier mal wieder am Mikrophon.

>> Auf welchem sind die Daten denn jetzt? 1MB/s kontinuierlicher
>> Datendurchsatz ist mit einem AVR IMO nicht drin.

>Natürlich ist das drin. Allerdings nicht auf eine SD-Karte.

Aber darum ging es. Und auch andere Medien und IO-Modi sind da nicht 
viel besser im REALEN Datendurchsatz.

>Nun ja, es kommt halt darauf an, wie sie rein- und rauskommen. Wenn z.B.
>die Quelle eine simple Abtastung eines Ports mit Vmax ist (viel was
>anderes kann es ja kaum sein, weil die sonstigen Schnittstellen allesamt
>schon von Haus aus kein MByte/s schaffen), dann kostet das Lesen genau
>einen Takt.

Das reich aber nicht.

>Wenn man das dann auf einen 8Bit-Port mit Strobe/Ack-Signalspiel
>rausschreibt, dann ergibt sich folgende Schleife:

>Macht bei 20MHz Takt einen Durchsatz von 2,5MByte/s, wenn er nie auf den
>Abnehmer der Daten warten muß. Und wenn er in jedem Zyklus einmal durch
>die Warteschleife muß, sind es immer noch 1,67MBytes/s. Aber schon dann
>wäre ja der Abnehmer der Daten der beschränkende Faktor und nicht der
>AVR.

Herzlichen Glückwunsch zum Nachbaeu eines 8 Bit Registers ind Software! 
Eine äußerst sinnvolle UND performante Applikation!

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.