MPC5644 flash erase of high-address space not working

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

MPC5644 flash erase of high-address space not working

931件の閲覧回数
johan_edblad
Contributor I

I am referring to MPC5644a reference manual, chapter 12.4.6 to perform erase operation on a flash block in high-address space. 

Note 1: I have no problem to erase flash blocks L0 and M0 in flash bank B, but for some reason nothing happens when trying to erase block H0 in bank B. HLR.B.HBE is 1 after unlock and MCR.B.PEG is 1 after attempt to erase, but the data is still there.

Note 2: I also have no problem to write to block H0 in bank B. It is just erase in high-address space that doesn't work.

This is the code:

#define FLASH_B (*( volatile struct FLASH_tag *) 0xC3F8C000)
#define FLASH_ADDR 0x00100000

...
volatile struct FLASH_tag *pFlash;
pFlash = &FLASH_B;
//0 - unlock
pFlash->HLR.R = 0xB2B22222; //password
pFlash->HLR.B.HBLOCK = 0x0; //unlock all blocks in high address space

//1
pFlash->MCR.B.ERS = 1;
//2
pFlash->HSR.B.HBSEL = 0x1;//High-address space block H0 (Flash B)
//3
*(unsigned int *)FLASH_ADDR = 0xFFFFFFFF;
//4
pFlash->MCR.B.EHV = 1;
//5
while ((pFlash->MCR.B.DONE == 0));
//6
char peg = pFlash->MCR.B.PEG;
//7
pFlash->MCR.B.EHV = 0;
//8
//no more blocks
//9
pFlash->MCR.B.ERS = 0;

ラベル(1)
タグ(1)
0 件の賞賛
返信
3 返答(返信)

809件の閲覧回数
davidtosenovjan
NXP TechSupport
NXP TechSupport

Hi,

Are you executing this piece of code from RAM? Do you have disabled cache memory?

0 件の賞賛
返信

809件の閲覧回数
johan_edblad
Contributor I

Yes, I am executing from RAM. 

And prior to erase i run the following:

void DCACHE_Disable(void)
{
asm("mfspr r3,1010");
asm("lis r4,0xFFFF");
asm("ori r4,r4,0xFFFE");
asm("and r3,r3,r4");
asm("isync");
asm("mtspr 1010,r3");
}

0 件の賞賛
返信

809件の閲覧回数
davidtosenovjan
NXP TechSupport
NXP TechSupport

Copy-back or write-through configuration?

0 件の賞賛
返信