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.

[参考译文] RM57L843:POM 程序地址不能被直接写入?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/619510/rm57l843-pom-program-addresses-cannot-be-written-directly

器件型号:RM57L843

在本例中、我在 INTERNAL_RAM (覆盖目标区域)中将地址0x00100000 (程序起始地址)映射到0x00070000 (覆盖起始地址)。

I 禁用 MPU。

在 POM 被初始化和启用后、我可以看到 POM 正在 CCS 内存视图中工作。 当我更改0x08070000处的值时、0x00100000的值也会改变。

但是、在我执行以下代码后、会发生奇怪的情况:

*(volatile uint32_t*) 0x00100000 = 0x55; 

我以为代码会更改0x08070000处 SRAM 的内容、但我看不到任何更改。

同时、当我更改0x08070000处的内容时、地址0x00100000处没有任何变化。

对我来说、看起来 POM 映射在此时断开。 为什么? 我无法直接将值写入 POM 程序地址区域?

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

    您需要直接写入覆盖地址、而不是原始地址以更改值。 请记住、原始地址仍在闪存域中、不可写。 POM 模块的目的是将新值覆盖到闪存、但是地址的运行方式仍然与闪存一样、并且只允许读取。 要实时更新覆盖值、您可以直接写入易失性存储器中的地址、以更新从闪存读取的值。

    对于出现的问题、请查看 POMGLBCTRL.OTADDR 中的设置。 它应该是覆盖区域起始地址的位31:22。 在您的情况下、我认为这些高位应该为0x080。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的答复。 我将阻止在代码中写入程序地址。