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.

[参考译文] LP-MSPM0L1306:闪存编程导致无法访问 SoC AHB 总线

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1180256/lp-mspm0l1306-flash-programming-cause-soc-ahb-bus-to-be-inaccessible

器件型号:LP-MSPM0L1306

将某个地址编程到0x00000000 (闪存)后、大小无关紧要、无法访问 SoC。 如果我执行闪存批量擦除并将 RESET 置为有效、则可再次访问 AHB 总线、并可通过对 DHCRSR 执行操作、步进等操作来停止 SoC。 但是、如果我对地址0x00000008或更高的地址进行编程、一切都正常、AHB 总线在复位后仍然可以访问、因此不需要批量擦除。

闪存的前64位是否在引导过程中被检查、当地址0x00000000 0x00000008未被擦除时、这会锁定总线?  

另一个问题:

当我将代码下载到 RAM 并运行时、在~7秒后、复位自动发生、并且 DFSR (0xE000ED30)中的 VCATCH 位被置位。 这与执行的代码无关、甚至在(1)这种情况发生时循环。 看门狗被禁用、并且从状态寄存器可以确认看门狗不是导致这种情况的原因。


谢谢、祝您愉快、
Jaka

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

    Jaka、您好!

    编译器将默认使用闪存的第一个扇区、因此当您擦除闪存中的第一个扇区时、它将擦除您的所有代码并将其替换为0xFFFFFFFF。  这将擦除当前运行的代码、以便 CPU 无法执行下一条命令。 您可以使用存储器浏览器来观察这一点、在闪存擦除时设置断点、但当您单步执行时、您可以看到当前代码被擦除。 如果您检查反汇编、您可以看到编译的代码也会被擦除。 如果要存储数据、我建议在闪存的背面进行存储、以避免这种情况。

    RAM 代码是否与您对闪存的第一个扇区进行编程的代码相同?  

    此致、

    Luke

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

    我们不会相互理解。 如果第一个地址不是0xFFFFFFFF、则无法通过 AHB 总线观察到 SoC 状态。 在 AHB 总线上读取此值之前、我需要通过写入 SYSCTL_RESETCMD 来执行系统复位、以执行 CPU 复位。 引导时、SoC 可能会检查闪存的前64位、并根据允许或阻止调试连接的值进行检查。

    是的、RAM 代码是相同的、仅链接到 RAM 而不是闪存。

    此致、Jaka

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

    Jaka、您好!

    我可能会误解您的应用。 我想您正在对0x00000000的存储器位置执行闪存写入。 您能否为您的计划分享一个简单的测试案例来证明这一点? 这将让我逐步了解并观察您在结尾处看到的内容

    此致、

    Luke