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!!!
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?
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.
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.
Zur Not muss man eben SRAM bei Farnell etc kaufen, kostet dann eben zig Euro...
Nebenbei bemerkt: AVRs packen maximal 20MHz, sollten damit also 10MHz SPI-Takt schaffen (8 geht definitiv bei 16MHz). Damit brauchen Megabytes IMMER Sekunden!
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
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.
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!
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.
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
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.