This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:闪存擦除挂起。

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/642731/msp432p401r-flash-erase-hangs

部件号:MSP432P401R

我在定制设计中使用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

有什么理由要这样做?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我单步执行代码时,它就会起作用。 所以有一些时间问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Eric,
    我看不到任何明显的问题。 感谢您提供更多信息,我将查看是否可以使用启动板和80针封装重新创建。

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢Chris,

    我的主要DCOCLK是16MiHz (1677.7216万 Hz)。 我怀疑这可能与它有关。

    您如何使用带有80针封装的启动板? 我以为这个洗涤台只有100个引脚。

    今晚我还会以48MHz的速度尝试我的代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我有一个启动板和一个单独的定制板,有80针封装,并将测试每一个。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../b0_5F00_s30_5F00_memtest.cEric

    我仍然需要完成上述所有寄存器设置,但我能够在80针和100针封装上运行所附的代码。  如果这不能代表您正在做的事情,或者您看到此代码的不同行为,请告诉我。

    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是在ROM还是闪存中运行driverlib?

    我的程序挂起时正在使用闪存中的driverlib API。当我重新编译以使用ROM中的driverlib时,它工作正常,不会挂起。

    在这里,我找到了帮助我解决此问题的参考...

    从DriverLib手册中。 (DriverLib用户指南4.10。01.00 ,2017年8月3日星期四14:34:39 GMT+5)

    8.2 部分,闪存控制器限制

    此外,在使用FlashCtl API时,用户必须特别考虑API的执行位置。 对于关键API (如擦除和程序),需要从SRAM或ROM执行DriverLib API (使用ROM_前缀)。 由于闪存控制器的验证要求,当前不支持在闪存之外运行这些API。


    这是一种警告,应该在《技术参考手册》或设备数据表中提供。 事实上,《技术参考手册》规定:

    使用闪存控制器的8.2 常见操作部分

    将MSP432驱动程序库用于闪存操作
    MSP432驱动程序库允许通过简单易用的接口访问闪存模块,以执行多种常用的闪存操作,如读,写和擦除。 TI建议将MSP432驱动程序库API用于所有闪存操作,以确保按照所需规范安全执行闪存例程。
    MSP432驱动程序库MSP432P4xx用户指南(请参阅第8章闪存控制器)中提供了MSP432驱动程序库API的完整列表。



    因此,我一直在使用已发布的API和已发布的TI代码。 从闪存运行时,它会挂起。

    我建议您这样做

    o更新TRM
    o在SDK代码中添加注释,至少警告您不要将其从闪存中运行。

    请。


    是的,我本应该抓住这个问题,但警告信息深入到DriverLib中,我没有详细介绍,因为我认为TRM是基本手册。

    我花了几天时间试图弄清楚发生了什么。

    谢谢!