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.

[参考译文] TMS320F28388D:连接管理器引导加载程序跳转至地址/重新启动问题。

Guru**** 2549090 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1568871/tms320f28388d-connectivity-manager-bootloader-jump-to-address-restart-problem

器件型号:TMS320F28388D


工具/软件:

大家好、 我正在针对 28388D 开发引导加载程序工程。 操作方式与此 CPU1 是主器件、它会引导 CPU2 和 CM。CPU1 从通信总线接收数据包并通过 IPC 中断发送到 CPU2/CM。 CM 将二进制文件写入自己的闪存。 当更新序列完成时、CM 和 CPU1 握手、CM 尝试跳转到新的应用程序代码启动。

CM 引导加载程序应用程序驻留在 CMBANK 扇区 0 上。 它由 CPU1 引导  DEVICE_BOOTCM ( BOOT_BOOT_BOOT_TO_FLASH_SECTOR0)。  在运行并获得二进制文件后,它会更新 CMBANK 扇区 4 的闪存部分。(我已经通过 CCS debug 中的内存保存函数检查了, Amy 应用程序的二进制文件和引导加载程序更新了一个是相同的。 我还检查了 ECC 是正确的并且没有引起错误)。 更新完成后、CM 尝试 使用以下代码跳接以启动新的应用程序、但会进入故障状态。

#pragma CODE_SECTION (JUMP_TO_APP、“.TI.ramfunc")“)

typedef void (* AppEntryFunc_t)(void);

静态内联 void JUMP_TO_APP (void)

__disable_irq();

1) 将 Re 点矢量表映射到应用的表
SCB_VTOR = 0x00210000;

uint32_t appStack =*((volatile uint32_t *)(0x00210000+ 0U));

uint32_t appEntry =*((volatile uint32_t *)(0x00210000+ 4U));//例如 0x00210BB1

__set_MSP (appStack);

AppEntryFunc_t AppStart =(AppEntryFunc_t )( appEntry );

AppStart();

}

根据我们的朋友聊天这个布局是正确的:  

位置的矢量表 0x00210000  Heavy check markVTOR 设置为  0x00210000  Heavy check mark.text活在后面 0x00210800  Heavy check markμ s

重置处理程序、位置为 0x00210C60 _c_int00_noinit_noargs在处输入 0x00210BB1  (Thumb 位= 1) Heavy check mark

这一问题的原因是什么?我该如何解决?

我认为 TI 资源中缺少有关此过渡的示例和文档。

此致、