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.

[参考译文] TM4C123GH6PM:将引导加载程序放入 ROM

Guru**** 2394075 points
Other Parts Discussed in Thread: EK-TM4C123GXL, TMS320F28384S

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1158583/tm4c123gh6pm-putting-bootloader-in-rom

器件型号:TM4C123GH6PM
Thread 中讨论的其他器件:EK-TM4C123GXL

大家好、

我正在使用引导加载  程序、但似乎不知道如何将 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c123gxl\boot_demo_uart_rom.bin 文件编程到 ROM 中。

我正在使用:

但实际上不确定它在 ROM 或闪存中。

然后、我使用 CCS 加载 boot_demo1、甚至可以使用调试器来查看它是否跳转到引导加载程序:

JumpToBootLoader(void)
{
    //
    // Disable all processor interrupts.  Instead of disabling them
    // one at a time, a direct write to NVIC is done to disable all
    // peripheral interrupts.
    //
    HWREG(NVIC_DIS0) = 0xffffffff;
    HWREG(NVIC_DIS1) = 0xffffffff;

    //
    // Return control to the boot loader.  This is a call to the SVC
    // handler in the boot loader.
    //
    (*((void (*)(void))(*(uint32_t *)0x2c)))();
}

但我不确定是将0x2C 更改为0x100 0000 还是映射到 ROM 的其他值。

假设系统实际上处于引导加载程序模式、我尝试使用 UART 发送所需的程序并获取以下消息:


感谢您的任何反馈。  我知道我即将完成这项工作。

谢谢、

Bob

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

    Bob、您好!

    您无法在 ROM 中对任何内容进行编程。 ROM 固件是只读的、在我们发货时存在于每个器件中。 ROM 引导加载程序示例展示了如何使用正确的准备来调用 ROM 引导加载程序、以允许执行引导加载程序、然后执行适当的内存跳转来调用 ROM 引导加载程序。

    boot_demo1项目不是要与 ROM 引导加载程序一起使用、而是与 boot_serial 中的闪存引导加载程序一起使用。

    此致、

    Ralph Jacobi

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

    我认为我理解。  为了使我的应用程序能够与 ROM 引导加载程序配合使用、我需要让我的主机按照非常具体的协议发送数据包。  例如、将.bin 文件分解为60字节数据包、然后侦听每个 ACK。

    是否有办法让应用程序在 Tiva 芯片上运行、充当主机和 ROM 引导加载程序之间的中间人?   (我的应用程序中的主机基本上会下载1000字节的文件、并且需要一个命令来保存下1000字节的文件。)   

    您建议在什么示例中处理闪存中的所有内容?  (我猜是 boot_serial。)  如需其他文档或示例的链接、请访问。

    谢谢、

    Bob

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

    Bob、您好!

    [引用 userid="51949" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1158583/tm4c123gh6pm-putting-bootloader-in-rom/4356202 #4356202"]我需要让主机按照非常具体的协议发送数据包。  例如、将.bin 文件分解为60字节数据包、然后侦听每个 ACK。

    是的、该协议概述如下: https://www.ti.com/lit/pdf/spma074

    [引用 userid="51949" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1158583/tm4c123gh6pm-putting-bootloader-in-rom/4356202 #4356202"]Tiva 芯片上运行的应用程序是否可以充当主机和 ROM 引导加载程序之间的中间人?   (我的应用程序中的主机基本上会下载1000字节的文件、并且需要一个命令来保存下1000字节的文件。)   [/报价]

    此时、您应该只运行一个基于闪存的引导加载程序。 boot_serial 是起点、但您可能需要编辑闪存引导加载程序本身、该源代码可在主 TivaWare 目录的 boot_loader 文件夹中找到。

    本文档对于了解如何在 TM4C 器件上使用引导加载程序也很有用: https://www.ti.com/lit/pdf/spmu301

    此致、

    Ralph Jacobi

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

    谢谢你。  我开始朝这个方向走。

    我感谢你的帮助。

    Bob

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

    拉尔夫

    还有一个问题。  如果我将新程序写入0x20000、跳转到该位置的命令是什么?  我希望这是一个简单的东西、比如:

    HWREG (NVIC_DIS0)= 0xffffffff;
    HWREG (NVIC_DIS1)= 0xffffffff;

    //
    //尝试跳转到存储在128K 的应用程序
    //
    (*(void (*)(void))(*(uint32_t *) 0x20000))();

    但这似乎不起作用。  (我甚至尝试了0x20004来越过矢量表。)

    感谢您的帮助。

    Bob

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="51949" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1158583/tm4c123gh6pm-putting-bootloader-in-rom/4356424 #4356424">另一个问题。  如果我将新程序写入0x20000、跳转到该位置的命令是什么?  [/报价]

    对于仅支持 Thumb 模式的 ARM Cortex-M 器件、需要设置分支地址的最低有效位来指示 Thumb 模式、否则会发生硬故障。

    例如、尝试:

    HWREG(NVIC_DIS0) = 0xffffffff;
    HWREG(NVIC_DIS1) = 0xffffffff;
    
    //
    // trying to jump to application stored at 128K
    //
    (*((void (*)(void))(*(uint32_t *)0x20001)))();

    有关  更多信息、请参阅 TMS320F28384S:CM4中的代码分支。

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

    Bob、您好!

    若要添加到 Chester 的注释中、如果您检查已编译工程的.map 文件输出、您将看到入口点以及所有应用程序函数都具有以最低有效位开头的地址:

    入口点符号:"_c_int00_noargs"地址:00004625

    此致、

    Ralph Jacobi