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
nachtrag PORTB.2 benutz ich zur manuellen Slave Select kontrolle
kann es sein das ich den block erst loeschen muss?
Ueblicherweise wird Seitenweise programmiert. Alles zuerst in den Buffer schreiben, dann den ganzen Buffer ins Flash.
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
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
Als Alternative bietet sich ein FRAM an. Oder den RAM Teil eines RTC. Oder ein EEPROM.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.