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


von Tobi A. (Gast)


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

von Tobi A. (Gast)


Lesenswert?

nachtrag PORTB.2 benutz ich zur manuellen Slave Select kontrolle

von Tobi A. (Gast)


Lesenswert?

kann es sein das ich den block erst loeschen muss?

von 3347 (Gast)


Lesenswert?

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

von Joerg W. (joergwolfram)


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

von Tobi A. (Gast)


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

von 3348 (Gast)


Lesenswert?

Als Alternative bietet sich ein FRAM an. Oder den RAM Teil eines RTC. 
Oder ein EEPROM.

von Sven P. (Gast)


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)

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.