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.

[参考译文] TMS320F28388S:与客户引导加载程序相关的咨询

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1428110/tms320f28388s-customer-bootloader-related-inquiries

器件型号:TMS320F28388S
Thread 中讨论的其他器件:C2000WARE

工具与软件:

我正在为 F28388S 设计引导加载程序。
我想通过 SCI 等下载使用 Teraterm 等的程序(无需更改引导模式)。
我希望在使用仿真器下载内部闪存时、通过分离内部闪存的扇区来开发引导加载程序。
我认为这种方法可行吗??
是否有任何值得参考的示例或文档????
谢谢你。

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

    您好!

    您所描述的方法是可行的。  

    我们有一份 串行闪存编程应用手册 可供您参考、C2000ware SDK 中还有示例代码。 有关串行闪存内核示例、请参阅  \driverlib\f2838x\examples\c28x_dual\flash_kernel

    关于定制引导加载程序的一般信息、 C2000ware 中提供了引导 ROM 源代码(器件引导加载程序)、网址为  \libraries\boot_rom\f2838x\revA\rom_sources\CPU1\f2838x_rom\bootrom\source。  在开发自定义引导加载程序时、可以参考这些内容。  

    此致、

    Matt

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

    感谢您的回答。
    我使用您提供的基准、实现了程序删除并在应用程序区域(内部闪存)中下载。
    现在、我需要运行下载的应用程序。 我是否只跳转至应用所在的存储器地址? 我是否需要使我设计的引导加载程序的初始设置和应用程序的初始设置相同? (例如、计时器初始化、GPIO 初始化等与初始化相关的)

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

    您好!

    是的、一个到应用程序存储器地址的长分支(LB)汇编调用应该合适(假定您希望在一个 CPU 上运行并且从一个基于 RAM 的引导加载程序跳转到闪存)。 C28x CPU 和指令集的第217页 提供了有关 LB 的更多详细信息以供参考。

    此致!
    Matt

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

    感谢您的回答。

    我会检查您提供的信息。

    目前、我已经确认可以使用我使用仿真器设计的引导加载程序来擦除和写入应用程序。 (通过调试模式下的存储器浏览器)但是、当下载闪存引导模式下的应用程序时、此程序不会写入内部闪存。 问题可能是什么???

    此外、我应该如何设置要下载的应用文件? 我是否需要在 CCS 工程-> Properties -> C2000 Hex Utility 中设置任何内容? 目前、输出格式设置为 Intel hex。

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

    您好!

    您是否正在尝试使用引导 ROM 中的 SCI 引导加载程序、或者将自定义引导加载程序加载到闪存中、然后引导至闪存?  

    此外、如何设置要下载的应用程序文件

    对于 SCI 引导、您需要添加以下编译后处理步骤(在 CCS project -> Properties -> Build -> Steps 下)。 应用文件 需要在引导模式下格式化、表源为 SCI-A 端口、8位模式和 ASCII 十六进制输出。  

    "${CG_TOOL_HEX}" "${BuildArtifactFileName}" -boot -sci8 -a -o "${BuildArtifactFileBaseName}.txt"

    此致!
    Matt  

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

    我正在尝试加载自定义引导加载程序、然后引导至闪存。

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

    您好!

    感谢您的澄清。  您是如何尝试将引导加载程序加载到闪存中的?  此处是一本软件指南 、介绍了与闪存连接的各种方法。  

    此致!
    Matt

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

    1.删除内部闪存地址0x88000之后区域的函数、地址0x88000之后下载应用程序的函数、跳转到下载的程序的函数。 从 CCS 下载 CCS 工程(自定义引导加载程序)-通过 SCI 通信连接到 Teraterm、并输入密钥执行该功能。
    2.自定义引导加载程序现在通过电源复位引导至闪存引导模式。
    3.在加载的自定义引导加载程序中删除地址0x88000之后的数据并下载应用程序。
    4.下载完成后,跳转至程序执行应用程序。

    以上是我所想到的场景。
    1、本文第一个问题是我认为的情形是否可能,
    2.我询问在创建应用程序时是否需要设置任何设置,例如使用 T.I.3提供的串行闪存编程器时。 此外、当我运行使用 CCS 中的仿真器设计的文件时、我确认闪存存储器被删除并且程序被下载。 但是、当在闪存引导模式下引导并运行自定义引导加载程序时、闪存存储器似乎被删除、但不会进行下载。 有什么问题吗???

    很抱歉我缺少信息、但感谢您继续回答。

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

    您好!

    您是在闪存还是 RAM 中执行闪存 API 命令?  您无法从计划对其执行擦除/编程操作的同一个闪存存储体中执行闪存 API。 由于 F2838x 器件只有一个闪存组、因此必须从 RAM 执行。

    此致!
    Matt

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

    __attribute__((ramfunc))
    void eraseSector (uint32_t 扇区)、
    __attribute__((ramfunc))
    void downloadApplication()
    我可以只在我想像上面一样在 RAM 中运行的函数前面添加__attribute__((ramfunc))吗???
    我在使用 API 的函数前面添加了__attribute__((ramfunc))。

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

    您好!

     只要您确保工程的链接器 cmd 文件中存在加载和运行地址、该命令就有效。 您能否验证这一点? 可以在  C2000ware 根目录中(位于  device_support\f2838x\common\cmd\2838x_flash_api_lnk.cmd)引用有关如何定义这些参数的示例  

    此致!

    Matt

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

    我已使用您提供的引用重新创建 CMD 文件、但未解决问题。  我还需要检查哪些其他内容吗?

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

    您好!

    除了链接器 cmd 文件外、以下是其他一些需要检查的事项:  

    1. 确保不擦除位于闪存中的闪存 API。
    2. 请搜索"当闪存 API 无法擦除或编程时、我们可以考虑哪些常见的调试提示?"  闪存 API 使用 wiki (https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/951668)中提供。
    3. 如闪存 API 指南(https://www.ti.com/lit/ug/spnu632/spnu632.pdf)中所述、闪存 API 执行是可中断的;但是、在进行擦除或编程操作时、不应从闪存组/OTP 进行任何读取或获取访问。 因此、闪存 API 函数、调用闪存 API 函数的用户应用程序函数以及任何 ISR (中断服务例程)必须从 RAM 执行。 例如、下面显示的整个代码片段应该从 RAM 中执行、而不仅仅是闪存 API 函数。 之所以会这样、是因为 Fapi_issueAsyncCommandWithAddress ()函数向 FSM 发出了擦除命令、但并没有等到擦除操作结束。 只要 FSM 忙于进行当前操作、就不应进行闪存访问。
    4. 请看一下 C2000Ware 中的闪存 API 使用示例( \driverlib\f2838x\examples\c28x\flash)。

    此致!

    Matt

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

    按照您的建议、文件在闪存模式下无法工作的现象消失了。
    当使用仿真器运行应用程序并将存储在 Memory Browser 中的值和输出格式设置为 Array (--array)时、它似乎与应用程序的 Memory Browser 相同。 如果您选择不同的选项、即使您解释数据帧、它似乎也不同。 创建输出文件时、我是否需要额外设置任何内容??? 我想就此部分提供建议。
    谢谢你。

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

    您好!

    您使用数组输出格式的具体原因是什么?  

    对于 SCI 引导、您需要添加以下编译后处理步骤(在 CCS project -> Properties -> Build -> Steps 下)。 应用文件 需要在引导模式下格式化、表源为 SCI-A 端口、8位模式和 ASCII 十六进制输出。  [报价]

    您尝试对 SCI 引导的方式是否正确? 您应该使用上述的应用格式(这是 TI SCI 闪存编程器的格式)。

    此致!

    Matt

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

    1.使用 Array 输出格式的原因是,通过 SCI 向 TeraTerm 发送文件时,数据解析更简单,不需要数据帧分析,因此可以直观地确认。
    2.我尝试在闪存模式下引导、并使用我设计的自定义引导加载程序下载应用程序、然后运行应用程序。

    我是否有误解??

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

    您好!

    根据我的理解、您有一个自定义 SCI 引导加载程序、可以使用 Tera Term 下载和运行应用程序。 您的 Tera Term 配置设置是什么?  

    如果您选择了不同的选项、即使您解释数据帧、也会有不同之处。

    您要选择哪些不同的选项? Memory Browser 中似乎有何不同?

     《汇编语言工具用户指南》 提供了有关十六进制实用程序输出选项的更多详细信息 、您也可以参考这些选项。

    此致!
    Matt

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

    你好

    首先、我将应用程序的输出格式设置为 Array、并通过自定义引导加载程序完成下载。
    我尝试了 asm (" LB 0x088000");此命令跳转到应用程序、但出现了 ESTOP0。

    C:/Users\~~\f2838x_CPU1_bootloader_20241128.out:{3}0x3fe96f{4}"中的"_system_post_cinit ()"没有可用的源代码
    ESTOP0与上面的标识一起出现。 如何解决此问题?

    我还附加了应用 CMD 文件。

    CLA_SCRATCHPAD_SIZE = 0x100;
    --undef_sym=__cla_scratchpad_end
    --undef_sym=__cla_scratchpad_start
    
    MEMORY
    {
       /* BEGIN is used for the "boot to Flash" bootloader mode   */
       BEGIN            : origin = 0x080000, length = 0x000002
       BOOT_RSVD        : origin = 0x000002, length = 0x0001AF     /* Part of M0, BOOT rom will use this for stack */
       RAMM0            : origin = 0x0001B1, length = 0x00024F
       RAMM1            : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
    //   RAMM1_RSVD       : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       RAMD0            : origin = 0x00C000, length = 0x000800
       RAMD1            : origin = 0x00C800, length = 0x000800
       RAMLS0           : origin = 0x008000, length = 0x000800
       RAMLS14			: origin = 0x008800, length = 0x002000
    //   RAMLS1           : origin = 0x008800, length = 0x000800
    //   RAMLS2           : origin = 0x009000, length = 0x000800
    //   RAMLS3           : origin = 0x009800, length = 0x000800
    //   RAMLS4           : origin = 0x00A000, length = 0x000800
       RAMLS57           : origin = 0x00A800, length = 0x001800
    //   RAMLS6           : origin = 0x00B000, length = 0x000800
    //   RAMLS7           : origin = 0x00B800, length = 0x000800
       RAMGS0           : origin = 0x00D000, length = 0x001000
       RAMGS1           : origin = 0x00E000, length = 0x001000
       RAMGS2           : origin = 0x00F000, length = 0x001000
       RAMGS3           : origin = 0x010000, length = 0x001000
       RAMGS4           : origin = 0x011000, length = 0x001000
       RAMGS5           : origin = 0x012000, length = 0x001000
       RAMGS610           : origin = 0x013000, length = 0x005000
    //   RAMGS7           : origin = 0x014000, length = 0x001000
    //   RAMGS8           : origin = 0x015000, length = 0x001000
    //   RAMGS9           : origin = 0x016000, length = 0x001000
    //   RAMGS10          : origin = 0x017000, length = 0x001000
       RAMGS11          : origin = 0x018000, length = 0x001000
       RAMGS125          : origin = 0x019000, length = 0x003FF8
    //   RAMGS13          : origin = 0x01A000, length = 0x001000
    //   RAMGS14          : origin = 0x01B000, length = 0x001000
    //   RAMGS15          : origin = 0x01C000, length = 0x000FF8
    //   RAMGS15_RSVD     : origin = 0x01CFF8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       /* Flash sectors */
       FLASH0           : origin = 0x080002, length = 0x001FFE  /* on-chip Flash */
       FLASH1           : origin = 0x082000, length = 0x002000  /* on-chip Flash */
       FLASH2           : origin = 0x084000, length = 0x002000  /* on-chip Flash */
       FLASH3           : origin = 0x086000, length = 0x002000  /* on-chip Flash */
       FLASH4_start           : origin = 0x088000, length = 0x000002  /* on-chip Flash */
       FLASH4           : origin = 0x088002, length = 0x007FFD  /* on-chip Flash */
       FLASH5           : origin = 0x090000, length = 0x008000  /* on-chip Flash */
       FLASH6           : origin = 0x098000, length = 0x008000  /* on-chip Flash */
       FLASH7           : origin = 0x0A0000, length = 0x008000  /* on-chip Flash */
       FLASH8           : origin = 0x0A8000, length = 0x008000  /* on-chip Flash */
       FLASH9           : origin = 0x0B0000, length = 0x008000  /* on-chip Flash */
       FLASH10          : origin = 0x0B8000, length = 0x002000  /* on-chip Flash */
       FLASH11          : origin = 0x0BA000, length = 0x002000  /* on-chip Flash */
       FLASH12          : origin = 0x0BC000, length = 0x002000  /* on-chip Flash */
       FLASH13          : origin = 0x0BE000, length = 0x001FF0  /* on-chip Flash */
    //   FLASH13_RSVD     : origin = 0x0BFFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       CPU1TOCPU2RAM   : origin = 0x03A000, length = 0x000800
       CPU2TOCPU1RAM   : origin = 0x03B000, length = 0x000800
    
       CPUTOCMRAM      : origin = 0x039000, length = 0x000200
       CMTOCPURAM      : origin = 0x038000, length = 0x000200
    
       CPUTOCMRAM_ECAT  : origin = 0x039200, length = 0x000200
       CMTOCPURAM_ECAT  : origin = 0x038200, length = 0x000200
    
       CANA_MSG_RAM     : origin = 0x049000, length = 0x000800
       CANB_MSG_RAM     : origin = 0x04B000, length = 0x000800
    
       RESET            : origin = 0x3FFFC0, length = 0x000002
    
       CLA1_MSGRAMLOW   : origin = 0x001480,   length = 0x000080
       CLA1_MSGRAMHIGH  : origin = 0x001500,   length = 0x000080
       CLA1_DMA_MSGRAM  : origin = 0x001680,   length = 0x000080
       DMA_CLA1_MSGRAM  : origin = 0x001700,   length = 0x000080
    }
    
    SECTIONS
    {
       codestart           : > FLASH4_start, ALIGN(8)
       .text               : >> FLASH4,  ALIGN(8)
       .cinit              : > FLASH4, ALIGN(8)
       .switch             : > FLASH4, ALIGN(8)
       .reset              : > RESET, TYPE = DSECT /* not used, */
       .stack              : > RAMLS57
    
    #if defined(__TI_EABI__)
       .init_array      : > FLASH4, ALIGN(8)
       .bss             : > RAMGS125
       .bss:output      : > RAMLS57
       .data            : > RAMLS57
       .sysmem          : > RAMLS57
       /* Initalized sections go in Flash */
       .const           : > FLASH4, ALIGN(8)
    #else
       .pinit           : > FLASH4, ALIGN(8)
       .ebss            : > RAMLS57
       .esysmem         : > RAMLS57
       /* Initalized sections go in Flash */
       .econst          : >> FLASH5,  ALIGN(8)
    #endif
    
       MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT
       MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT
       MSGRAM_CPU_TO_CM    : > CPUTOCMRAM, type=NOINIT
       MSGRAM_CM_TO_CPU    : > CMTOCPURAM, type=NOINIT
       MSGRAM_CPU_TO_CM_ECAT > CPUTOCMRAM_ECAT, type=NOINIT
       MSGRAM_CM_TO_CPU_ECAT > CMTOCPURAM_ECAT, type=NOINIT
    
       dclfuncs : > FLASH6, ALIGN(8)
    
    
        /* CLA specific sections */
    #if defined(__TI_EABI__)
       Cla1Prog         :   LOAD = FLASH4,
                            RUN = RAMLS57,
                            LOAD_START(Cla1funcsLoadStart),
                            LOAD_END(Cla1funcsLoadEnd),
                            RUN_START(Cla1funcsRunStart),
                            LOAD_SIZE(Cla1funcsLoadSize),
                            ALIGN(8)
    #else
       Cla1Prog         :   LOAD = FLASH4,
                            RUN = RAMLS57,
                            LOAD_START(_Cla1funcsLoadStart),
                            LOAD_END(_Cla1funcsLoadEnd),
                            RUN_START(_Cla1funcsRunStart),
                            LOAD_SIZE(_Cla1funcsLoadSize),
                            ALIGN(8)
    #endif
    
       CLADataLS0       : > RAMLS57
       CLADataLS1       : > RAMLS57
    
       Cla1ToCpuMsgRAM  : > CLA1_MSGRAMLOW, type=NOINIT
       CpuToCla1MsgRAM  : > CLA1_MSGRAMHIGH, type=NOINIT
       Cla1ToDmaMsgRAM  : > CLA1_DMA_MSGRAM, type=NOINIT
       DmaToCla1MsgRAM  : > DMA_CLA1_MSGRAM, type=NOINIT
    
       Cla1DataRam      : >> RAMLS57
    
       /* CLA C compiler sections */
       //
       // Must be allocated to memory the CLA has write access to
       //
       CLAscratch       :
                         { *.obj(CLAscratch)
                         . += CLA_SCRATCHPAD_SIZE;
                         *.obj(CLAscratch_end) } >  RAMLS57
    
       .scratchpad      : > RAMLS57
       .bss_cla         : > RAMLS57
       cla_shared       : > RAMLS57
    #if defined(__TI_EABI__)
       .const_cla       :   LOAD = FLASH4,
                            RUN = RAMLS57,
                            RUN_START(Cla1ConstRunStart),
                            LOAD_START(Cla1ConstLoadStart),
                            LOAD_SIZE(Cla1ConstLoadSize)
    #else
       .const_cla       :   LOAD = FLASH4,
                            RUN = RAMLS57,
                            RUN_START(_Cla1ConstRunStart),
                            LOAD_START(_Cla1ConstLoadStart),
                            LOAD_SIZE(_Cla1ConstLoadSize)
    #endif
    
    
       #if defined(__TI_EABI__)
           .TI.ramfunc : {} LOAD = FLASH4,
                            RUN = RAMGS610,
                            LOAD_START(RamfuncsLoadStart),
                            LOAD_SIZE(RamfuncsLoadSize),
                            LOAD_END(RamfuncsLoadEnd),
                            RUN_START(RamfuncsRunStart),
                            RUN_SIZE(RamfuncsRunSize),
                            RUN_END(RamfuncsRunEnd),
                            ALIGN(8)
       #else
           .TI.ramfunc : {} LOAD = FLASH4,
                            RUN = RAMGS610,
                            LOAD_START(_RamfuncsLoadStart),
                            LOAD_SIZE(_RamfuncsLoadSize),
                            LOAD_END(_RamfuncsLoadEnd),
                            RUN_START(_RamfuncsRunStart),
                            RUN_SIZE(_RamfuncsRunSize),
                            RUN_END(_RamfuncsRunEnd),
                            ALIGN(8)
       #endif
    
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

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

    您好!

    我正在咨询 链接器命令文件专家、了解更多信息后我们会尽快答复您。

    此致!

    Matt

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

    您好!

    看起来你 在.out 文件中有一个定制的_system_post_cinit 函数。  编译器中提供的标准_system_post_cinit 函数是空函数。  请检查您的函数实现、并检查导致 ESTOP0的条件。

     

    您的.out 是使用-g 选项构建的吗? 否则、CCS 在调试时无法链接 C 源文件、并可能导致出现"No source available for...(无可用源)"问题。 建议使用-g 选项构建工程、以查看和调试 C 文件。 如果不是、您可以反汇编调试。  

    可以在项目属性中设置-g 选项:

    此致、

    Veena.

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

    您好!

    当我签入调试模式时、
    应用的起始地址为0x88000。
    地址0x88000的数据是0048A487、因此当应用下载并分支至地址0x88000时、它应分支至地址0x8A487、但分支至地址0x82487。 似乎这里出现了问题。
    不能只通过分支执行应用程序???

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

    您好!

    应用程序不能简单地通过分支执行???

    是的、通过分支到应用的代码开始来执行应用。  

    您能 分享一下吗   .map  项目构建的输出、以便我们可以检查0x82487和0x8A487位置处的内容?  

    此外、您的引导加载程序是否有自己的链接器 CMD 文件?   

    此致!

    Matt

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

    您好!

    我无法通过镜像链接器命令文件来重现此问题、因此我将继续进行调查。 您还可以共享自定义引导加载程序映射文件吗?   

    此致!

    Matt

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

    您好!

    您是否能够通过 CCS 正常加载应用? 您是否还可以共享存储器浏览器在地址0x80000和0x88000处的屏幕截图以及如何从引导加载程序分支?

    在自定义引导加载程序映射文件中、0x82487 位于 MSGRAM (MSGRAM_CPU2_TO_CPU1)中。  如果能够跳转到应用程序入口点、但之后有一个指向 MSGRAM 的 LB、因此应用链接器肯定出现了问题。  

    此致!

    Matt

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

    通过 CCS 加载应用程序时工作正常。

    我将在下面分享请求的器件。

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

    您好!

    通过提供的引导加载程序链接器映射文件和存储器浏览器屏幕截图:

    您的引导加载程序似乎正在 跳转到0x85231而不是 CodeStartBranch、您可以尝试在十六进制实用程序工具中指定 bootloader codestart 的入口点吗?

    我将继续就此向链接器 CMD 文件专家咨询、并会在周一回复。

    此致!

    Matt

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

    您好!  

    我认为我错误地附加了引导加载程序的存储器浏览器。 我已在下面重新附加了引导加载程序的存储器浏览器。