0

我有一个 steval-stwinkt1 板,我正在尝试启用对 DFU 模式的支持。

我将服装引导加载程序固件刷新到闪存的开头(0x8000000),它可以让您加载到由 DFU 模式上传的另一个固件或留在当前程序中以刷新新固件抛出 USB。

我使用了这个 st 教程- https://www.youtube.com/watch?v=n_LDXOQHerU

我尝试了 STM32Cube 附带的 .dfu 包,我看到程序运行成功,所以我假设引导加载程序可以工作。

但是当我尝试从我的软件制作我自己的 DFU 包时,该软件永远不会加载,我遇到了严重的错误。我根据 ST totorial 和我所做的一些研究将软件移动到 0x800C000,方法是更改​​以下行:

在 FLASH.ld 文件中:

    FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 2048K

至:

    FLASH    (rx)    : ORIGIN = 0x800C000,   LENGTH = 2048K

并在 stm32l4r9xx.h 中将 FLASH_BASE 更改为:

    #define FLASH_BASE            (0x0800C000UL)

在另一次尝试中,我尝试了更改而不是更改FLASH_BASEVECT_TAB_OFFSET但它仍然没有用。

要制作 dfu 包,我使用 dfu-tool(我使用 linux)并使用以下命令:

    dfu-tool convert dfuse software.bin software.dfu

还尝试使用我使用的教程中使用的官方工具转换十六进制 int dfu 包,但仍然没有工作

当我加载 dfu 包时,我需要进行哪些更改才能使我的软件正常工作?

谢谢

伊泰

4

1 回答 1

-1

在我看来,您似乎忽略了一个事实,即您的应用程序专用闪存大小将不再是 2048K,因为您的自定义引导加载程序现在放置在闪存的开头。因此,您需要从总闪存大小中减去应用程序的闪存来源:

 FLASH    (rx) : ORIGIN = 0x800C000,    LENGTH = 2048K - (ORIGIN(FLASH) - 0x8000000)

在这种情况下,建议尝试使用HardFault_Handler()和一些编码来调试硬故障。然后,您将能够提取和分析发生硬故障时的链接寄存器、程序计数器、程序状态寄存器等。

于 2020-08-24T17:41:00.373 回答