我在定制设计中使用msp432p401r BGA。 当我尝试擦除第一个插槽顶部的4K扇区时,擦除挂起。
我正在擦除0x0001e000,长度0x1000。 这是内存组0的倒数第二个扇区,大小为4096 (1扇区)。
我正在将 BANK0_MAIN_WEPROT中的保护位更改为0xbfffffffff ,然后调用 MAP_FlashCTL_performMassErase()以执行擦除。 但它是挂起的。 请注意,被擦除的区域已被擦除。 但它仍应起作用。
以下是它的悬挂位置:
/*而连拍读取尚未完成*/
While (((FLCTL->RDBRST_CTLSTAT和FLCTL_RDBRST_CTLSTAT_BRST_STAT_MASK)
!= FLCTL_RDBRST_CTLSTAT_BRST_STAT_3)
{
__no_operation();
}
这来自driverlib/flash.c
*-------------------------------
* MSP432 DriverLib - v3_21_00_05
*-------------------------------
以下是当前设置(运行上述循环时):
POWER_STAT = 0x7c
RESERVED0 ={0x0,0x0,0x0}
BANK0_RDCTL = 0x4.3004万
Bank1_RDCTL = 0x1000
RESERVED1 ={0x0,0x0}
RDBRST_CTLSTAT = 0x3.0018万
RDBRST_STARTADDR = 0x1e000
RDBRST_LEN = 0x1000
RESERVED2 ={0x0,0x0,0x0,0x0}
RDBRST_FAILADDR = 0x0
RDBRST_FAILCNT = 0x0
RESERVED3 ={0x0,0x0,0x0}
PRG_CTLSTAT = 0xc
PRGBRST_CTLSTAT = 0xa0
PRGBRST_STARTADDR = 0x8fc0
RESERVED4 = 0x0
PRGBRST_DATA0_0 = 0xf103.538万
PRGBRST_DATA0_1 = 0x681b030c
PRGBRST_DATA0_2 = 0xf507.3301万
PRGBRST_DATA0_3 = 0xf102.528万
PRGBRST_Data1_0 = 0x601.302万c
PRGBRST_Data1_1 = 0x5380f507
PRGBRST_Data1_2 = 0x30cf103
PRGBRST_Data1_3 = 0xf5b3681b
PRGBRST_DATA2_0 = 0xd3cb6f80
PRGBRST_DATA2_1 = 0x5780f507
PRGBRST_DATA2_2 = 0x46bd3710
PRGBRST_DATA2_3 = 0xbf00bd80
PRGBRST_DATA3_0 = 0xe000edf0
PRGBRST_DATA3_1 = 0xb084b580
PRGBRST_DATA3_2 = 0x6078af00
PRGBRST_DATA3_3 = 0x6878.6039万
Erase_CTLSTAT = 0x3.0002万
erase_SECTADDR = 0x8000
RESERVED5 ={0x0,0x0}
BANK0_INFO_WEPROT = 0x3
BANK0_MAIN_WEPROT = 0xbfffffffffff
RESERVED6 ={0x0,0x0}
Bank1_INFO_WEPROT = 0x3
Bank1_MAIN_WEPROT = 0xffffffff
RESERVED7 ={0x0,0x0}
BMRK_CTLSTAT = 0x0
BMRK_IFETCH = 0x0
BMRK_dread = 0x0
BMRK_CMP = 0x1万
RESERVED8 ={0x0,0x0,0x0,0x0}
IFG = 0x21
IE = 0x0
CLRIFG = 0x0
SETIFG = 0x0
READ_TIMCTL = 0x64a037
READMARGIN_TIMCTL = 0x5a
PRGVER_TIMCTL = 0xa53f
ERSVER_TIMCCL = 0x32
LKGVER_TIMECTL = 0x5a
program_timctl = 0xa0002d0f
erase_TIMCTL = 0xa0afc80f
MASSERASE_TIMCTL = 0x1040
BURSTPRG_TIMCTL = 0x1e00
有什么理由要这样做?