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.

[参考译文] MSP432P4011:引导加载程序 c-array - BLE 插件 OAD

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1022291/msp432p4011-bootloader-c-array---ble-plugin-oad

器件型号:MSP432P401R
主题中讨论的其他器件:CC2640MSP430FR6047

您好!
我们构建了一个广泛的程序、运行了许多任务、这些任务执行正常。 我们还将 OAD 作为此软件的一部分、这意味着我们拥有用于将本地应用程序从地址0x00100000引导到其最终位置的 boorloader 的 c 数组。 这很好。 我们假设示例"oad_bootloader_source_MSP_EXP432P4111_nortos_ccs"是此自定义引导加载程序的源代码。

我们使用:

simplelink_sdk_ble_plugin_3_20_00_24
simplelink_msp432p4_sdk_3_40_01_02
SRecord 1.64

我们通过将4111替换为我们使用的4011来实现这一转变! 当然、我们选择了适当的启动和系统文件、更改了定义的器件并附加了所需的修改、例如模块和引脚。
我们将'Reset_Handler (startup_msp432p4011_ccs.c'中的第177行)替换为'setISR'、因为与 MSP432P4111中的同一文件相比、这似乎是错误的!

最后、工程编译正常、并生成所需的'OAD_bootloader_source_MSP_EXP432P4011_nortos_ccs.txt'文件。

为了方便起见、我们将此文件重命名为'OAD_BL_4011_input.txt'。

接下来、我们尝试使用以下命令创建 c 数组:

srec_cat.exe oad_bl_4011_input.txt -ti_txt -o oload_bootloader.c -ca oad_bootloader -c_comp

我们不知道这是否正确、但知道使用结果不起作用!

如果我们启动调试器、我们会得到:

原始阵列工作正常、这来自于当时(2019)使用的 SDK、当我们开始使用 'OAD_firmware_update_MSP_EXP432P4111_tirtos_ccs'时!  

问题1:这是错误/不完整的转换吗?

问题2:还有什么?

问题3:我们如何调试源引导加载程序项目?

此致、
劳伦特

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

    您好、Laurent、

     我们提供了针对 BLE 插件的 MSP432P4111特定示例- OAD (加源代码)。 您能否从那里开始查看适合您的 Wi-Fi?

    https://dev.ti.com/tirex/explore/node?node=AK0RCCR8sAQe-aPnrANqvg__kmPly-e__LATEST

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

    尊敬的 Jace:

    我们已经知道这个例子,因为我们在几年前用它开始我们的发展。 我们当时已经尝试编译引导加载程序、创建一个 c 数组并使用它。 当时、我们也没有使它工作。 由于这是该项目唯一需要做的事情、我们现在正在尝试完成它!

    第二个问题是有关如何调试 BOOLOADER 的想法或提示?

    此致、

    劳伦特

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

    您好、Laurent、

    您能否说明 MSP432P4111示例不适合您的情况? 我能够使用 MSP432P4111 OAD_firmware_update 示例更新 SNP 和 SAP 映像。 您是否遇到任何错误? 如果您使用 CCS 在代码中放置断点、您能看到代码在出错时到达何处吗?  

    此致、

    Kristen  

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

    当我们启动项目时、我们发现如果您反复上传 oaf_firmware_update、似乎可以正常工作! 但我们添加了一个版本号、作为第一件事之一! 如果我们然后尝试上传、原始代码将无法正常工作、因为在函数中擦除失败:

    添加版本:
    文件:oad_firmware_update.c

    声明:
    //软件版本
    const char version_cc[]="001";

    功能:
    OAD_INIT()
    //软件版本 CC
    devInfoArray[4][2]= version_cc[0];

    在函数顶部调用:
    OAD_taskFxn (void * arg0)

    因此它可以通过 f.i.读取 BLE Scanner!

    文件:oad_target_internal_flash.c

    这是错误发生的地方、也是我们案例中的原始代码中的错误!

    函数:bool OADTarget_writeFlash (...)

    代码: NVS_ERASE (curOADHandle、0、regionOADAttrs.regionSize);

    因此、如果您完全上传同一个文件、则不会发生错误、因为同一字节会再次在同一位置进行编程、从而不会产生错误。 但实际上、旧版本从未完全删除、只有第一部分才会删除!

    因此、我们将用于擦除较小块的代码(更短的时间)更改为:

    如果(((( uint32_t) startAddr)+偏移)% regionOADAttrs.sectorSize)= 0)

      for (i=0;i<4;i++)
      {
        状态= NVS_ERASE (curOADHandle、(size_t)( i*64*regionOADAttrs.sectorSize)、(size_t)( 64*regionOADAttrs.sectorSize));
      }
      displayDebug1 ("除法=0、擦除=%x"、(size_t)(4*64* regionOADAttrs.sectorSize));

    然后、4的环路被确定为试验性的!

    我们运行4011而不是4111、但在该错误下、我们知道没有差异!

    但实际上、如果我们自己构建 c-array、我们现在正在尝试运行引导代码?

    此致、
    劳伦特

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

    您好、Laurent、

    我们将需要一些时间来查看此内容并返回给您。 您可以预计最迟会有8/3次访问。  

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

    器件型号:MSP432P401R

    您好!

    2019年、我们启动了项目并使用了 OAD_firmware_update_401R/4111/4011项目。 作为第一 个 Gola 、我们使用 SDK 和 CC2640 SDK 进行了测试。 添加并修改了许多功能和 BLE 服务。 一切都很好。 我们在两个互连(RS485)定制板中安装了 BLE (CC2640)模块、多个 msp4011和一个 MSP430FR6047、现在我们已经差不多完成了、我们希望开始使用引导加载程序源代码。 那是我们遇到了混乱和麻烦!

    第一个挑战:我们从'simplelink_sdk_le_plugin_3_20_00_24'导入了项目'oad_bootloader_source_MSP_EXP432P401R/EXP432P4111。 由于文件'bl_int_flash_sm.c'在 这两个项目中都有两次预置、因此引导无法完美构建!?? 我们删除了在根中发生的一次。

    删除"oad_bootloader_source_MSP_EXP432P401R_nortos_ccs"后、仍然存在错误! 不喜欢:

    void Reset_Handler (void)、r181 in 'startup_msp432p404r_ccs.c'

    我们将其重命名为、与4111源项目中的 void resetISR (void)相同、假设这是可以的吗?

    我们使用全新的工作区重复此操作!

    然后、在至少构建完所有内容后、我们会比较引导 OOD_bootloader.c 文件。 我们看到、通过401R 项目、我们可以在 c 数组中找到'transferKey'、但在4111 oad_bootloader.c 中找到 c401R bootc

    OAD_bootloader、c 来自 OAD_firmware_update_MSP_EXP432P401R、在 OAD_bootloader 和 OAD_update 固件中均可找到传输密钥!

    OAD_BOOTLOADer.c 来自 OAD_firmware_update_MSP_EXP432P4111、无传输密钥  

    在 OAD_bootloader_source_MSP_EXP432P4111生成的 txt 文件中、transferkey 也存在于 txt 和 c-array 中!

    但是、在 OAD_firmware_update_MSP_EXP432P4111中、它是完全不同的 C 阵列!!!! 也找不到转接键。 但是、该引导加载程序确实起作用、并且与我们始终使用的引导加载程序相同。 但是、我们没有源代码、因为我们无法进行 fin dit!

    我们能否从4111项目中获得正确的源项目?

    此致、

    劳伦特

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

    您好、Laurent、

    我将这些线程连接在一起、因为它们围绕相同的主题/问题。 我们今天仍应继续跟踪您的情况。  

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

    您好、Laurent、

    感谢您指出 OAD_BOOTLOADER_SOURCE 工程的构建问题。 我将为此文件一个错误。

    对于 OAD_firmware_update_MSP_EXP432P4111中 OAD_bootloader.c 中的源代码、看起来它使用的是 OAD_bootloader_source_MSP_EXP432P4111工程的优化编译中的十六进制数组。 尽管由于优化、此处未明确列出 transferKey、但它仍应能正常工作。

    OAD_firmware_update_MSP_EXP432P401R 项目中的 OAD_bootloader.c 源代码似乎来自优化度较低的编译、因此您可以在十六进制数组中显式看到 transferKey。

    但是、您可以自行为 OAD_BOOTLOADER_SOURC_MSP_EXP432P4111项目构建十六进制数组。

    OAD_BOOTLOADER_SOURC_MSP_EXP432P4111 项目属性中、确保优化处于低电平或完全关闭状态。

    2.仍在项目属性中、启用 TI-TXT 十六进制文件的输出。

    构建 OAD_BOOTLOADER_SOURC_MSP_EXP432P4111 项目。 在项目的 Debug 文件夹下找到生成的 oad_bootloader_source_MSP_EXP432P4111_nortos_ccs.txt。 在此 txt 文件中,您可以确认此处列出了 transferKey。

    4.获取此文件,然后将其复制到 srec_cat 安装文件夹中。 在 srec_cat 文件夹中的命令提示符下、运行 srec_cat 工具、将 TI TXT 格式转换为 C Array 格式:

    srec_cat.exe oad_bootloader_source_MSP_EXP432P4111_nortos_ccs.txt -ti_txt -o oad_c_array_image.c−ca

    5.在新创建的 OAD_c_array_image.c 文件中,现在可以将十六进制数组复制并粘贴到 OAD_firmware_update_MSP_EXP432P4111_tirtos_ccs 项目中的 OAD_bootloader.c 中。

    请告诉我、您在生成十六进制源时是否遇到任何问题、以及这是否可以解决您的问题。

    此致、

    Kristen  

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

    您好!

    问题在于:

    startup_msp432p4x1x_ccs.c (也可能在 SDK 的其他示例中!)

    需要更换复位断流器:

    即用'setISR'替换'Reset_Handler'(在此文件中向下声明!

    这解决了我的问题!

    感谢您的帮助/帮助。

    Rgds、Laurent