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.

[参考译文] CCS/TMS570LC4357:引导加载程序

Guru**** 2482105 points
Other Parts Discussed in Thread: CODECOMPOSER, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/710466/ccs-tms570lc4357-bootloader

器件型号:TMS570LC4357
主题中讨论的其他器件:CODECOMPOSERUNIFLASH

工具/软件:Code Composer Studio

我使用的是 TI 示例引导加载程序示例。

在两个 UART 上编译代码和示例函数。

现在、我需要将引导加载程序和我的项目组合在一起、以便引导加载程序在被告知时跳转到我的代码(菜单项3)。

引导程序示例将转到定义为0x200100的 APP_START_ADDRESS。

当前单步执行代码、Code Composer 在尝试跳转到该地址时挂起。

我目前在两个项目中都配置了 Code Composer、"只擦除"必要的扇区(用于程序加载)、这样加载一个程序不会擦除另一个程序、因为这两个程序都必须按顺序加载。

(我尚未下载十六进制文件、只需尝试手动加载两个程序即可确保我了解编译器设置。)

以下是我的问题:

  • 在 Code Composer 中、加载的地址被配置在哪里?
  • 项目中的默认设置是将代码放置在第一个库中、还是需要修改需要引导加载程序的内容?
  • 如何配置 code composer 以生成适合的十六进制文件以进行非 CodeComposer 代码加载?
  • 您能确认我需要使用超级终端等 Ymodem 协议工具吗?

非常感谢

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

    您好、John、

    CCS 将根据 cmd 文件中定义的地址分配闪存空间、并将代码加载到该地址

    存储器{

      VCTOR (x):   origin=0x00004000 length=0x00000020

      FLASH0 (RX):origin=0x00004020 length=0x00100000

    剖面{

      .intvecs:{}>向量

      .text align (32):{}> FLASH0

    代码将从0x4000开始加载到闪存

    2.否

    3. CCS 项目->属性-> ARM 十六进制实用程序,然后启用该实用程序,选择格式

    4.引导加载程序示例代码使用 YMODEM 协议。 您可以使用不同的协议开发引导加载程序。

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

    谢谢

    我已将引导加载程序设置为

    引导程序(X):origin=0x00000000 length=0x00000020

    FLASH0 (RX):origin=0x00000020 length=0x001FFFE0

    FLASH1 (RX):origin=0x00200000 length=0x00200000

    堆栈(RW):origin=0x08000000 length=0x00001500

    RAM (RW):origin=0x08001500 length=0x0007EB00

    和应用程序:

    引导程序(X):origin=0x00000000 length=0x00000020

    FLASH0 (RX):origin=0x00008100 length=0x001F7EFF

    FLASH1 (RX):origin=0x00200000 length=0x00200000

    堆栈(RW):origin=0x08000000 length=0x00001500

    RAM (RW):origin=0x08001500 length=0x0007EB00

    我已将应用程序的跳转地址手动加载到"_c_int00"的地址

    看起来应该进行跳转(我已经检查了跳转地址的加载)、但是 由于代码编写 在两个应用程序之间不可见、所以实际上无法进入第二个初始化。

    我如何才能看到它使跳转(Code Composer 不会进入看不到的应用程序空间、应用程序未初始化)?

    它看起来像是在矢量表中进入"undefEntry"

    使用以下代码进行跳转:

    JumpAddress =(uint32_t) app_start_address;

    ((((void (*.)(void)JumpAddress)()

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

    "undercry "表示在 APP_START_ADDRESS 处没有有效代码。 请从 APP_START_ADDRESS 开始将您的应用编程到闪存扇区。 您可以使用引导加载程序或 Uniflash 对应用程序进行编程以进行测试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我最初也认为、但是我在启动的应用程序中放置一些 UART 打印件、检查了跳转地址中的进度、以便我可以跟踪转换并查看问题发生的位置。 代码毕竟已成功跳转到...

    我在启动"新"应用程序时遵循了进度。 它通过了"_c_int00" MCU 函数、然后开始进入应用程序。 在多次调用后、它失败(即函数 A、调用函数 B、尝试调用函数 C。经过一些调试(我最终使函数 C 成为一个简单的 NOP 返回)、我得出结论、它与栈有关。 第二个应用程序在其自身启动时工作正常、只是在其从引导加载程序"跳转到"时不工作。

    我看到 MCU 启动过程会重置堆栈、本来应该已经解决了问题、但运气不好。

    现在、我在同一个工程中使用了引导加载程序和应用程序、以获得更好的可见性、但此配置中不会出现问题。

    有什么想法吗?

    j

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

    尊敬的 John:

    在"Registers"窗口中、请检查错误状态和地址。 这些信息可以帮助您确定导致问题的指令。

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