mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dataflash - byte address reprogrammieren geht nicht


Autor: Tobi A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich hab ein problem

ich schreibe mittels mega32 was in einen atmel dataflash.

PORTB.2=1;
delay_ms(1);
PORTB.2=0;
spi(0x06);    // write enable
PORTB.2=1;
delay_ms(1);



PORTB.2=1;
delay_ms(1);
PORTB.2=0;
spi(0x39);    // unprotect sector
spi(0x00);
spi(0x00);
spi(0x00);
PORTB.2=1;
delay_ms(1);


PORTB.2=1;
delay_ms(1);
PORTB.2=0;
spi(0x06);    // write enable
PORTB.2=1;
delay_ms(1);

PORTB.2=0;
spi(0x02);   // start writing
spi(0x00);   // address byte 0    // all together SECOR 0
spi(0x00);   // address byte 1
spi(0x05);   // address byte 2
spi(0xAF);   // data byte
PORTB.2=1;
delay_ms(10);

So weit so gut

wenn ich das nun auslesen will klappt das auch jedoch kann ich den inalt 
der Zelle einfach nicht ueberschreiben.

Wenn ich das Programm recompilere, den AVR neu flashe und auch resette 
und z.b. das Databyte durch 0x01 ersetze bekomme ich beim auslesen 
trotzdem noch 0xAF zurueck.

Irgendjemand eine idee woran das liegt?

Tobi

Autor: Tobi A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nachtrag PORTB.2 benutz ich zur manuellen Slave Select kontrolle

Autor: Tobi A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann es sein das ich den block erst loeschen muss?

Autor: 3347 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ueblicherweise wird Seitenweise programmiert. Alles zuerst in den Buffer 
schreiben, dann den ganzen Buffer ins Flash.

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den AT41... Typen stand noch drin, dass mehrfaches Programmieren 
ohne zwischendrin zu löschen nicht empfohlen wird. Probier mal aus:

- anstatt AF FF reinzuschreiben (nur zum Test, eigentlich sinnlos)
- beim zweiten Mal Adresse 0x000001 zu nehmen.

eventuell lassen sich die Zellen nicht mehr beschreiben, wenn mindestens 
1 Bit "0" ist.

Gruß Jörg

Autor: Tobi A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Joerg

Immer neue Zellen nehmen scheint zu gehen.
Scheint wirklich so als muesste ich erst den ganzen Block plattmachen 
und irgendwo ablegen nur wenn ich 1 Byte aendern will - ergo anderen 
speicher nehmen.

Tobi

Autor: 3348 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Alternative bietet sich ein FRAM an. Oder den RAM Teil eines RTC. 
Oder ein EEPROM.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pass auf: Beim vielen (manchen?) EEPROMS läuft das derart ab, dass 
Speicherzellen zu Beginn z.B. Zustand 1 haben, und dann durch 
Programmierung in Zustand 0 überführt werden können -- nicht aber 
umgekehrt.
D.h. in diesem Fall:

Zu Beginn ist die Zelle 111
dann 0111 reinschreiben -> korrekt
dann 0100 reinschreiben -> korrekt
dann 0011 reinschreiben -> geht nicht, da Bits immer nur von 1 nach 0 
gewandelt werden können, nicht aber umgekehrt.

Die Umkehrrichtung ist dann nur Seitenweise möglich (bzw. durch CHIP 
ERASE)

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.