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/TMS570LS3137:如何将 TMS570LS3137单应用引导加载程序更改为双应用引导加载程序

Guru**** 2595805 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/880049/ccs-tms570ls3137-how-to-change-the-tms570ls3137-single-application-bootloader-to-dual-application-bootloader

器件型号:TMS570LS3137

工具/软件:Code Composer Studio

您好!

我使用的是 Code Composer Studio (CCS) 9.3.0.00012、我使用的硬件是 TMS570LS31x HDK 板。
我使用 QJ Wang 提供的 UART 引导加载程序项目。(特别感谢 QJ Wang 的帮助!)
以下是 URL: e2e.ti.com/.../869521

默认情况下、此 UART 引导加载程序工程只能更新闪存中的应用程序并将其存储在闪存中。
我想将其修改为双应用程序引导加载程序、它可以更新和存储两个应用程序。
双应用引导加载程序的主菜单可以更新或启动指定的应用程序。

我已经比较了 TI 官方手册《适用于 Hercules TMS570LS31x MCU 的 UART 引导加载程序》和 UART 引导加载程序的源代码、但我不知道该怎么做。
我不知道如何将 UART 引导加载程序的存储器地址分配给两个应用、
我不确定这是否与 Flag (跳转至应用程序代码)和 Ymodem 协议设置相关。

如何将默认 UART 引导加载程序工程更改为双应用引导加载程序?
请向我提供一些知识或建议、谢谢!


感谢您的帮助!

此致、Chen Yan-Li

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

    您好、Yan-Li、

    Ymodem 协议可以传输2个文件。 您必须在引导加载程序中使用 YMODE.c 来处理两个文件并将这两个文件编程到不同的位置。 请参阅 Ymodem ptotocol。

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

    QJ Wang、您好!

    感谢您的回复!
    我会研究您建议的引导加载程序中的 BL_YMODE.c 文件。
    您的意思是、我可以生成两个具有不同存储器位置设置的应用、
    然后我使用 Ymodem 传输选项两次传输.bin 文件。
    但我有一些关于应用程序的问题、我无法弄清楚。

    例如、以下是 UART 引导加载程序的主菜单:
    =========== 主 Meun====
    1.将应用程序映像下载到内部闪存
    2.从内部闪存上载应用程序映像
    3.执行应用程序代码
    4.获取引导加载程序版本
    获取器件信息
    ===================================

    假设我生成了"应用程序 X"、并将存储器起始位置设置为0x00010100、将"应用程序 Y"设置为0x00020000。
    然后使用选项1 (将应用程序映像下载到内部闪存)传输"Application Y"和"Application X"。
    "Application X"的内容是否会覆盖"Application Y"的内容? (假设首先传输应用程序 Y、然后传输 X)

    引导加载程序的主菜单只有一个选项可执行应用程序、似乎无法选择另一个应用程序。
    这是否意味着我需要一个新选项来执行另一个应用程序?
    我是否需要在 BL_CONFIG 中定义另一个 App_START_ADDRESS?


    感谢您的帮助!

    此致、Chen Yan-Li

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

    您好!

    您可以在 bl_config.h 中更改应用程序#2的应用程序起始地址、然后重新编译/加载引导加载程序、然后加载/编程应用程序#2

      BTW、应设置 CCS 闪存加载选项:仅擦除必要的闪存

    2.第二种方法,将第二个选项添加到主菜单中,例如6. 将第二个应用程序映像下载到内部闪存、然后修改代码  

    void UpdateerUART (void)

    字符键= 0;

    while (1)

    // Lite_TOPRIGHT_LED;
    UART_putString (UART、"\r\n\r\n 主菜单================================= \r\n");
    UART_putString (UART、" 1. 将应用程序映像下载到内部闪存\r\n);
    UART_putString (UART、" 2. 从内部闪存上传应用程序映像\r\n);
    UART_putString (UART、" 3. 执行应用程序代码\r\n");
    UART_putString (UART、" 4. 获取引导加载程序版本\r\n");
    UART_putString (UART、" 5. 获取设备信息\r\n");

    UART_putString (UART、" 6.  将第二个应用程序映像下载到内部闪存\r\n);

    UART_putString (UART、"======================================================================================== \r\n");

    KEY = UART_getKey (UART);

    如果(KEY = 0x31)

    /*在闪存中下载用户应用程序*/
    UART_Download();

    否则、如果(KEY = 0x32)

    /*从闪存上载用户应用程序*/
    UART_Upload ();

    否则、如果(KEY = 0x33)

    UART_putString (UART、"应用程序正在运行!! \n\n");
    JumpAddress =(uint32_t) app_start_address;
    ((((void (*.)(void)JumpAddress)();

    否则、如果(KEY = 0x34)

    get_software_Version();

    否则、如果(KEY = 0x35)

    get_hardware_Info();

    否则、如果(KEY = 0x36)

    UART_putString (UART、"无效编号!!! \n\n");

    否则、如果(KEY = 0x37)

      。 重新定义 APP_START_ADDRESS

      UART_Download();


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

    QJ Wang、您好!

    感谢您的帮助!
    我听从了您的建议、在 Bootloader:的 BL_UART.c 文件中进行了以下更改

    否则、如果(KEY = 0x36)

    /*下载闪存中的用户第二个应用程序*/
    UART_Download_2 ();

    否则、如果(KEY = 0x37)

    UART_putString (UART、"第二个应用程序正在运行!! \n\n");
    JumpAddress =(uint32_t) APP_START_ADDRES_2;
    ((((void (*.)(void)JumpAddress)();

    其他

    UART_putString (UART、"无效编号!!! \n\n");

    然后、我可以通过 HyperTerminal:显示引导加载程序的以下主菜单
    =========================== 主菜单=================================
    1.将应用程序映像下载到内部闪存
    2.从内部闪存上载应用程序映像
    3.执行应用程序代码
    4.获取引导加载程序版本
    5.获取设备信息
    6.将第二个应用程序映像下载到内部闪存
    7.执行第2个应用程序代码
    ===================================================================================================

    该引导加载程序可以选择要下载或执行的两个应用程序。
    但我发现该应用程序会覆盖另一个应用程序的闪存空间。

    下面是我实际遇到的情况:
    在 PC 中查看的"application X"和"application Y"的大小为90KB 和27KB (十进制)。
    引导加载程序中设置的 APP_START_ADDRESS 和 APP_START_ADDRES_2为0x00010100和0x00020000。

    理论上、第1个应用程序的存储器大小不能超过两个应用程序之间的38KB (十进制)大小。
    正如我所期望的那样,如果将"应用 Y"的内存起始地址设置为0x00010100,将"应用 X"设置为0x00020000,
    两个应用程序都将正常运行。
    但是,如果我将"应用程序 X"下载到内存起始地址0x00010100",
    存储器起始地址为0x00020000的"应用 Y"将无法正常工作。

    显然、"application X"的容量太大、导致"application Y"的内容被覆盖。
    是否有任何方法可以避免这种情况、限制容量过高的应用程序并保护可能被覆盖的应用程序空间。


    感谢您的帮助!

    此致、Chen Yan-Li