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.

[参考译文] LP-CC2652RB:OTA 调整了应用程序卡在 macRadioPowerUpWait 上

Guru**** 2460850 points
Other Parts Discussed in Thread: CC2652RB, UNIFLASH, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1253780/lp-cc2652rb-ota-adapted-application-stuck-on-macradiopowerupwait

器件型号:LP-CC2652RB
主题中讨论的其他器件:CC2652RBUNIFLASHSysConfig

已获取我的 ZigBee 温度传感器应用并添加了 OTA 功能、 如此处所示。 但是、该教程似乎已过时、不会使用其中所述的 post-build 步骤进行构建。 我们必须调整 post-building 步骤、使之适应  ZED_SW_OTA_CLIENT_OFFCHIP_CC2652rb_tirtos7_ticlang 。  

当前 post-build 步骤:

${CG_TOOL_ROOT}/bin/tiarmobjcopy ${BuildArtifactFileName} --output-target ihex ${BuildArtifactFileBaseName}.hex
${CG_TOOL_ROOT}/bin/tiarmobjcopy ${BuildArtifactFileName} --output-target binary  ${BuildArtifactFileBaseName}_oad.bin
${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/oad/oad_image_tool --verbose ccs ${PROJECT_LOC} 7 -hex1 ${ConfigName}/${ProjName}.hex -k ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/oad/private.pem -o ${ConfigName}/${ProjName}_oad
${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/zstack/zigbee_ota_image_converter/zOTAfileGen ${PROJECT_LOC}/${ConfigName}/${ProjName}_oad.bin ${PROJECT_LOC}/${ConfigName}/              BEBE 2652 00000001

不知道这是否相关,但我想提到它。 程序构建和运行没有错误、但收到以下警告:

warning #10247-D: creating output section ".ccfg" without a SECTIONS specification

我已经添加了 OTA 库和  OTA_客户端_集成 来自的代码  ZED_SW_OTA_CLIENT_OFFCHIP_CC2652rb_tirtos7_ticlang 。  

我可以对板进行编程而不会出现问题、但程序会卡在内部  macRadioPowerUpWait 根据调用堆栈:

我认为这与 从示例工程中添加的代码无关、因为在 BIOS 可以启动 SampleApp 任务并调用 OTA 函数之前会失败。 如果我擦除闪存并使用其他工程对其进行编程(不进行任何 OTA 修改)、该板会按预期工作、因此我认为可能不会有任何硬件问题。

这可能是由于编译后处理步骤、app.cfg 文件或链接器配置文件遇到一些未发现的问题引起的吗?  

链接器文件:  

/* Retain interrupt vector table variable                                    */
--retain=g_pfnVectors
/* Override default entry point.                                             */
--entry_point ResetISR
/* Allow main() to take args                                                 */
--args 0x8
/* Suppress warnings and errors:                                             */
/* - 10063: Warning about entry point not being _c_int00                     */
/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object  */
/*   files compiled using Keil (ARM compiler)                                */
--diag_suppress=10063,16011,16012

/* The following command line options are set as part of the CCS project.    */
/* If you are building using the command line, or for some reason want to    */
/* define them here, you can uncomment and modify these lines as needed.     */
/* If you are using CCS for building, it is probably better to make any such */
/* modifications in your CCS project and leave this file alone.              */
/*                                                                           */
/* --heap_size=0                                                             */
/* --stack_size=256                                                          */
/* --library=rtsv7M3_T_le_eabi.lib                                           */

/* The starting address of the application.  Normally the interrupt vectors  */
/* must be located at the beginning of the application.                      */

#ifndef NVOCMP_NVPAGES
#define NVOCMP_NVPAGES          2
#endif

#define FLASH_BASE              0x00000000
#define FLASH_NV_BASE           (0x56000 - (NVOCMP_NVPAGES * 0x2000))
#define FLASH_NV_SIZE           (NVOCMP_NVPAGES * 0x2000)

#define FLASH_LAST_BASE         0x56000
#define FLASH_LAST_SIZE         0x2000
#define RAM_BASE                0x20000000
#define RAM_SIZE                0x14000
#define GPRAM_BASE              0x11000000
#define GPRAM_SIZE              0x2000

#define OAD_HDR_START          	FLASH_BASE
#define OAD_HDR_SIZE           	0xA8
#define OAD_HDR_END            	(OAD_HDR_START + OAD_HDR_SIZE - 1)

#define ENTRY_START             (OAD_HDR_END + 1)
#define ENTRY_SIZE              0x40
#define ENTRY_END               (ENTRY_START + ENTRY_SIZE - 1)

#define FLASH_START             (ENTRY_END + 1)
#define FLASH_END               (FLASH_NV_BASE - FLASH_START)
#define FLASH_SIZE              (FLASH_END - FLASH_START)

#define PAGE_SIZE               0x2000

/* System memory map */

MEMORY
{
    ENTRY (RX) : origin = ENTRY_START, length = ENTRY_SIZE

    FLASH_IMG_HDR (RX) : origin = OAD_HDR_START, length = OAD_HDR_SIZE

    /* Application stored in and executes from internal flash */
    FLASH (RX) : origin = FLASH_START, length = FLASH_SIZE

 	/* FLASH NV */
    FLASH_NV (RWX) : origin = FLASH_NV_BASE, length = FLASH_NV_SIZE
    /* Last flash page */
    FLASH_LAST (RX) : origin = FLASH_LAST_BASE, length = FLASH_LAST_SIZE
    /* Application uses internal RAM for data */
    SRAM (RWX) : origin = RAM_BASE, length = RAM_SIZE
    /* Application can use GPRAM region as RAM if cache is disabled in the CCFG
    (DEFAULT_CCFG_SIZE_AND_DIS_FLAGS.SET_CCFG_SIZE_AND_DIS_FLAGS_DIS_GPRAM = 0) */
    GPRAM (RWX): origin = GPRAM_BASE, length = GPRAM_SIZE

    /* Explicitly placed off target for the storage of logging data.
     * The data placed here is NOT loaded onto the target device.
     * This is part of 1 GB of external memory from 0x60000000 - 0x9FFFFFFF.
     * ARM memory map can be found here:
     * developer.arm.com/.../about-the-memory-map
     */
    LOG_DATA (R) : origin = 0x90000000, length = 0x40000        /* 256 KB */
}

/* Section allocation in memory */

SECTIONS
{
    GROUP > FLASH_IMG_HDR
    {
        .image_header //align PAGE_SIZE
    }

    GROUP > ENTRY
    {
        .resetVecs LOAD_START(prgEntryAddr)
        .intvecs
        EntrySection
    }

    .text           :   > FLASH

    config_const { mac_user_config.o(.rodata) } > FLASH

    .const          :   > FLASH
    .constdata      :   > FLASH
    .rodata         :   > FLASH
    .cinit          :   > FLASH LOAD_END(flashEndAddr)
    .pinit          :   > FLASH
    .init_array     :   > FLASH
    .emb_text       :   > FLASH

    .vtable         :   > SRAM
    .vtable_ram     :   > SRAM
     vtable_ram     :   > SRAM
    .data           :   >> SRAM
    .bss            :   > SRAM
    .sysmem         :   > SRAM
    .stack          :   > SRAM (HIGH)
    .nonretenvar    :   > SRAM

    .gpram          :   > GPRAM
    .log_data       :   > LOG_DATA, type = COPY
}

/* Create global constant that points to top of stack */
/* CCS: Change stack size under Project Properties    */
__STACK_TOP = __stack + __STACK_SIZE;

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

    您好!

    感谢您与我们联系。 我们的 Zigbee 专家目前不在办公室、回复可能会延迟。 与此同时、您能否为我们提供您正在使用的 SDK?

    此致、

    1月

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

    您好、Jan。 我使用的是6.20版。  

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

    自从我最初发布这篇文章以来、我已经取得了一些进展。 现在构建的程序不会卡在 macRadioPowerUpWait 但仍然无法正常工作。 已将初始问题确定为链接器文件之一、替换了链接器文件并使其正确构建、让 BIOS 启动 ZStack 任务。

    但是、程序现在卡在  otaClient_Init ( appSemHandle、appServiceTaskId、NULL ); 函数的初始化部分。

    static void zclSampleTemperatureSensor_initialization(void)
    {
        /* Initialize user clocks */
        zclSampleTemperatureSensor_initializeClocks();
    
        /* create semaphores for messages / events
         */
        Semaphore_Params semParam;
        Semaphore_Params_init(&semParam);
        semParam.mode = ti_sysbios_knl_Semaphore_Mode_COUNTING;
        Semaphore_construct(&appSem, 0, &semParam);
        appSemHandle = Semaphore_handle(&appSem);
    
        appServiceTaskId = OsalPort_registerTask(Task_self(), appSemHandle,
                                                 &appServiceTaskEvents);
    
        //Initialize stack
        zclSampleTemperatureSensor_Init();
    
        Watchdog_init();
        Watchdog_Params_init(&wdgParams);
        wdgParams.callbackFxn = (Watchdog_Callback)wdgCallback;
        wdgParams.resetMode = Watchdog_RESET_OFF;
        wdgParams.debugStallMode = Watchdog_DEBUG_STALL_ON;
    
        wdgHandle = Watchdog_open(CONFIG_WATCHDOG_0, &wdgParams);
    
        if (!wdgHandle)
        {
            while (1)
                ;
        }
    
        uint32_t tickValue = Watchdog_convertMsToTicks(wdgHandle, 10000);
        Watchdog_setReload(wdgHandle, tickValue);
    
    #if defined (OTA_CLIENT_INTEGRATED)
        otaClient_SetEndpoint(SAMPLETEMPERATURESENSOR_ENDPOINT);
        otaClient_setAttributes(zclSampleTemperatureSensor_Attrs, zclSampleTemperatureSensor_NumAttributes);
        zclOTA_setAttributes(zclSampleTemperatureSensor_Attrs, zclSampleTemperatureSensor_NumAttributes);
    #ifndef CUI_DISABLE
        otaClient_Init ( appSemHandle, appServiceTaskId, gCuiHandle );
    #else
        otaClient_Init ( appSemHandle, appServiceTaskId, NULL ); // stuck here
    #endif
    #endif // OTA_CLIENT_INTEGRATED
    }

    如果我禁用了看门狗、程序将一直在函数内部运行。 如果我让看门狗运行、它将每10秒对电路板进行一次重新供电。 下面附加了调用堆栈:

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

    您好、V:

    下面是 Z-Stack 用户指南 v6.20的链接 、它与 您正在使用的指南相匹配。  在这里、您会发现 post-build 操作已更新。  诚然、持续验证和更新文档的资源有限、因此感谢您报告所观察到的任何不一致之处。  

    我能够验证启用了 OTA 的 ZED 温度传感器工程是否能按预期在 SDK v7.10上运行、但是开发人员不应再 修改 SysConfig 文件以添加 m3Hwi.resetVectorAddress  = 0xA8;。  还建议根据所用的 SDK 复制/粘贴现有 ZED OTA 开关工程中的编译后处理步骤、如您所做的那样 并且继续查阅这个项目以确定是否存在任何其它必须被考虑在内的变化、这是因为它与用户指南中列出的步骤相关。  如果在调试器外部运行、请确保使用 Uniflash 加载片外 BIM 十六进制映像以及应用程序 OTA 二进制映像。

    此致、
    瑞安

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

    你好。 我已使用用户指南中的步骤更新了 post-build 步骤、但仍然没有更改。 程序卡住、看门狗将 MCU 复位。 故障点仍为 OTA 初始化功能。

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

    请确认我的其他建议已得到遵循、并考虑使用 v7.10 SDK 评估默认的 zed_temperaturesensor。  此外、进入 otaClient_Init 步骤、进一步确定 工程停止操作的 API、并继续以这种方式提供信息。

    此致、
    瑞安