www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bufferadressierung (Data Flash)


Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steff (Gast)
Datum:

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

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.