您好!
我正在使用 F28388D 控制器、我在闪存擦除操作期间观察到一个奇怪的行为。
我已经写入了一个功能来将 s2记录格式载入到闪存中,加电时我可以执行扇区7、8、9和扇区4、5、6的擦除操作,然后我将 s2记录载入到闪存扇区4、5、6。 成功将数据复制到闪存扇区7,8,9后,我将执行从扇区7,8,9到扇区4,5,6的闪存副本。 我使用了一个500 μ s 的任务来执行此操作、我还需要以至少500 μ s 的速度刷新外部 WD
现在,假设扇区4,5,6是备份扇区,我需要将其擦除,因此当我尝试擦除该扇区时 ,我可以看到外部 WD 刷新不会发生并导致复位。 当我在开始时执行擦除扇区7,8,9时,看不到同样的行为。
这种行为差异背后的原因可能是什么。 我尝试了扇区4、5、6、它也表现出相同的行为。
我已按如下方式初始化闪存
谢谢、
Nagesh
#pragma CODE_SECTION(InitFlash, "ramfuncs");
void InitFlash(void)
{
EALLOW;
gstrFlash0CtrlRegs.FPAC1.bit.PMPPWR = 0x1;
gstrFlash0CtrlRegs.FBFALLBACK.bit.BNKPWR0 = 0x3;
gstrFlash0CtrlRegs.FRD_INTF_CTRL.bit.DATA_CACHE_EN = 0;
gstrFlash0CtrlRegs.FRD_INTF_CTRL.bit.PREFETCH_EN = 0;
gstrFlash0CtrlRegs.FRDCNTL.bit.RWAIT = 0xF;
gstrFlash0CtrlRegs.FRD_INTF_CTRL.bit.DATA_CACHE_EN = 1;
gstrFlash0CtrlRegs.FRD_INTF_CTRL.bit.PREFETCH_EN = 1;
//->At reset, ECC is enabled. If it is disabled by application software and
// if application again wants to enable ECC.
// Set ENABLE member of gstrFlash0EccRegs to 0x0.
#warning"ECC disabled!"
gstrFlash0EccRegs.ECC_ENABLE.bit.ENABLE = 0x0;
EDIS;
//->Force a pipeline flush to ensure that the write to the last register
// configured occurs before returning.
// Invoke __asm with " RPT #7 || NOP" as parameter
__asm(" RPT #7 || NOP");
}
