Dataflash - byte address reprogrammieren geht nicht

Gast #850344
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
#850604
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
Gast #852791
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
Gast #852815
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren