Mahlzeit! :) Ich beschäftige mich gerade erstmalig mit einem Flash Speicher (SST26VF016B). Kommuniziere mit dem Ding über SPI... soweit, so gut! Jetzt Frage ich mich, kann ich überhaupt einzelne Adressen beschreiben? Oder muss ich immer einen kompletten Sektor/Block füllen? Außerdem verstehe ich nicht, wie und wo ich überhaupt speichern darf. Im Datenblatt finde ich nichts zur Adressierung...?
Steht alles im DB..... Adressierung ist Byte weiße. Du kannst 1 bis max 256 Bytes in einem rutsch schreiben aber nur bis zum 256 Byte Page boundary sonst gibt es einen wrap arround zum Page Anfang. Einfach etwas überschreiben geht nicht, halt flash typisch, also muss zuvor gelöscht werden. Kleinste erase Größe ist ein. 4k Sektor. Der Chip ist bei Power Up global schreib geschützt, also muss zuvor die Blockprotection gelockert werden, mit z.b. dem global unprotect cmd ist er dann komplett beschreibbar.. mit den NvLock Bits kann die Protection nach Power Up blockweiße auch abgeschaltet werden (einmalig). Vor jedem schreiben und löschen ist das write enable cmd nötig. Lesen geht im burst wenn nötig von Anfang bis Ende.... Dies mal grob zur essentiellen Nutzung, weitere Möglichkeiten und Feinheiten sind alle im DB dokumentiert... Gruß Florian werden.
Danke soweit. Ich wundere mich nur, warum es 8kB, 32kB und 64kB Blöcke gibt. Ich hatte einfach nur sorge, dass vielleicht in den ersten Blöcken irgendwelche Statusregister liegen könnten. Wieso legt man überhaupt unterschiedlich große Blöcke an?
Die 8KByte und 32KByte Blöcke bieten dir Bereiche mit einer feineren granulrität. Die 8KByte Blöcke können zudem auch zusätzlich gegen lesen geschützt werde. Diese spezielle Aufteilung gibt es nur in den ersten und letzten 64KByte. Den gesamten Bereich (vgl. Memmap) kannst du für deine Daten nutzen, da überschreibst du höchstens deine eigenen Daten... Gruß Florian
Hallo noch mal! Es geht noch immer um meinen SST26VF016B Flash Speicher. Kurz gesagt; die Schreibgeschwindigkeit ist zu langsam! In meinem Fall müsste ich alle 10us 3-4 Bytes wegschreiben können und das in Summe von etwa 100kB. Die 256Byte Puffer reichen also nicht aus. Der oben genannte Chip benötigt für das speichern eines Bytes etwas über 50us. Volle 256 Byte sind nach rund 1100us gespeichert... das sind nicht mal 0,25MB/s für die reine Speicherzeit??? Ich hätte wirklich nicht gedacht, dass die Dinger so langsam sind. Was kann man machen? Mehrere Chips seriell beschreiben? Oder gibt es schnellere Flash Speicher? Habe ich vielleicht etwas übersehen und der kleine Chip könnte doch schneller arbeiten?
Nutzt Du denn quad-spi mit 104Mhz? Laut Datenblatt soll sich eine Page (256 Bytes) in 1.5ms beschreiben lassen. Sind dann wohl ca. 170kB/s.
:
Bearbeitet durch User
nein, normale SPI. Mit QSPI wäre die übertragung etwas schneller, aber damit gewinne ich im Programm kein bisschen Zeit. Die Speicherzeit bleibt dadurch unverändert.
Pete K. schrieb: > Nutzt Du denn quad-spi mit 104Mhz? Braucht er nicht. > Laut Datenblatt soll sich eine Page > (256 Bytes) in 1.5ms beschreiben lassen. Ja. Er hat sogar "nur" 1.1ms gemessen. Sein Exemplar ist schneller als der Hersteller garantiert. Trotzdem bleibt die Tatsache, daß er seine Anforderung von GG schrieb: > In meinem Fall müsste ich alle 10us 3-4 Bytes wegschreiben können mit diesem Flash nicht schafft. Auch wenn er immer 256 Bytes im RAM puffert und dann als eine Page schreibt, braucht er im Schnitt 4,3µs pro Byte. Für 3 Byte dann knapp 13µs und für 4 Byte gar 17.2µs. Und das nur unter der Bedingung, daß das Flash schon gelöscht ist, zwischendrin also keine Löschoperationen anfallen. GG schrieb: > Was kann man machen? Mehrere Chips seriell beschreiben? Du meinst bestimmt: parallel beschreiben. Ja, könnte man machen. > Oder gibt es schnellere Flash Speicher? Gibt es sicher auch. > Habe ich vielleicht etwas übersehen und der > kleine Chip könnte doch schneller arbeiten? Der ist schon (etwas) schneller, als er sein müßte. Wenn deine Daten-Bursts immer nur 100KB groß sind und dazwischen genug Leerlaufzeit, dann kannst du natürlich die 100KB erstmal im RAM puffern und dann langsamer rausschreiben. Dein Flash ist ja nur Faktor 2 langsamer als deine Daten reinkommen. Du brauchst also im Idealfall nur 50KB RAM-Puffer.
Der Winbond W25Q32FV hat eine typische page-write von 0.7ms, also etwa doppelt so schnell. Der W25N01GV braucht sogar nur 250us Tpp.
:
Bearbeitet durch User
Darf man Fragen was dein Vorhaben ist.. Ich meine wir reden von einem 2MBYTE Flash, bei deiner anvisierten Schreibrate wäre das Ding in 5 bis 6 Sekunden voll bei kontinuierlichen Transfer und dann? Ansonsten ja Busy Zeiten nach dem schreiben von 256bytes sind bei mir im Schnitt auch knapp unter 1,1ms. Die tatsächliche Zeit hängt aber auch von den Daten ab, mit komplett 0xff Byte Pattern oder 0x00 Byte Pattern hat man Grenzen in denen man sich reell dazwischen befindet. Er ist bei den Wald und Wiesen SPI Flash's mit 256b page, 4k Sektor und 64k Block Organisation nicht der schnellste beim Schreiben aber hat dafür aber recht fixe Erase Zeiten.
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.