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.

[参考译文] TMS320F28335:错误的闪存擦除会导致复位

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1347484/tms320f28335-wrong-flash-erase-would-cause-reset

器件型号:TMS320F28335

亲爱的香榭丽舍大街

我是为我们的客户提出这个问题的。

用户发现 F28335会意外复位,这似乎是由闪存 API Flash_Erase ()软件复位引起的,因此用户需要澄清 并确认根本原因。

用户有两个项目(映像)、一个是引导加载程序、另一个是应用程序。

引导加载程序.cmd 定义扇区 ABCDEFGH、而应用程序只定义扇区 ABCDH。

在应用中、当它收到固件更新命令时、它会通过以下方式跳转到引导加载程序:

asm ("   MOVL XAR7、#0x338000");

ASM ("   LB *XAR7");

然后、在引导加载程序中、它会调用  

Flash_Erase (sectorb|SECTORC|SECTORE|SECTORF|SECTORG|SECTORH,$FlashStatus);

然后、F28335因512个 OSCCLK 的 nXRS 被拉至低电平而意外复位、这表明这是由 WDCR[WDCHK]或类似器件引起的。

请注意、看门狗已在所有测试开始时被禁用。

如果 只  对定义扇区 ABCDEFGH 的.cmd 的引导加载程序映像进行编程并在没有应用程序映像的情况下运行、那么它在没有复位的情况下运行良好。

如果  .cmd 定义的引导加载程序映像与应用程序.cmd  ABCDH 相同,并避免擦除 Flash_Erase ()中的 EFG 扇区,那么它也可以在没有复位的情况下正常运行。

Question:

1.  如果有错误,API Flash_Erase ()是否会使用 WDCR 触发软件复位?

2.为什么引导加载程序和应用程序中闪存扇区的不同.cmd 定义会导致此类复位?

3、您有什么意见可以解释上述问题吗?

 

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

    您好、Wayne、

    Deshine Deshine 说:
    1.   如果有错误,API Flash_Erase ()是否会使用 WDCR [ WDCK]触发软件复位?

    不可以、如果出现错误、闪存 API 应该会返回闪存 API 文档中所述的错误:

    Deshine Deshine 说:
    2. 为什么引导加载程序和应用程序中闪存扇区的不同.cmd 定义会导致此类复位?

    我感觉这只是问题的可能原因、但不是器件复位的直接原因。 我在这里不清楚、在这两种场景之间、有闪存扇区 E 到 G 的唯一变化不是在.cmd 文件中指示的吗? 或者、这些扇区未在 Flash_Erase 函数中擦除的实际差异是什么? 这两项变化是不同的、应单独测试以验证哪一项是实际原因。

    Deshine Deshine 说:
    3. 您是否有任何意见可以解释上述问题?

    由于 客户似乎看到看门狗复位、我会让他们在 调用闪存擦除之前仔细检查他们的代码以及直接使用的任何函数。 我知道他们说过他们禁用了看门狗、但在这里看起来不是这样。 它们绝对需要确保在闪存擦除之前代码的任一位置看门狗被启用(这有可能发生在它们调用的函数内、它也许不是直接在闪存擦除前的函数内)。 在最坏的情况下、它们可以在 Flash_Erase 函数调用处设置断点、以验证看门狗寄存器的状态。