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.

[参考译文] TMS570LS1227:重新配置 MPU 可延长闪存 f021扇区擦除时间

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/695985/tms570ls1227-reconfiguring-mpu-extends-flash-f021-sector-erase-time

器件型号:TMS570LS1227

我一直在重新配置 MPU 设置以测试堆栈溢出机制、并发现重新配置许多 MPU 区域(即使它们是使用与其当前配置完全相同的设置进行"重新配置"的) 将我们尝试擦除的第一个扇区的擦除时间最多延长100%。

虽然这不是一个示例抑制器(至少此时)、但我们需要了解导致扇区擦除时间增加的原因、以防我们在将来无意中更改具有类似效果的内容。

我们的 MPU 最初是在引导加载程序中配置的、这一切正常、对闪存扇区擦除时间没有影响。

为了测试堆栈溢出保护、我重新配置了许多 与堆栈相关的 MPU 区域(精确地说、4个区域-区域4、5、6和7)。  我在我们的应用程序代码中这样做是为了强制发生权限错误、 但是、我们发现通过 CAN 连接对应用程序进行重新编程的任何后续尝试都失败了-这最终是由于我们的闪存等待函数发生了(可能限制不必要)超时、该超时会等待 FMSTAT 寄存器忙标志。  应该注意的是、在重新配置 MPU 和擦除应用程序闪存之间、处理器会通过中止处理程序或通过正常编程机制进行复位(使用 ESM nERROR 引脚)。

如果我仅重新配置上述4个区域中的3个、则闪存等待超时不会跳闸、并且闪存扇区擦除时间仅略有增加-大约为10%。

如果我简单地使用这些区域已包含的值重新编程这些区域(或者、实际上是区域8和9、它们是我们的中止和 UNDEF 堆栈陷阱)、我会看到完全相同的行为。

我们的基本 MPU 设置如下:

区域 基地址 尺寸和使能 访问控制 说明
0 0x00000000 0x0000002B 0x00000308 编程闪存
1 0xF0000000 0x0000002D 0x00001308 组7 EEPROM
2. 0x80000000 0x0000002D 0x00000308 RAM
3. 0xFC000000 0x00000033 0x00001301 外设寄存器
4. 0x08000020 0x00000009 0x00001008 用户堆栈保护
5. 0x08000820 0x00000009 0x00001008 SVC 堆栈防护
6. 0x08001020 0x00000009 0x00001008 FIQ 堆叠防护装置
7. 0x08001820 0x00000009 0x00001008 IRQ 堆栈保护
8. 0x08002820 0x00000009 0x00001008 中止堆栈保护
9. 0x08002C20 0x00000009 0x00001008 UNDEF 堆栈保护
10. 未使用 不适用 不适用 不适用
11. 0xFFF80000 0x00000025 0x00001100 系统模块

如果有任何帮助,我们将不胜感激。

此致、

Steve

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

    引导程序中相同的 MPU 设置不会影响擦除应用程序扇区的擦除时间(例如扇区7/8/9、从0x20000开始)。 您可以从引导加载程序对应用程序进行编程、然后执行应用程序代码并重新配置 MPU 设置以强制发生权限故障。 该故障会导致 CPU 复位、然后您希望从 CAN 引导加载程序重新对应用程序进行编程、并注意到擦除时间比以前长得多。 我的理解是否正确?

    CPU 复位后、MPU 寄存器(CP15)中的值被复位为默认值。 MPU 将无法保留您在应用程序代码中所做的设置、因此之前的设置不会影响擦除时间。

    擦除一个空白扇区(在加载引导加载程序时可由 CCS 擦除)所花费的时间少于擦除非空白扇区(您的应用)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    感谢快速响应。

    是的、您的理解是正确的。

    在这种情况下、被擦除的扇区始终为非空且已完全编程、因此我希望擦除时间保持一致、但出于某种原因、这些扇区不是、而是在我印象下(您现在已经确认) MPU 在 CPU 复位后被复位、我发现唯一的区别是添加/删除在应用程序中重新配置 MPU 的代码...尽管我认为这个问题不是直接由 MPU 引起的、但执行配置(或重新配置)操作 MPU 还会影响其他组件或外设、例如 F021闪存接口\状态机?

    也许我还应该说、当我们重新编程应用时、我们擦除四个扇区(组0、扇区10至13 - 0x00080000至0x000FFFFF)、并且它只是显示扩展擦除时间的第一个扇区擦除(扇区10)。

    F021 接口或 需要清除的状态机中是否可能存在某些设置?  我猜可能不是这样、但我可以看到的唯一可能影响闪存扇区擦除时间的区域是 F021状态机、ATCM 接口和 MPU。

    我们还为组0闪存启用了 ECC 检查、但在所有情况下都启用 ECC 检查(尽管在擦除或写入闪存时显然已禁用)。

    此外、我可以确认 CCS 在重新编程引导加载程序时不会擦除我们的应用- CCS 设置为仅擦除要编程的扇区。

    此致、
    Steve

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

    您是否知道导致擦除速度较慢的原因?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    不幸的是、我最近未能花任何时间来完成这项工作...而且在不久的将来可能也没有机会去查看这项工作、因为我们需要完成更多的紧迫任务、至少这是因为我们无意中做出了一项会再次引发此问题的更改。

    我认为、您的团队中没有其他任何建议或想法可以让您对可能导致此问题的原因有所了解?

    此致、

    Steve

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

    我与我们的设计工程师进行了检查、并确认更改应用程序中的 MPU 设置不会影响引导加载程序中的闪存操作(擦除/编程)(使用复位从应用程序返回到引导加载程序)。 CPU 复位后 MPU 也会复位。