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
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.
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
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
Hi was jetzt. Alle 500µs 8 Byte oder alle 1ms 8 Byte. Wenns nur alle ms 8 Byte sind reicht die Datenrate. Matthias
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.)
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
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. :-) )
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
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.
Hi Also das 4MBit-Dataflash gibts im aufgeblasenen (weil etwas breiterem) SO8. Matthias
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
Hi dann passt doch das Dataflash ganz ordentlich. Es hat zwar 20ms Schreibzeit aber kann auch 33ms puffern. Matthias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.