SPC5646C && SPC5646CC B0FA(0x0C0000-0x0DFFFF)Flash erase error

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

SPC5646C && SPC5646CC B0FA(0x0C0000-0x0DFFFF)Flash erase error

858 Views
simonliu
Contributor II

We found SPC5646C flash erase OK,but erase SPC5646CC error with same code.(B0FA 0x0C0000-0x0DFFFF).I erase flash each 128K space.

The flash different between the SPC5646C and SPC5646CC? 

Code:

StdRetType Flashi_Erase(volatile FLASHI_DATA_INPUT_TYPE InPutData)
{
vuint32_t TempStartAddr = 0;
vuint32_t TempLen = 0;
vuint32_t  StartSector = 0;
vuint32_t  SectorNum = 0;
vuint32_t  i = 0;

vuint32_t OutCount = 0;

if((InPutData.DataStartAddr < FLI_ADDR_START)||(FLI_ADDR_END < (InPutData.DataStartAddr + InPutData.DataLen)))
{
return STD_RET_NOK;
}


TempStartAddr = InPutData.DataStartAddr - FLI_ADDR_START;

StartSector = TempStartAddr / FLI_SECTOR_LENGTH;

TempLen = InPutData.DataLen + TempStartAddr % FLI_SECTOR_LENGTH;

if(TempLen % FLI_SECTOR_LENGTH)
{
SectorNum = TempLen / FLI_SECTOR_LENGTH + 1;
}
else
{
SectorNum = TempLen / FLI_SECTOR_LENGTH;
}

for(i=0; i<SectorNum; i++)
{
CFLASH_0.HBL.R = 0xB2B22222;
CFLASH_0.HBL.R = 0x00000000;

CFLASH_0.HBS.R = 0x00000001 << (StartSector + i);

CFLASH_0.MCR.B.ERS = 1;

(*((vint32_t*) (FLI_ADDR_START + ((StartSector + i)*FLI_SECTOR_LENGTH)) )) = InPutData.EraseData;

CFLASH_0.MCR.B.EHV = 1;
OutCount = 0;
    while(CFLASH_0.MCR.B.DONE == 0) //wait for DONE
    {
     OutCount++;
     if(OutCount > 0xFFFFFFFE)
     {
         CFLASH_0.MCR.B.EHV = 0;
         CFLASH_0.MCR.B.ERS = 0;
     return 3;
     }
    }

    CFLASH_0.MCR.B.EHV = 0;
    CFLASH_0.MCR.B.ERS = 0;
}

FlashiData.OutTime1 = OutCount;
return STD_RET_OK;
}

0 Kudos
1 Reply

602 Views
lukaszadrapa
NXP TechSupport
NXP TechSupport

Hi,

 

the only difference is that there’s CSE module available on SPC5646CC derivative. The rest is exactly the same. I can’t see reason for this behavior.

To avoid possible SW issues, have you tried to execute some simplified code like this? It erases B0FA only:

 

CFLASH_0.HBL.R = 0xB2B22222;

CFLASH_0.HBL.R = 0x00000000;

 

CFLASH_0.MCR.B.ERS = 1;

CFLASH_0.HBS.R = 0x00000004;

*(unsigned int *)0x000C0000 = 0xFFFFFFFF;

CFLASH_0.MCR.B.EHV = 1;

while(CFLASH_0.MCR.B.DONE == 0);

CFLASH_0.MCR.B.EHV = 0;

CFLASH_0.MCR.B.ERS = 0;

 

Regards,

Lukas

0 Kudos