Forum: Mikrocontroller und Digitale Elektronik 4MB Daten auslesen mit Atmega8 so schnell wie möglich


von Patt :. (patt)


Lesenswert?

Hallo,


ich suche nen Speicher für nen Atmega8 ( Eeprom /..... ) in dem ich
ca 4MB Daten speichern kann. Bis jetzt hab ich nur mit TWI gearbeitet.
Das auslesen von den 4MB Daten aus nem TWI-EEprom dauert selbst bei 
400Khz
sehr lange.

Der eigentlich Sinn von dem ganzen soll ein Programmiergerät
für SPI-Flashes werden. Die Daten werden einmalig über RS232 in den 
Speicher geladen. Dann soll auf "Knopfdruck" das angeschlossene 
SPI-Flash mit den
Daten(im EEprom/....) programmiert werden.

Hat jemand nen Tip für nen sehr schnellen Speicher mit 4MB Speicher
oder auch für andere Lösungen/Vorschläge bin ich offen.

Danke für eure Hilfe!!!

von David .. (volatile)


Lesenswert?

Flash und RAM? Der AVR laedt das ganze einmal ins Ram und kann dann 
raushauen was nur geht ;)
RAM finden man billig in alten Geraeten, in HDDs sind zB einige 
Megabytes RAM verbaut, vl kann man die ansteuern?

von Dussel (Gast)


Lesenswert?

David ... schrieb:
> in HDDs sind zB einige
> Megabytes RAM verbaut, vl kann man die ansteuern?
Das ist fast immer DRAM, da muss man dann selbst Refresh-Zyklen 
generieren.

von PC-Bastler (Gast)


Lesenswert?

Dussel schrieb:
> Das ist fast immer DRAM, da muss man dann selbst Refresh-Zyklen
> generieren.

Solange man immer fleißig am Lesen ist, sollten sich das mit den 
zusätzliche Refresh-Zyklen erübrigen.

von David .. (volatile)


Lesenswert?

Zur Not muss man eben SRAM bei Farnell etc kaufen, kostet dann eben zig 
Euro...

von David .. (volatile)


Lesenswert?

Nebenbei bemerkt: AVRs packen maximal 20MHz, sollten damit also 10MHz 
SPI-Takt schaffen (8 geht definitiv bei 16MHz).
Damit brauchen Megabytes IMMER Sekunden!

von NopNop (Gast)


Lesenswert?

Jupp...der Atmega8 ist definitiv die Engstelle da eben nur CLK/2 für den 
SPI geht.

Auch interessant:
http://www.mikrocontroller.net/articles/Speicher

von Guest (Gast)


Lesenswert?

Ich bezweifle stark dass RAM am Atmega8 sonderlich schnell ist. 
Immerhin muss er den wsl. sogar über Schieberegister ansteuern. Rechne 
doch mal durch obs nicht schneller ist einen weiteren SPI 
Flash/SD/sonstwas an den AVR zu machen und den per CE Pin 
an/auszuschalten.
Ich meine, der AVR hat 1kB SRAM, d.h. du gleich immer größere Blöcke auf 
einmal lesen/schreiben.
Und wenns wirklich noch schneller sein muss bist du eben mit deinem AVR 
am falschen Ende, dann nutze doch einen ARM oder so, da macht dann auch 
ein SRAM Sinn und du schaffst auch gleich noch viel höhere SPI 
Frequenzen.
Aber lass das mal rechnen, wenn du 2 SPI Devices nutzt, 8MHz SPI Takt, 
4MByte Daten. Das heißt du kriegst pro Sekunde knapp 1MByte über den 
SPI, musst aber 8MByte übertragen, brauchst also 8 Sekunden. Da du das 
ganze noch zwischenspeichern musst und den Flashes Kommandos geben und 
alles kannst du mit vllt 20 Sekunden für 4MByte rechnen wenns gut läuft, 
wohl eher mehr.

von David .. (volatile)


Lesenswert?

Vielleicht sollte man das andersrum angehen: Wie schnell kann der 
SPI-Flash beschrieben werden, welcher Prozessor schafft das und mit 
welchem Speicher kann man ihn dafuer ausstatten?
Atmels Dataflash schaffen bis zu 100MHz!

von NopNop (Gast)


Lesenswert?

CPLD/FPGA?

von (prx) A. K. (prx)


Lesenswert?

Idee: Zweites SPI Dataflash als Speicher (Master) verwenden und direkt 
koppeln um zeitraubenden indirekten Transfer zu vermeiden.

Beide SPI-Flashes hängen am gleichen SPI, aber teilweise mit Gates bzw. 
Muxer an den CLK/MOSI/MISO Pins versehen:
- Master-Read starten bis die Datenphase kommt.
- Master-CLK/MISO abkoppeln, Master-CS bleibt aktiv.
- Slave-Write starten bis die Datenphase kommt.
- Slave-MOSI auf Master-MISO schalten.
- Master-CLK wieder ankoppeln.
Nun muss der Controller nur noch brav durchtakten und schiebt damit die 
Master-Daten ohne Umweg direkt in den Slave.

von David .. (volatile)


Lesenswert?

A. K. schrieb:
> Idee: Zweites SPI Dataflash als Speicher (Master) verwenden und direkt
> koppeln um zeitraubenden indirekten Transfer zu vermeiden.
>
> Beide SPI-Flashes hängen am gleichen SPI, aber teilweise mit Gates bzw.
> Muxer an den CLK/MOSI/MISO Pins versehen:
> - Master-Read starten bis die Datenphase kommt.
> - Master-CLK/MISO abkoppeln, Master-CS bleibt aktiv.
> - Slave-Write starten bis die Datenphase kommt.
> - Slave-MOSI auf Master-MISO schalten.
> - Master-CLK wieder ankoppeln.
> Nun muss der Controller nur noch brav durchtakten und schiebt damit die
> Master-Daten ohne Umweg direkt in den Slave.

Auch das ist mit einem AVR so flink wie in Wackelpudding

von (prx) A. K. (prx)


Lesenswert?

David ... schrieb:

> Auch das ist mit einem AVR so flink wie in Wackelpudding

Klar, aber ist wohl das Maximum, was sich damit rausholen lässt. Und ist 
in Relation zur ursprünglichen TWI-Lösung ungefähr 25mal schneller

von Guest (Gast)


Lesenswert?

A. K. schrieb:
>> Auch das ist mit einem AVR so flink wie in Wackelpudding
>
> Klar, aber ist wohl das Maximum, was sich damit rausholen lässt.

Na dann lieber das ganze durch nen kleinen CPLD, der schafft dann 
wenigstens nen höheren Takt und man spart sich externe Bauteile ala MUX.

von Patt :. (patt)


Lesenswert?

Hallo,


Danke für die vielen Antworten und Anregungen.
Soviel Erfahrung wie ich mit dem SPI-bus habe ( gar keine :-( )
Werd ich das ganze mal mit 2 SPI-Flashes versuchen.
Aber mit dem Atmega8 dazwischen mit lesen und dann schreiben.
( War schon am überlegen ob ich das ganze mit twi-EEproms mache )
Mir würde zwar die Lösung mit dem direkt lesen und schreiben von einem
zum anderen sehr gut gefallen. Da aber meine SPI-Erfahrungen nicht so
gut sind, werd ich mir das mal aufheben.(Spielraum für Verbesserungen 
;-) )

Kennt jemand vielleicht ne gute Erklärung / Beschreibung zum SPI-Bus.
Vielleicht in Verbindung mit nem Atmega8 und Assembler????
Die Beschreibungen in den Datenblättern ist für mich nicht so gut.
Falls da jemand was hätte!

Aber so was ich bis jetzt gelesen habe über die Schreibgeschwindigkeiten
von solchen Flashes wird das ganze nicht in 2 Sekunden ablaufen, egal
wie schnell man die Daten lesen/zur Verfügung hat. Na ich werd es sehen.
Ich kann aber an diesem Teil immer nur weiter machen wenn ich Zeit habe.


Gruß patt

von NopNop (Gast)


Lesenswert?

Patt :-) schrieb:
> War schon am überlegen ob ich das ganze mit twi-EEproms mache

Auf keinen fall...mit SPI solltest Du um den Faktor 10 schneller sein.

Patt :-) schrieb:
> Kennt jemand vielleicht ne gute Erklärung / Beschreibung zum SPI-Bus.

Guugel liefert da so einiges:
http://de.wikipedia.org/wiki/Serial_Peripheral_Interface
http://www.uni-koblenz.de/~physik/informatik/MCU/SPI.pdf

Bischen Beispielcode für Schieberegister und SPI in ASS:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

Ansonsten gibt es hier im Forum tonnenweise Code der das SPI-Interface 
nutzt (z.B. SD-Karte, anderer ext. Speicher, Sensoren, usw...)

Grüße

von Patt :. (patt)


Lesenswert?

Hallo,

Danke.

<Auf keinen fall...mit SPI solltest Du um den Faktor 10 schneller sein.
Da bin ich mir nicht so sicher. Das SPI-Flash benötigt zum schreiben
eine gewisse Zeit. In dieser Zeit könnte man ohne Probleme die nächsten 
256 Byte aus dem EEprom lesen und wenn das SPI-Flash fertig ist mit dem 
alten Schreibvorgang die neuen Daten schreiben. Da schlägt sich negativ 
auf
den SPI-Geschwindigkeitsvorteil aus. Abgesehen davon werds ich doch mit 
dem 2.Flash machen. Hat doch ein paar Vorteile ( will ich ja gar nicht 
bestreiten ;-) ) Ich brauch ja nur das Orginal-Flash nehmen und schon 
haben sich ein paar Probleme in Rauch aufgelöst. ( Speicherplatz,... )

Naja jetzt werd ich dann wohl mal anfangen müssen.
;-)
Komme aber nicht immer dazu. Leider sind ein paar andere Sachen 
dringender.
--> Wird ein bisschen Zeit benötigen.


Gruß patt

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.