在线时间2 小时
UID3253002
注册时间2017-2-13
NXP金币0
该用户从未签到
新手上路

- 积分
- 15
- 最后登录
- 2017-12-12
|
本帖最后由 798361971 于 2017-12-4 14:56 编辑
有 哪位大神知道在使用NXP官方提供的MPC5xxx_EEE_DRIVER模拟eeprom的驱动库时为什么在SWAP块数据时调用FSL_FlashEraseStart函数擦不掉块上某些地址上的数据 。而在其后的FSL_MainFunction函数中调用FSL_FlashEraseStart函数时却可以擦除整块 而两次调用FSL_FlashEraseStart函数时传入的参数是一模一样的 但是却在SWAP函数调用FSL_FlashEraseStart时在每个要擦除的块的偏移地址为0x20 0x21 0x22 0x23这四个字节数据每次都擦不掉。并且是每次在SWAP函数中调用FSL_FlashEraseStart时都是擦不掉那四个字节数据
求大神帮解答下 谢谢
这个是FlashEraseStart函数的源码
UINT32 FSL_FlashEraseStart( UINT32 interlockWriteAddress,
UINT32 lowEnabledBlock,
UINT32 midEnabledBlock,
UINT32 highEnabledBlock)
{
UINT32 returnCode = EE_OK;
/* Check the high voltage operation */
if ((READ32(FLASH_REG_BASE + FLASH_MCR) & (FLASH_MCR_ERS | FLASH_MCR_PGM)) != 0U)
{
/* If any P/E operation in progress return error */
returnCode = EE_INFO_HVOP_INPROGRESS;
}
else
{
/* Set MCR ERS bit */
SET32((FLASH_REG_BASE + FLASH_MCR), FLASH_MCR_ERS);
/* Prepare low and middle enabled blocks */
lowEnabledBlock &= 0xFFFFU;
midEnabledBlock &= 0xFFFFU;
#if (FLASH_MODULE == C55)
lowEnabledBlock <<= 16U;
#else
midEnabledBlock <<= 16U;
#endif
/* Write the block selection registers */
WRITE32((FLASH_REG_BASE + FLASH_SEL0), (lowEnabledBlock | midEnabledBlock));
WRITE32((FLASH_REG_BASE + FLASH_SEL1), highEnabledBlock);
/* Interlock write */
WRITE32(interlockWriteAddress, 0xFFFFFFFFU);
/*WRITE32(interlockWriteAddress+0x20U, 0xFFFFFFFFU);*/
/* Set MCR EHV bit */
SET32((FLASH_REG_BASE + FLASH_MCR), FLASH_MCR_EHV);
}
return returnCode;
}
|
|