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.

[参考译文] MSPM0L1306:使用应用+引导加载程序偏移生成十六进制文件

Guru**** 2680875 points

Other Parts Discussed in Thread: MSPM0L1306

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1591485/mspm0l1306-hex-file-generation-with-offset-for-the-application-bootloader

器件型号: MSPM0L1306

您好:

我在 CCS v20.3.1.5 上有两个适用于 MSPM0L1306 的项目。
一种是引导加载程序、另一种是应用程序(应放置在引导加载程序之后)。  
我使用应用工程的二进制输出文件创建升级包、从二进制生成到引导加载程序进行升级、升级包都能正常工作。

现在,我必须为生产编程创建一个 Intel hex 文件:我要生成引导加载程序的 hex 文件和应用程序的 hex 文件,以便将它们合并到一个全局文件中。

问题在于应用工程的十六进制文件生成。 十六进制文件由编译器生成、但似乎从地址 0x00 开始。 即使我的 linkerfile 将应用程序设置为 0x5400 也是如此。

我使用编译后步骤生成十六进制文件、如下所示:“${CG_TOOL_ROOT}/bin/tiarmhex.exe --diag_wrap=off --Intel “${BuildArtifactFilePath}“--outfile “${BuildDirectory}/application.hex“

为了您的理解、我将 linkerfile 的内容附加到了这篇文章中。

linkerfile.txt 

如何将应用程序存储器偏移量应用于十六进制文件?

感谢你的帮助。
Alexandre。

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

    尊敬的 Alexandre:

    是否能够使用 TI-TXT 十六进制文件? 如果是这样、您可以通过调整@符号后面的值来轻松更改开始写入的存储器地址。

    在下面的示例中、如果您要使此应用程序代码位于 0x1000 处、只需将第一行更改为@1000。

    @0000
    00 20 00 20 BB 01 00 00 C3 01 00 00 C3 01 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 C3 01 00 00 
    00 00 00 00 00 00 00 00 C3 01 00 00 C3 01 00 00 
    C3 01 00 00 C3 01 00 00 C3 01 00 00 C3 01 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 C3 01 00 00 
    C3 01 00 00 C3 01 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 C3 01 00 00 
    C3 01 00 00 C3 01 00 00 C3 01 00 00 C3 01 00 00 
    00 00 00 00 00 00 00 00 C3 01 00 00 C3 01 00 00 
    C3 01 00 00 C3 01 00 00 00 00 00 00 C3 01 00 00 
    00 00 00 00 C3 01 00 00 C3 01 00 00 C3 01 00 00 
    82 B0 29 48 29 49 01 23 01 93 9A 07 1B 06 03 24 
    00 94 E4 04 26 4D 27 4E 6E 60 27 4F 7E 60 27 4E 
    2E 60 3E 60 10 26 B7 1E 3F 1F 00 BF FC D2 24 4E 
    81 27 F7 60 37 61 B7 62 37 60 0E 46 10 3E 32 60 
    0A 62 07 46 10 3F 23 26 F6 04 3E 60 06 62 1D 4D 
    00 26 2E 60 1C 4D 2D 68 00 9E B5 43 1A 4E 35 60 
    B5 68 01 9E B5 43 18 4E B5 60 05 46 20 3D 2C 60 
    0D 46 20 3D 2A 60 3B 60 00 BE 14 4D AE 1E 36 1F 
    00 BF FC D2 04 60 03 60 0A 60 AE 1E 36 1F 00 BF 
    FC D2 04 60 03 60 0A 60 AE 1E 36 1F 00 BF FC D2 
    04 60 03 60 0A 60 E9 E7 B0 32 0A 40 B0 12 0A 40 
    00 08 0A 40 03 00 00 B1 00 28 0A 40 01 00 00 26 
    90 80 42 40 08 03 0B 40 00 01 0B 40 00 24 F4 00 
    06 48 80 F3 08 88 00 BF 00 BF 00 F0 10 F8 00 20 
    FF F7 8E FF 01 20 00 F0 03 F8 C0 46 00 20 00 20 
    00 F0 01 F8 FE E7 00 BF 70 47 E9 E7 70 47 01 20 
    70 47 FE E7 00 00 00 00 
    q
    

    此致、

    Owen

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

    尊敬的 Owen:

    在生产过程中、我们始终将 Segger Flasher Pro 与 JFlash 实用程序+十六进制文件程序配合使用。
    这就是我需要十六进制文件的原因。

    此致、

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

    尊敬的 Alexandre:

    我认为 TI-TXT 十六进制文件格式应该能与 JFlash 实用程序配合使用(来自 JFlash 文档)

    此致、

    Owen

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

    Owen、
    我升级了 JFlash 实用程序、现在可以使用 ti-txt 文件。 但我仍然有相同的问题、ti-txt 文件基地址是“@0000“、并且文件末尾附近有另一个地址指示符“@5280“。
    我知道可以用一个简单的脚本添加偏移量、但 TIarm.exe 编译器是否有任何方法来管理它?  

    此致
    Alexandre

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

    尊敬的 Alexandre:

    我认为问题出在您的链接器文件上。 我会在 bim_sample_image 示例中引用链接器文件:

    /*****************************************************************************
    
      Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/
    
      Redistribution and use in source and binary forms, with or without
      modification, are permitted provided that the following conditions
      are met:
    
       Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    
       Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the
       distribution.
    
       Neither the name of Texas Instruments Incorporated nor the names of
       its contributors may be used to endorse or promote products derived
       from this software without specific prior written permission.
    
      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    
    *****************************************************************************/
    -uinterruptVectors
    
    #define MCUBOOT_HEAD_SIZE             0x100
    
    /* Memory map. Should match the map in the flash_map_backend.c of the boot application */
    #define BOOT_PRIMARY_BASE_ADDRESS     0x5400
    #define BOOT_PRIMARY_SIZE             0x5400
    #define BOOT_SECONDARY_BASE_ADDRESS   0xA800
    #define BOOT_SECONDARY_SIZE           0x5400
    
    #ifdef PRIMARY_SLOT
    
    #define FLASH_BASE (BOOT_PRIMARY_BASE_ADDRESS + MCUBOOT_HEAD_SIZE)
    #define FLASH_SIZE (BOOT_PRIMARY_SIZE - MCUBOOT_HEAD_SIZE)
    
    #else
    
    #define FLASH_BASE (BOOT_SECONDARY_BASE_ADDRESS + MCUBOOT_HEAD_SIZE)
    #define FLASH_SIZE (BOOT_SECONDARY_SIZE - MCUBOOT_HEAD_SIZE)
    
    #endif
    
    MEMORY
    {
    	FLASH (RX) : origin = FLASH_BASE, length = FLASH_SIZE
    	SRAM  (RWX) : origin = 0x20000000, length = 0x00001000
    }
    
    SECTIONS
    {
        .intvecs:   > FLASH_BASE
        .text   : palign(8) {} > FLASH
        .const  : palign(8) {} > FLASH
        .cinit  : palign(8) {} > FLASH
        .pinit  : palign(8) {} > FLASH
        .rodata : palign(8) {} > FLASH
        .ARM.exidx    :  palign(8)  {} > FLASH
        .init_array   :  palign(8)  {} > FLASH
        .binit        : palign(8) {} > FLASH
        .TI.ramfunc   : load = FLASH, palign(8), run=SRAM, table(BINIT)
    
        .vtable :   > SRAM
        .args   :   > SRAM
        .data   :   > SRAM
        .bss    :   > SRAM
        .sysmem :   > SRAM
        .stack  :   > SRAM (HIGH)
    }
    

    此致、

    Owen

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

    尊敬的  李欧文 :

    我想知道我的链接器文件问题出在哪里。 我和大家分享了某种“light"版本“版本、但实际上我在链接器文件中有“#ifdef"预“预编译器指令。

    移动数据
      #ifdef BOOTLOADABLE
      FLASHUSERDATA (RX) :origin = 0x00003000、length = 0x00002400
      闪存中      (Rx) :origin = 0x00005400、长度= 0x0000ABF0
      #else
      /*保留内存末尾的应用程序数据、将不使用最后一个扇区*/
      /*调试中的应用程序从 0 个地址放置。 */
      /*应用程序数据不会放置在可引导应用程序和调试配置之间的同一位置。 */
      闪存中      (Rx) :origin = 0x00000000、长度= 0x0000ABF0
      FLASHUSERDATA (RX) :origin = 0x0000D800、length = 0x00002400
      #endif
      SRAM       (rwx):origin = 0x20000000、length = 0x00001000
      BCR_CONFIG   (R) :origin = 0x41C00000、length = 0x000000FF
      BSL_CONFIG   (R) :origin = 0x41C00100、length = 0x00000080
    }


    在我的工程中、我设置了 2 个配置(调试和可引导加载)、其中一个配置在预定义中具有“BOOTLOADBLE"符号“符号。

    由于我不明白的原因,当我更改编译配置时:  

    • IDE 将动态激活/停用链接器文件中的代码:OK
    • 编译器绝不会将“BOOTLOADBLE"符号“符号视为有效符号。 :不正常
      • 这就是在 0x00 放置指令的原因

    我尝试直接在链接器文件中添加“#define BOOTLOADBLE“进行测试、之后输出文件从 0x5400 开始。

    我应该假设在项目配置中添加“BOOTLOADBLE"定义“定义的位置?  

    此致
    Alexandre。

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

    您好、

    我找到了解决方案。
    工程配置中的预处理器符号有两个位置。 一个仅用于编译器、另一个用于链接器。  
    现在、我的“bootloading"配置“配置无需任何权变措施即可正常工作。


    此致
    Alexandre。

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

    尊敬的 Alexandre:

    很抱歉,由于最近在美国度假,回复延迟,我是不在办公室。

    我看到您找到了该问题的解决方案、但如果您需要任何进一步的帮助、请随时打开一个新主题。

    此致、

    Owen