Forum: Mikrocontroller und Digitale Elektronik Bufferadressierung (Data Flash)


von Steff (Gast)


Lesenswert?

Hallo,
bin es mal wieder.
Bin immer noch dabei meine Daten im Flash abzulegen.
Benutze das data Flash AT45DB081D.
Hätte dazu nochmal 2 Fragen.
Weiß jemand ob man dem Buffer sagen muss das er voll ist und seine Daten 
in eine page schreiben soll, oder weiß der Buffer selber wann er 
komplett voll ist und schickt dann mit dem entsprechenden opcode die 
Daten in eine page? Was mach ich denn mit dem startbyte das für den 
Buffer bestimmt ist?
Werden die Daten in den Buffer wenn er entleert wurde immer vom 
startbyte 0 beschrieben und merkt sich der Buffer den davorigen Stand 
und schreibt die Daten ab den davorigen noch leeren restlichen bytes?

Um immer den aktuellen Stand der beschriebenen pages zu bekommen, also 
bis zu welcher page schon Daten geschrieben wurden, muss ich irgendwie 
einen Zeiger mithinein legen der bei jeder Beschreibung einer page 
hochzählt um nach einen Spannungsausfall immer noch den aktuellen Stand 
zu haben. Wie würdest ihr das realisieren?

Kann mir da jemand weiterhelfen?Würd mich freuen.

Grüße

von Michael U. (amiga)


Lesenswert?

Hallo,

Steff wrote:
> Benutze das data Flash AT45DB081D.
> Hätte dazu nochmal 2 Fragen.
> Weiß jemand ob man dem Buffer sagen muss das er voll ist und seine Daten
> in eine page schreiben soll, oder weiß der Buffer selber wann er
> komplett voll ist und schickt dann mit dem entsprechenden opcode die
> Daten in eine page? Was mach ich denn mit dem startbyte das für den
> Buffer bestimmt ist?
Der Buffer ist ein Ram im Baustein, der weiß nichts und kann nichts...
Du mußt im Programm per Befehl anordnen, daß der Bufferinhalt in die 
Flash-Page geschrieben wird. Ob der dabei voll oder halbvoll oder mit 
Zufallsdaten gefüööt ist, ist dem Kommando völlig egal.
Das kopiert einfach den kompletten Inhalt.

> Werden die Daten in den Buffer wenn er entleert wurde immer vom
> startbyte 0 beschrieben und merkt sich der Buffer den davorigen Stand
> und schreibt die Daten ab den davorigen noch leeren restlichen bytes?
Der Buffer wird nicht entleert, der bleibt, wie er ist.
Du legst beim Schreiben in den Buffer die Adresse fest, wohin 
geschrieben wird..
>
> Um immer den aktuellen Stand der beschriebenen pages zu bekommen, also
> bis zu welcher page schon Daten geschrieben wurden, muss ich irgendwie
> einen Zeiger mithinein legen der bei jeder Beschreibung einer page
> hochzählt um nach einen Spannungsausfall immer noch den aktuellen Stand
> zu haben. Wie würdest ihr das realisieren?

Auch das ist Deinem Geschmack überlassen. Hängt auch davon ab, wie oft 
Du schreibst (Lebensdauer des Flash).
Ich habe die erste Page für sowas reserviert, schreibe aber auch sehr 
selten den Zustand. Man kann sich das ja je nach Verwendung an vielen 
Stellen merken, in Prozessorregistern, im Ram des Prozessors, im EEPROM 
des Prozessors und eben auch im Flash selbst.

PS: soooo schlecht ist das Datenblatt der AT45DBxxxD-Serie eigentlich 
doch garnicht?

Gruß aus Berlin
Michael

von Oliver (Gast)


Lesenswert?

>Weiß jemand ob man dem Buffer sagen muss das er voll ist und seine Daten
>in eine page schreiben soll, oder weiß der Buffer selber wann er
>komplett voll ist und schickt dann mit dem entsprechenden opcode die
>Daten in eine page?

Radio Eriwan - es kommt darauf an, welchen Befehl du nutzt. Auch wenn 
der Tip schon uralt ist: Lies das Datenblatt.

Oliver

von Steff (Gast)


Lesenswert?

Schreib dann einfach mit dem opcode (ox84) die daten in den Buffer. Wenn 
ich dann entscheide das die daten in eine page geschreiben werden 
sollen, muss ich es dem buffer also sagen und kopiert die Daten in die 
page die ich haben will, oder?
Wie bekomme ich dann die nächsten daten in den Buffer, muss man den 
zuerst löschen?

Hast du das so gemeint, das du einfach jedesmal wenn du den Bufferinhalt 
in eine page schreibst immer den "pagezähler" z.B. in page 1 um eins 
hochzählst? oder wie hast du das gemeint?

von Steff (Gast)


Lesenswert?

Im Datenblatt steht schon was drinn, aber nicht so genau was ich mit dem 
startbyte und genaueres über den Buffer

von Steff (Gast)


Lesenswert?

>Ich habe die erste Page für sowas reserviert, schreibe aber auch sehr
>selten den Zustand.

Wie gehst du denn da vor wenn eine page als speicher für den counter 
nimmst? dann muss man ja bei jeder pagebeschreibung immer nochmal die 
page mit dem counter auslesen, um 1 erhöhen und dann wieder in die page 
schreiben, oder wie hast du das gemeint?
Bei mir geht es halt darum das man auch noch nach einem kompletten 
Spannungsausfall wissen muss wo sich der aktuelle Stand im flash 
befindet, also wieviel schon reingeschreiben wurde.

von holger (Gast)


Lesenswert?

@Steff

Du geisterst hier schon seit einiger Zeit rum.
Tut mir leid, aber du verstehst einfach nichts.
Dein Problem sind die Pages. Alles was du dazu wissen
musst steht im Datenblatt. Wenn du das nicht verstehst
dann lass es einfach sein. Das ist zu viel für dich.

>Bei mir geht es halt darum das man auch noch nach einem kompletten
>Spannungsausfall wissen muss wo sich der aktuelle Stand im flash
>befindet, also wieviel schon reingeschreiben wurde.

Sowas hat schon erfahrene Programmierer in den Wahnsinn getrieben.

von Steff (Gast)


Lesenswert?

Das mit den pages hab ich ja soweit schon, nur das mit dem sogenannten 
Ringbuffer weiß ich nicht wie man dabei vorgeht.Also die Verwaltung der 
page ist das große Problem.
Ob sich der Buffer nachdem man die Daten in eine page schreibt wieder 
auf das startbyte 0 setzt oder nicht steht im manual nicht drinn.
Kannst mir da nicht weiterhelfen?

von holger (Gast)


Lesenswert?

>Ob sich der Buffer nachdem man die Daten in eine page schreibt wieder
>auf das startbyte 0 setzt oder nicht steht im manual nicht drinn.
>Kannst mir da nicht weiterhelfen?

Da es nicht drin steht ist es wohl nicht der Fall.
Du musst dich selbst darum kümmern in welche Page du schreibst.

von Steff (Gast)


Lesenswert?

Weisst du wie das mit den beiden Buffern abläuft?

Würde nämlich meine ganzen Daten über den Buffer1 laufen lassen und den 
pagezähler, den ich in page1 mach, über den Buffer 2. Oder hättest du da 
eine geschicktere Lösung? wäre halt arg viel code.

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.