说明:
1.CPU型号为MPC5554;
2.时钟频率为:8Mhz;
3.在编程FLASH前已经完成0x00000000~0x80000地址的编程解锁并擦除,而且经检查确认地址范围内都是0xFF。
4.程序运行在内部flash的0x110000~0x150000地址空间;
FLASH 编程代码如下:
void WriteFlash(void)
{
uint64_t *pFlash,*pData ;
int32_t i,j,k,len;
uint16_t code[256];
pFlash = (uint64_t *)0x000000;
uint64_t LongWordData;
FLASH. MCR. B. PGM =1;
for(len=0,len<0x100000;len=len+256)
{
Read256ByteFromCANbus((uint16_t *)code);
pData=(uint64_t *)code;
for(i=0;i<8;i++)
{
for(j=0;j<4;j++)
{//write 256bt
LongWordData = *pData ++;
*pFlash ++ = LongWordData;
}
FLASH. MCR. B. EHH =1;
for(k=0;k<4000;k++)
{ if(FLASH.MCR.B.DONE) break;
}
FLASH. MCR. B. EHV=0;
}
}
FLASH. MCR. B. PGM=0;
FLASH. MCR. B. BFEN=0;
FLASH. MCR. B. BFEN=1;
}
问题:使用上述代码写入数据到0~0x40000地址范围不会有任何问题;但写入数据到0~0x80000地址范围时,在0x40000~0x80000地址范围(具体地址随机,不固定)出现ECC错误。