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.

[参考译文] MSP432E401Y:RTOS 应用程序固件升级

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1493087/msp432e401y-rtos-application-firmware-upgrade

器件型号:MSP432E401Y
主题中讨论的其他器件:UNIFLASH

工具与软件:

您好!

我们将根据示例代码"boot_serial_usb_flash_MSP432"对 RTOS 应用程序进行固件升级、

在闪存中成功写入数据后、复位时出现硬故障。

内核寄存器

         -SP 指向0x20000000地址(即应用程序文件中.vecs 的起始地址)

         指向 Hwi_excHandler 的-Link 寄存器

引导加载程序起始地址为0x00000000、我的应用程序起始地址为0x00004000

您可以帮助我们解决该问题吗?

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

    您好!

     0x0处是否有有效的引导加载程序? 展示了0x0处闪存的存储器浏览器。  

     您是否 在 release.cfg 文件中设置了 m3Hwi.resetVectorAddress = 0x4000? 您的应用程序取决于另一个 TI-RTOS 应用程序。 在工作区中、需要查找 tirtos_builds_MSP_EXP432E401Y_RELEASE_ccs 项目。 在此项目中、您需要 在.cfg 文件中将 m3Hwi.resetVectorAddress 设置为0x4000。 另请参阅此帖子、由 Chester https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1024278/tm4c1294ncpdt-rtos-bios-not-working/3787593#3787593回答

    在 TI-RTOS .cfg 文件中、添加:

    /*为此应用设置一个非零复位矢量地址、因为是由放置在地址零的引导加载程序启动的。
    链接器命令文件中的闪存区域设置为从该地址开始、以避免使用任何闪存
    为引导加载程序保留。 */
    m3Hwi.resetVectorAddress = 0x4000;

    如果仍有问题、请使用以下链接进行调试。  

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

    您好、Charles、

    感谢您的建议。 我们有一个查询

    在非 RTOS 应用程序中、矢量表置于应用程序地址的开头。

    但是、在 RTOS 应用程序中、复位矢量保留在应用程序的起始地址、而.vecs 段放置在0x20000000。

    在这种情况下、哪个地址应被视为 VTABLE_START_ADDRESS?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="497074" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1493087/msp432e401y-rtos-application-firmware-upgrade/5736674 #5736674"]

    在这种情况下、哪个地址应被视为 VTABLE_START_ADDRESS?

    [报价]

    这个文件是什么? 您为什么需要更改它?

    查看下面的步骤我可以执行、并且我能够运行链接到0x4000的 RTOS 应用程序。  

    1.导入 boot_serial_uart_flash_MSP_EXP432E401Y_nortos_ccs 项目作为引导加载程序。 此引导加载程序示例期望应用程序从0x4000开始。 如果需要、可以使用其他引导加载程序示例。  

    2.我 将 buttonled_MSP_EXP432E401Y_tirtos_ccs 应用项目导入 CCS 中。 导入后、它还将自动导入 tirtos_builds_MSP_EXP432E401Y_release_ccs 依赖项目。  tirtos_builds_MSP_EXP432E401Y_RELEASE_CCS 提供了适用于 TI-RTOS 内核的配置。  

    3.在 tirtos_builds_MSP_EXP432E401Y_release_ccs 中、我修改了 release.cfg、唯一做的就是添加下面这一行。  

    m3Hwi.resetVectorAddress = 0x4000;

     在  buttonled_MSP_EXP432E401Y_tirtos_ccs 中、我修改的唯一内容是.cmd 文件、我将闪存映射到0x4000处的开头。 我没有改变任何其他东西。  

    /*
    *==== MSP_EXP432E401Y_TIRTOS.cmd ===
    *为 MSP_EXP432E401Y M4F 定义存储器块开始/长度
    */
    --- stack_size=1024 /* C stack 也用于 ISR stack */

    HEAPSIZE = 0x20000;/* HeapMem 使用的堆缓冲区的大小*/

    小程序

    FLASH (RX):origin = 0x00004000、length = 0x000FC000
    SRAM (RWX):origin = 0x20000000、length = 0x00040000

    5.    构建 boot_serial_uart_flash_MSP_EXP432E401Y_nortos_ccs 和 buttonled_MSP_EXP432E401Y_tirtos_ccs 后、我使用 Uniflash 同时加载这两个.out 文件。  

    6.将引导加载程序和应用程序都加载到闪存后、我可以按 LaunchPad 上的 SW1或 SW2、然后 可以看到 D1或 D2 LED 闪烁。 我认为从引导加载程序跳转到应用程序会产生任何故障。  

    为什么要尝试它、然后将它与您的设置进行比较? 我问你的问题,你从来没有回答我。 我询问您是否在0x0处看到有效的引导加载程序。 我还询问您是否将   m3Hwi.resetVectorAddress = 0x4000添加到.cfg 文件中、您从未回答过我。  

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

    尊敬的 Charles:

    很抱歉错过了回答您的问题

    是的、0x0处有一个有效的引导加载程序、并且在 tirtos_builds_MSP_EXP432E401Y_release_ccs 中的.cfg 文件中添加了 m3Hwi.resetVectorAddress = 0x4000

    此文件是什么? 为什么需要更改它?

    该文件在 tirtos_builds_MSP_EXP432E401Y_release_ccs 中为 linker.cmd 文件 、我尚未对其进行任何修改。

    请参阅以下步骤我可以执行此操作、我可以运行链接到0x4000的 RTOS 应用程序。  [报价]

    已尝试执行上述步骤。 通过 UniFlash 完成时可以使用、但当我使用 BSL Scripter 执行 USB 固件升级时、固件会卡在硬故障处理程序中。

    此外、在检查故障状态寄存器时、我观察到可能触发了硬故障处理程序的总线故障。 入栈时的总线故障(用于异常进入)以及不精确的数据总线错误位都被置位了。"

    您可以帮助我们使用 BSL 脚本实现固件升级吗? 如果需要我的详细信息、请告诉我

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="497074" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1493087/msp432e401y-rtos-application-firmware-upgrade/5737666 #5737666"]

    是的、0x0处有一个有效的引导加载程序、并且在 tirtos_builds_MSP_EXP432E401Y_release_ccs 中的.cfg 文件中添加了 m3Hwi.resetVectorAddress = 0x4000

    [报价]

    好的。 引导加载程序位于0x0处。  

    尝试了上述步骤。 它在通过 UniFlash 完成时可以正常工作、但当我使用 BSL Scripter 执行 USB 固件升级时、它会卡在硬故障处理程序中。[/QUOT]

    我认为可能存在一个问题、我需要我的 CCS 工具链团队来提供帮助。 下面是我试过的。  

    1.首先使用 BSL 脚本程序加载 USB 引导加载程序。  

    2.运行 USB 引导加载程序后、使用 BSL 脚本程序加载  buttonled_MSP_EXP432E401Y_tirtos_ccs.txt 文件。 加载正常、但 LED 不闪烁。  

    3.再次重复步骤1。  

    4.我生成 buttonled_MSP_EXP432E401Y_tirtos_ccs 的二进制文件、如 buttonled_MSP_EXP432E401Y_tirtos_ccs.bin 中所示。 您可以插入下面一行来亲自试用。 post-build 命令为:

    "${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin "${BuildArtifactFileName}""${BuildArtifactFileBaseName}.bin""${CG_TOOL_ROOT}/bin/armofd "${CG_TOOL_ROOT}/bin/armhex "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin

    5.我不使用 BSL_Scriptter.exe、而是使用另一个为 USB DFU 获取 bin 文件的工具。 我使用的工具称为 LM 闪存编程器。 您可以在 https://www.ti.com/tool/LMFLASHPROGRAMR 上找到该工具

    6.运行 USB bootloader 后、应该找到 Device Firmware Update。 确保您未选择其他 DFU 器件、以免意外升级错误的 DFU 器件。  

    7.提供.bin 文件并将地址设置为0x4000、然后点击"Program"按钮。 完成后、当我按下 LaunchPad 上的 SW1/SW2按钮时、我可以看到 LED 闪烁。

     

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

    尊敬的 Charles:

    感谢您的答复。

    我们尝试使用 LM 闪存编程器可成功加载程序。

    但是、我们需要 BSL 脚本程序(将构建自定义应用程序以执行脚本)、因为我们的产品将在现场更新。 我们将无法培训最终用户使用 LM 闪存编程器、我们担心在执行此操作时会更改某些设置。 另一个原因是我们不想透露我们的硬件详细信息、因此计划提供我们自己的可执行文件。

    请帮助我们与 BSL 脚本,查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是我们需要 BSL 脚本程序(将构建自定义应用程序来执行脚本)、因为我们的产品将在现场更新。 我们将无法培训最终用户使用 LM 闪存编程器、我们担心在执行此操作时会更改某些设置。 另一个原因是我们不想透露我们的硬件详细信息、因此计划提供我们自己的可执行文件。

    如果是这种情况、我建议您使用 dfuprog.exe、这是一个命令行工具。 您可以在 C:\ti\TivaWare_C_Series-2.2.0.295\tools\bin\dfuprog.exe 中找到此工具。 您可以从 https://www.ti.com/tool/SW-TM4C 下载 TivaWare。 dfuprog.exe 的源代码位于 C:\ti\TivaWare_C_Series-2.2.0.295\tools\dfuprog。  

    我使用 CCS 生成应用程序.TXT 文件、然后使用 USB DFU 引导加载程序加载该文件、会成功加载、但不会执行。 当我将 USB 引导加载程序加载的内存内容与使用 Uniflash 加载.out 文件的方式进行比较时、我会看到非常细微的差异。 一些位置不同。 我不知道如果 CCS 在.txt 生成情况下或 BSL_Scripter 方面存在这个问题。 解决工具链问题会花费大量的时间。 这就是为什么我建议您使用 dfuprog.exe、因为您可以使用提供的源代码进行任意自定义。  

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

    尊敬的 Charles:

    我们在建议的位置查找 dfuprog.exe 文件、但找不到该文件。

     

    您能不能告诉我们在哪里找到它或它被重命名..

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

    您好!

     您是否可以下载 SW-USB-win-2.2.0.295.msi? 请参见下文。 下载后、目标位置为 C:\Program Files (x86)\Texas Instruments\Tiva\USB_Examples。

    我还要在此处附加 dfuprog.exe 可执行文件。 您可以在 C:\ti\TivaWare_C_Series-2.2.0.295\tools\dfuprog 中找到源代码

    e2e.ti.com/.../dfuprog.exe