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.

[参考译文] RM46L852:有关从引导加载程序跳转到应用程序的问题

Guru**** 2394305 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/642733/rm46l852-issue-regarding-jump-from-bootloader-to-application

器件型号:RM46L852
主题中讨论的其他器件:HALCOGEN

我们在0x00位置有一个引导加载程序。 和应用从 oxc000开始。 成功刷写应用程序后,我们将跳转到引导加载程序中的应用程序代码,如下所示:

((void (*)(void)) 0xc000)();

我们能够成功跳转到应用程序代码、因为我们可以看到应用程序发出的调试消息。 但是、每当我们使用 rtiStartCounter (0)启动 RTI 计数器时、系统都会复位。 供参考、我们在引导加载程序中未使用 RTI。

以下是应用程序链接器文件:

引导程序(X):origin=0x0000C000 length=0x00000020
保留(R):origin=0x0000C020 length=0x000000E0
FLASH0 (RX):origin=0x0000C100 length=0x00033EFF

应用 sys_intvecs.asm:

.sect ".intvecs"
ARM

;------------------------------------------------------------------
;中断例程的导入引用

.ref _c_int00
.ref _dabort
.ref _irqDispatch
.ref phantomInterrupt
.def resetEntry

;------------------------------------------------------------------
;中断向量

resetEntry
b _c_int00
UndefEntry
b 未定义尝试
svcEntry
b svcEntry
PrefetchEntry
B prefetchEntry
b _dabort
b 相位中断
b _irqDispatch
LDR PC、[PC、#-0x1b0]

引导加载程序链接器:

引导程序(X):origin=0x00000000 length=0x00000020
Flash_API (RX):origin=0x00000020 length=0x000014E0
FLASH0 (RX):origin=0x00001500 length=0x0000AAFF

引导加载程序 sys_intvecs.asm:

.sect ".intvecs"
ARM

;------------------------------------------------------------------
;中断例程的导入引用

.ref _c_int00
.ref _dabort
.ref phantomInterrupt
.def resetEntry

;------------------------------------------------------------------
;中断向量

resetEntry
b _c_int00
UndefEntry
b 未定义尝试
svcEntry
b svcEntry
PrefetchEntry
B prefetchEntry
b _dabort
b 相位中断
LDR PC、[PC、#-0x1b0]
LDR PC、[PC、#-0x1b0]

请帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们已按如下方式更新引导加载程序 sys_intvecs.asm:

    ;*********
    .sect ".intvecs"


    ;------------------------------------------------------------------
    ;中断例程的导入引用

    .ref _c_int00
    .ref _SVC

    ;------------------------------------------------------------------
    ;中断向量
    ;请更改#0x??? 在 bl_config.h 中定义的指定图像位置

    b _c_int00 ;0x00
    b #0xBFF8 ;0x04
    b #0xBFF8 ;0x08、软件中断
    b #0xBFF8 ;0x0C,中止(预取)
    b #0xBFF8 ;0x10、中止(数据)
    保留尝试
    b 保留尝试 ;0x14
    LDR PC、[PC、#-0x1b0] ;0x18
    LDR PC、[PC、#-0x1b0] ;0x1C

    我们仍然遇到同样的问题。 供参考、我们在引导加载程序中未使用任何中断。 请帮助
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    供参考
    我们在启动时在主应用中启用了安全功能。 但是、就我们可以调试而言、代码执行会通过这些测试、但会卡在 rtiStartCounter (0)上
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Vijayendra、

    我将您的帖子转发给我们的引导加载程序专家之一。 他们应该能够查看您的设置、了解问题所在的位置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Chuck。 只是为了更新您:
    我们的应用程序在几条指令后复位、控制转到预取条目。 此时,我们可以看到 CP15_DATA_FAULT_STATUS=0x0000409。
    我认为这是由 ECC 错误造成的。
    在通过引导加载程序刷写应用程序时,我们使用以下命令来处理自动 ECC 生成:
    fapi_issueProgrammingCommand ((uint32_t *) DestinationAddress、(uint8_t *) SourceAddress、(uint32_t) BytesToWrite、0、0、 Fapi_AutoEccGeneration);
    请提供建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如前所述、复位可能不是由 RTI 中断引起的、而是由 ECC 引起的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Vijayendra、

    请更改应用程序 sys_intvecs.asm 中 IRQ 的中断矢量:

    更改:b _irqDispatch

    更改为 :LDR PC、[PC、#-0x1b0]

    任何使用通过 HALCoGen 生成的 RTI ISR 的情况。

    LDR 指令在 ‘PC - 0x1B0’处加载存储器,即‘0x18 + 0x08 - 0x1B0 = 0xFFFFFE70’。 这是 IRQVECREG 的地址、该地址存储 挂起的 ISR 地址。