MPC5674f shadow erasing issue

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

MPC5674f shadow erasing issue

ソリューションへジャンプ
1,129件の閲覧回数
oloooloo
Contributor III

ERASING CODE:

                FLASH_A.LMLR.R = FLASH_LMLR_PASSWORD;    //unlock register
                FLASH_A.LMLR.R = 0x000303FF;    //unlock shadow flash
                FLASH_A.SLMLR.R = FLASH_SLMLR_PASSWORD;    //unlock register
                FLASH_A.SLMLR.R = 0x000303FF;    //unlock shadow flash

                //erase shadow flash
                FLASH_A.MCR.B.ERS = 1;
                *(unsigned int*)0x00FFC000 = 0xFFFFFFFF;    //interlock write - write any address in shadow block
                FLASH_A.MCR.B.EHV = 1;
                while(FLASH_A.MCR.B.DONE == 0){};
                FLASH_A.MCR.B.EHV = 0;
                FLASH_A.MCR.B.ERS = 0;

               (below is code to set censor password etc, this part is not executed because above hangs)

ISSUE:

this code hangs, code below above block is not executed, after reset i see that shadow is erased, but for some reason erasing procedure hangs, any ideas why?

TEST1:

removed line: while(FLASH_A.MCR.B.DONE == 0){};

result: shadow erased and code hangs

TEST2:

removed line: *(unsigned int*)0x00FFC000 = 0xFFFFFFFF;

result: shadow is NOT erased but NO code hanging, normal execution is proceed

REMARK:

also L0, L1,L2 and L3 has the same behavior, erasing procedure hangs...

the rest of sectors i men L4 to L9, M0,M2, H0 to H5 goes normally.

L0, L1,L2,L3 belongs to partiton 1, this is something common.

I am booting from L0 and then jump to RAM from where executing erasing.

any ides what is wrong? suppose its not problem of code itself, is trivial...hw configuration?

0 件の賞賛
返信
1 解決策
804件の閲覧回数
oloooloo
Contributor III

looks like problem solved, bootloader is stettng valuses in some registers, if i set them back to 0 erasing does not hang, those registers are:

  *(unsigned int*)0xC3F91684 = 0x0;
  *(unsigned int*)0xFFF48008 = 0x0;
  *(unsigned int*)0xFFF4816D = 0;
  *(unsigned int*)0xC3FF0000 = 0;
  *(unsigned int*)0xC3FF0100 = 0;
  *(unsigned int*)0xC3FF0108 = 0;
  *(unsigned int*)0xC3FF010C = 0;

元の投稿で解決策を見る

0 件の賞賛
返信
2 返答(返信)
805件の閲覧回数
oloooloo
Contributor III

looks like problem solved, bootloader is stettng valuses in some registers, if i set them back to 0 erasing does not hang, those registers are:

  *(unsigned int*)0xC3F91684 = 0x0;
  *(unsigned int*)0xFFF48008 = 0x0;
  *(unsigned int*)0xFFF4816D = 0;
  *(unsigned int*)0xC3FF0000 = 0;
  *(unsigned int*)0xC3FF0100 = 0;
  *(unsigned int*)0xC3FF0108 = 0;
  *(unsigned int*)0xC3FF010C = 0;

0 件の賞賛
返信
804件の閲覧回数
oloooloo
Contributor III

What i checked already, if boot goeas from bootloader located on FlashA L0 then erasing of L0 to L3 and Shadow hangs (of course ersasing executed from RAM). If the same functionality are executed via BAM, all works fine!

Is it hw bug?

0 件の賞賛
返信