【问题标题】:How to change flash start address except linker file如何更改除链接器文件外的闪存起始地址
【发布时间】:2021-12-31 10:56:10
【问题描述】:

我需要在更新固件时更改我的闪存跳转地址。我正在使用 sm32h750 微控制器,我可以使用此文件更改应用程序代码起始地址与闪存 .ld(链接器)文件

MEMORY
{
    RAM (xrw)   : ORIGIN = 0x20000000, LENGTH = 192K
    CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
    FLASH (rx)  : ORIGIN = 0x8100000, LENGTH = 64K
}

但我不想更改此文件上的任何内容,我只想更改FLASH register boot address FLASH_BOOT_CURR) 如果我不更改.ld 文件并将这些寄存器配置为我想要启动的内容。程序是否启动了这个地址?

我需要这种方式,因为将最后一个代码保留在闪存上。如果我更改闪存起始地址,以便我可以控制我可以复制的位置。 如果我在初始化时更改闪存寄存器,那么从该地址开始就足够了吗?

【问题讨论】:

  • 链接器脚本需要正确链接您的应用程序。你无法避免它。设置 uC 寄存器与链接描述文件没有任何共同之处,

标签: c stm32 flash-memory


【解决方案1】:

你把两种不同的东西混在一起了。

第一个是微控制器引导地址。它由制造商指定。在 STM32H7 上,您可以通过称为选项字节的专用闪存区域修改此引导地址(显然,这不能通过其值在断电时丢失的常规寄存器来完成)。修改这些选项字节的过程是特定的,并在参考手册中进行了描述。您所指的寄存器仅反映这些选项字节,但它是只读的。作为记录,STM32H7上的引导地址也取决于BOOT0引脚的值。

一旦你定义了你的引导地址,第二点要考虑的是你的软件的链接。硬件将跳转到引导地址,因此您显然必须确保您的二进制代码位于该地址并按预期格式化。

附带说明,一些 STM32H7 产品(例如 STM32H743 和 STM32H753)提供了使固件更新更容易的功能,称为 Flash Bank Swapping,它避免了修改引导地址或固件链接的需要。如果固件更新对您的产品来说是一个大问题,您可以考虑切换到 STM32H753。

【讨论】:

    【解决方案2】:

    您是否尝试对要保存新固件的特定地址进行简单的#define?我认为您可以在主文件中执行此操作。 还要从另一篇文章中检查这个答案: https://stackoverflow.com/a/64253004/10738372

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2015-07-28
    • 2012-03-05
    • 2011-06-10
    • 2010-09-25
    相关资源
    最近更新 更多