I'm using a K20 (MK20DX128VLK7) processor.
Occasionally when I try to erase a block of the program flash I get an FTFL_FSTAT result with the MGSTAT0 bit set.
The block of flash still seems to have been erased properly.
It's very simple code:
FTFL_FCCOB0 = 0x09;
FTFL_FCCOB1 = (addr >> 16) & 0xff;
FTFL_FCCOB1 = (addr >> 8) & 0xff;
FTFL_FCCOB1 = (addr) & 0xff;
FTFL_FSTAT |= FTFL_FSTAT_CCIF_MASK;
while (!(FTFL_FSTAT & FTFL_FSTAT_CCIF_MASK)) ;
Any ideas on how to avoid this error or detect what is causing it?
Thanks,
Peter Steinberg
Disabling interrupts around the flash writes had no effect.
Hi, test it,
__DI();
i = flash_erase_sector( 0x10000 );
__EI();
//--------------------------------------------------------------------
unsigned int flash_erase_sector(unsigned int destination) // Sector = 4k
{
unsigned int returnCode=0;
if(FTFL_FSTAT&0b01000000){FTFL_FSTAT&=0b01000000;}
if(FTFL_FSTAT&0b00100000){FTFL_FSTAT&=0b00100000;}
if(FTFL_FSTAT&0b00010000){FTFL_FSTAT&=0b00010000;}
FTFL_FCCOB0 = 0x09;
FTFL_FCCOB1 = (unsigned char)(destination >> 16);
FTFL_FCCOB2 = (unsigned char)((destination >> 8) & 0xFF);
FTFL_FCCOB3 = (unsigned char)(destination & 0xFF);
FTFL_FSTAT = 0x80; // launch command
if(FTFL_FSTAT&0x30){
return(0xff);
}
while(!(FTFL_FSTAT&(1<<7))){}
returnCode = FTFL_FSTAT&0b01110001;
return(returnCode);
}
//---------------------------------------------------------------------