Hi all,
I am using MPC5744 micro controller.I can successfully write data at 0x800000 addresses,.The code is as follows:
C55FMC.LOCK0.R &= 0xFFFEFFFF;
C55FMC.MCR.B.ERS = 1;
C55FMC.SEL0.R = 0x00010000; //select the mid block
*(unsigned int*)0x00800000 = 0xFFFFFFFF; //interlock write
C55FMC.MCR.B.EHV = 1;
while(C55FMC.MCR.B.DONE == 0);
C55FMC.MCR.B.EHV = 0;
C55FMC.MCR.B.ERS = 0;
C55FMC.MCR.B.PGM = 1;
*(unsigned int*)0x00800000 = 0x11111111;
C55FMC.MCR.B.EHV = 1;
while(C55FMC.MCR.B.DONE == 0);
C55FMC.MCR.B.EHV = 0;
C55FMC.MCR.B.PGM = 0;
But what should i do when I want to save other data? Do I need to erase the flash again when I write the data again?
Can you help me solve this problem?
Hi,
an aligned double word must be in erased state (all bytes are 0xFF) if you want to program it. So, if you want to re-program double word which has been already programmed, it is necessary to erase whole block.
If you want to write to next address (next double word) which is in erased state then:
C55FMC.MCR.B.PGM = 1;
*(unsigned int*)0x00800008 = 0xAAAAAAAA;
*(unsigned int*)0x0080000C = 0xBBBBBBBB;
C55FMC.MCR.B.EHV = 1;
while(C55FMC.MCR.B.DONE == 0);
C55FMC.MCR.B.EHV = 0;
C55FMC.MCR.B.PGM = 0;
Regards,
Lukas
Hi,Lukas
I program the eeprom as you said,but when I read the address 0x00817C00,the value is 0.
I also found that when I debug the project,the eeprom address 0x00817C00 was not erase by the S32 Design Studio,
Can you help me about this?
Thank you!
Thank you very much for your time Lukas. It has been a great help!
when i write to next address (next double word) which is in erased state whether the value of the 0x00800000 address is set to 0xffffffff?
No, it's not erased. You would have to erase whole block.
Regards,
Lukas
Hi,Lukas
Before I change the value in address 800000, I need to wipe the whole block. At this time, the data in the adjacent address will be erased. Do I need to write the relevant data in the whole block every time I write it?