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.

[参考译文] RTOS/MSP432P401R:MSP432 OAD:如何生成要放置的自定义引导加载程序@ 0x0000 (内存组织与现有OAD示例代码相同)

Guru**** 2582405 points
Other Parts Discussed in Thread: CC2650MODA, CC2650

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/639908/rtos-msp432p401r-msp432-oad-how-to-generate-custom-bootloader-to-be-placed-0x0000-memory-organization-is-same-as-existing-oad-example-code

部件号:MSP432P401R
本线程中讨论的其他部件:CC2650MODACC2650

工具/软件:TI-RTOS

我正在通过CC2650MODA在自定义主板上执行MSP432的固件更新。 我从CC2650获得OAD图像,并将其存储在定制板上的EEPROM上(图像比128 KB 多,因此不适合MSP432的内部闪存)。 我编写了要加载的自定义引导加载程序(与TI共享的“OAD示例引导加载程序”行相同)@ 0x0000,应用程序将启动@0x2000 (遵循与TI的OAD示例相同的内存组织)。 我尝试将我的自定义引导加载程序的二进制映像加载到0x2000,但当我尝试刷新相同的映像时,我得到-

"发生重置目标"

OAD示例文档(. ) 有以下行-

"编译的二进制bootloader包含在此代码示例中(并放置在特殊的存储位置),位于load_bootloader.c文件中。 此bootloader的源代码可在examples/nortos/MSP_EXP432P401R/load_bootloader_source目录中找到。"

我编译了示例load_bootloader.c源代码,并将二进制文件与load_bootloader.c (const unsigned char load_bootloader[])中的二进制bootloader数据数组进行了比较。  它们不同,仔细检查数据阵列后,我看到在该数据阵列的顶部添加了256个字节的部分,在这256个字节之后,将放置编译的bootloader。 不过,即使是下一节也不准确,但我觉得也有一些小改动。

有人能告诉我吗-

1)为什么数据阵列与通过TI共享的代码生成的二进制不匹配?

2)如何正确生成和放置我的自定义bootloader代码作为OAD的数据阵列?

提前感谢。

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

    您好,

    kavan Acharya 说:
    我编译了示例load_bootloader.c源代码,并将二进制代码与load_bootloader.c (const unsigned char_bootloader[])中的二进制bootloader数据数组进行了比较。  [/引述]

    请注意,当您导入项目时,startup_msp432p401r_CCS和system_msp432p401r.c将丢失(只需复制并粘贴任何常用示例中的启动/系统文件)。 此问题将在下一版本的插件中得到解决。 这可能是您看到差异的部分原因,但也可能 与您正在使用的编译器工具有关。

    使用CCS 7.2 .........0- TI代码生成工具ARM版本16.9 .3.LTS,这是我的 load_bootloader.c 文件。

    Kavan Acharya 说:
    2)如何正确生成和放置我的自定义bootloader代码作为OAD的数据阵列?[/QUOT]

    最简单的创建方法是使用 srecord.sourceforge.net中的srec_cat

    1.在bootloader项目(load_bootloader_source_MSP_EXP432P 401R_nortos_CCS)中,启用十六进制实用程序(项目属性),对于输出格式,选择输出TI-TXT

    2.使用srec_cat工具运行以下命令:c:\ccs_msp432_ccsv7_2_msp432p401r_oad\oad_bootloader_source_MSP_EXP432P 401R_nortos_CCS\Debug>srec_cat oad_bootloader_source_MSP_EXP432P401R_nortos_ccs.txt -ti_txt -o com_bootload.c -ca_bootload_loader

    3.您可以将 此生成的文件合并或复制 到您的oad_firmware_update_MSP_EXP432P401R_tirtos_CCS项目中的文件中,请确保将#pragma data_section保留在文件的开头。

    #if defined(__TI_Compiler_version__)
    #pragma data_section(Oload_bootloader)
    ,"OAD_BSL")#endif 

    希望这能有所帮助。

      David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢David。 这解决了我的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,David:

    我们还面临一个问题。

    为了在公共卫生和社会福利部432中实施OAD,我们采取了后续行动

    1.在.cfg中添加以下行

    /*================= 重置配置================= */
    var Reset = xdc.useModule("xdc.runtime.Reset");
    /*
    当使用boot loader
    时使用此函数*/
    Reset.Fxns[Reset.Fxns.length+]="&myReset";
    
    /*=========== 引导程序表重新定位================= */
    var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
    m3Hwi.resetVectorAddress = 0x2000;/* App base */ 

    2..cmd文件更改为  

    --stack_size=768 /* C堆栈也用于ISR堆栈*/
    --retain load_bootloader
    
    内存
    {
    OG_BSL (Rx):原始= 0x0万,长度= 0x0.2万
    主 (Rx):原始= 0x0.2万,长度= 0x0001D000
    OADIMAGEINFO (RX):源站= 0x0001F000,长度= 0x0.1万
    OADIMAGE (Rx):原点= 0x2万,长度= 0x2万
    信息 (Rx):原点= 0x20万,长度= 0x0.4万
    SRAM_CODE (rwx):原始= 0x100万,长度= 0x1万
    SRAM_DATA (RW):原点= 0x2000万,长度= 0x1万
    }/*
    
    内存中的节分配*/
    
    节
    {
    text:> main
    const:> main
    .cinit:> main
    .Pinit:> main
    
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>= 1500.9万
    .TI.ramfunc :{} load=main, run=sRAM_code, table(BINIT)
    #endif
    #endif
    
    组{
    数据
    BSS
    sysmem
    空:{
    /*未使用的符号定义可重复使用的堆内存*/
    __primary_heap_start__=.;
    __primary_heap_end__=__stack;
    }
    }> SRAM_DATA
    
    .stack:> SRAM_DATA (高)
    }/*
    
    RTS的WDTCTL寄存器的符号定义*/
    WDTCTL_SYM = 0x400.048万C; 

    3.将以下文件添加到项目中

       load_bootloader.c,load_firmware_update_status.c, oad_firmware_update_status.h, oad_firmware_update.h

    执行所有这些操作后,如果在调试模式下闪烁一个LED闪烁代码,LED将闪烁。 但是,如果我在自由运行模式下运行,LED将不会闪烁。 这就是它只能在调试模式下工作。 插件和插件也无法正常工作。

    请告诉我们如何解决这一问题

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

    您好,

     您是否还更新了新的引导程序表地址(main_tirtos.c)?

    #if defined(__TI_Compiler_version__)
    extern UINT32_t ti_SysBIOS_family_arm_m3_Hwi_resetvectors;
    int myReset(void)
    #endif
    {
    /*使用应用程序中断向量*/
    #if defined(__TI_Compiler_version__)
    scb->vTOR =(UINT32_t)&ti_SysBIOS_family_arm_m3_Hwi_resetvectors;
    #endif
    返回1;
    } 

     希望这能有所帮助。

      David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我也更新了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请将您的项目发送给我吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    如果您不想与社区共享您的项目,请脱机联系我,您可以单击我的个人资料并向我发送私人消息。

    谢谢!

    David