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.
我一直在重新配置 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
您好 QJ、
感谢快速响应。
是的、您的理解是正确的。
在这种情况下、被擦除的扇区始终为非空且已完全编程、因此我希望擦除时间保持一致、但出于某种原因、这些扇区不是、而是在我印象下(您现在已经确认) MPU 在 CPU 复位后被复位、我发现唯一的区别是添加/删除在应用程序中重新配置 MPU 的代码...尽管我认为这个问题不是直接由 MPU 引起的、但执行配置(或重新配置)操作 MPU 还会影响其他组件或外设、例如 F021闪存接口\状态机?
也许我还应该说、当我们重新编程应用时、我们擦除四个扇区(组0、扇区10至13 - 0x00080000至0x000FFFFF)、并且它只是显示扩展擦除时间的第一个扇区擦除(扇区10)。
F021 接口或 需要清除的状态机中是否可能存在某些设置? 我猜可能不是这样、但我可以看到的唯一可能影响闪存扇区擦除时间的区域是 F021状态机、ATCM 接口和 MPU。
我们还为组0闪存启用了 ECC 检查、但在所有情况下都启用 ECC 检查(尽管在擦除或写入闪存时显然已禁用)。
此外、我可以确认 CCS 在重新编程引导加载程序时不会擦除我们的应用- CCS 设置为仅擦除要编程的扇区。
此致、
Steve
您好 QJ、
不幸的是、我最近未能花任何时间来完成这项工作...而且在不久的将来可能也没有机会去查看这项工作、因为我们需要完成更多的紧迫任务、至少这是因为我们无意中做出了一项会再次引发此问题的更改。
我认为、您的团队中没有其他任何建议或想法可以让您对可能导致此问题的原因有所了解?
此致、
Steve