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.

[参考译文] CC2652R:ZigBee &Thread 论坛

Guru**** 2536320 points
Other Parts Discussed in Thread: UNIFLASH, Z-STACK, SIMPLELINK-CC13X2-26X2-SDK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/913826/cc2652r-zigbee-thread-forum

器件型号:CC2652R
主题中讨论的其他器件:UNIFLASHZ-STACKSIMPLELINK-CC13X2-26X2-SDK

尊敬的 TI 团队:

以前、 当我们使用 zed 开关(非 OTA)时、协调器 在调试时向 ZED 发送报告数据、我们没有遇到任何问题。

我们希望使用 SDK 310通过 FOTA 扩展 ZED 器件。

注意:我们首先复位、并使用 Uniflash 加载 BIM、FOTA 操作可以正常工作。

以下是使用 zed switch-ota 的基本配置:  

但是、当我只运行调试并在 zclSampleSw_ProcessInReportCmd 函数中放置断点时、断点不会生效。

1、我们是否在使用 FOTA 配置示例代码时遗漏了任何内容?

此致、

Walter

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

    尊敬的 TI 团队:

    我使用的 zed 开关非 OTA 的基本修改与 使用 OTA 示例代码的 zed 开关完全相同。

    当我只运行 debug 并在 zclSampleSw_ProcessInReportCmd 函数中放置断点时、断点开始生效。

    似乎是 SDK 问题、请确认。  

    此外、请注意、问题仅是传入消息。 发送出去的消息可以成功发送。

    此致、

    Walter

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

    您好、Ryan、

    我需要您的反馈、因为我们的项目目前完全停止、直到 我们知道 FOTA 封装可以正常工作或不起作用

    此致、

    Walter

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

    e2e.ti.com/.../can-pair--ff62-non-ota-code-basic-implementation.rar

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

    e2e.ti.com/.../cannot-pair-d45a-no-report-command.rar

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

    您好、Walter、

      您是否能够在属性报告中拆分 zclParseInReportCmd 或 zclSampleSw_ProcessIncomingMsg?  您是否比较了 zcl_samplesw[_data].c/.h 文件中的任何差异?  v4.10 SDK 是否可以重复出现此问题?

    此致、
    Ryan

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

    您好、Ryan、

    我们比较 了使用 OTA 和使用非 OTA 的示例代码之间的 zcl_samplesw[_data].c/.h 没有差异。

    此外、 不能在 zclSampleSw_ProcessIncomingMsg 内部中断。我们在 sDK3.10和 SDK3.20中看到的 zed 开关 OTA 中存在此问题。   sDK3.10中的采样开关(非 OTA)没有问题。

    对于最新的 SDK、我将尝试并告知您。

    是否有人可以在 zed switch OTA 示例代码中确认此问题?

    此致、

    Walter

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

    您好、Ryan、

    我使用了 sdk310/3.20、它可以在 zcl.c 的 zclParseInReportCmd 中中断、但不能在 zclSampleSw_ProcessIncomingMsg 中中断。

    请告诉我们如何解决。

    此致、

    Walter

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

    您好、Walter、

    感谢您将此事提请我们注意。   使用 OtaClient_SetEndpoint (SAMPLESW_EndPoint);调用 zclport_registerZclHandleExternal (OTA_ProcessUnhandledFoundationZCLMsgs);该操作会覆盖 zclport_registerZclHandleExternal (zclSampleSw_ProcessIncomingMsg);  目前、Z-Stack 应用只将一个函数注册到 zcl_HandleExternal、因此只有一次回调可以处理 ZCL 消息。  当尝试让2个或更多端点共存时、这种情况会出现问题、例如 OTA 与应用程序共存。  所有 SDK 版本都受此问题影响。  我将与软件开发团队合作解决该问题、并尽快提供解决方法。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您确认此问题。  

    如果您有解决方法、请告诉我们、因为我们需要尽快解决。

    此致、

    Walter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    // ZCL 处理程序外部的多个端点,由 loyiming 2020-02-08
    typedef struct
    {添加
    void *next;
    uint8_t 端点;
    zclport_pFnZclHandleExternal PFn;
    }zclHandleExternalList_t;
    
    ..........................................................................
    
    //应用程序到 ZCL 句柄的函数指针外部
    //通过 loyiming 在2020-02-08
    zclHandleExternalList_t *zclHandleExternalList = NULL 添加了多个端点处理
    
    
    
    
    /**
    *调用以注册函数指针来处理 zcl_HandleExternal()消息。
    *在202020-02-08时通过 loyiming 添加了多个端点处理。
    *
    * zcl_port.h 中定义的公共函数
    */
    bool zclport_registerZclHandleExternal (uint8_t endpoint、zclport_pFnZclHandleExternal PFn)
    {
    zclHandleExternalList_t *查找=zclHandleExternalList;
    zclHandleExternalList_t *tail =空;
    //如果端点有效,则通过 loyiming 2020-02-08添加
    if (zcl_afFindEndPointDesc( EndPoint )== NULL)
    {
    返回 false;
    }
    
    //如果有相同的端点,则匹配并找到尾项,通过 loyiming 2020-02-08进行修复
    while (查找)
    {
    if (find->endpoint==端点)
    {
    find->PFN = PFN;
    返回 true;
    }
    if (find->next == NULL)
    {
    尾部=查找;
    }
    find= find->next;
    }
    
    //添加新项目,由 loyiming 2020-02-08确定
    zclHandleExternalList_t *newItem = zcl_mem_alloc (sizeof (zclHandleExternalList_t));
    if (newItem)
    {
    newItem->next = NULL;
    newItem->EndPoint =端点;
    newItem->PFN = PFN;
    if (zclHandleExternalList == NULL)
    {
    zclHandleExternalList = newItem;
    }
    其他
    {
    tail->next = newItem;
    }
    返回 true;
    }
    返回 false;
    }
    
    
    ..........................................................................
    
    
    
    
    /*********
    *@fn zcl_HandleExternal
    *
    *@用于外部处理消息的简短回调函数
    *
    *@param pInMsg -要处理的传入消息
    *
    *@return true
    */
    uint8_t zcl_HandleExternal (zclIncoming_t * pInMsg)
    {
    
    #ifdef BDB_REPORTING
    zclIncomingMsg_t *pCmd;
    
    pCmd =(zclIncomingMsg_t *) OsalPort_msgAllocate (sizeof (zclIncomingMsg_t));
    if (pCmd!= NULL)
    {
    //填写消息
    pCMd->HDR.EVENT = ZCL_INVING_MSG;
    pCmd->zclHdr = pInMsg->HDR;
    pCmd->clusterid = pInMsg->msg->clusterid;
    pCmd->srcAddr = pInMsg->msg->srcAddr;
    pCmd->endpoint=pInMsg->msg->endpoint;
    pCmd->attrCmd = pInMsg->attrCmd;
    
    if (pcmd->zclHdr.commandID =ZCL_CMD_CONFIG_REPORT)
    {
    Zstack_BdbProcessInConfigReportReq_t Req ={0};
    REQ.pZclIncommingMsg = pCmd;
    
    Zstackapi_BdbProcessInConfigReportCmd (zclPortFindEntity(pCmd->endpoint)、&Req);
    OsalPort_msgDealloc((uint8_t*) pCmd);
    返回 true;
    }
    if (pcmd->zclHdr.commandID =ZCL_CMD_READ_REPORT_CFG)
    {
    Zstack_BdbProcessInReadReportCfgReq_t Req ={0};
    REQ.pZclIncommingMsg = pCmd;
    
    Zstackapi_BdbProcessInReadReportCfgCmd (zclPortFindEntity(pCmd->endpoint)、&Req);
    
    OsalPort_msgDealloc((uint8_t*) pCmd);
    返回 true;
    }
    OsalPort_msgDealloc((uint8_t*) pCmd);
    }
    
    #endif
    
    // zclHandleExternal 用于多个端点,通过 loyiming 2020-02-08进行修复
    zclHandleExternalList_t *查找=zclHandleExternalList;
    //应用程序是否注册了处理此消息
    while (查找)
    {
    if (( find->endpoint=pInMsg->msg->endpoint )&&( find->PFn ))
    {
    //让应用程序处理它
    return (find->PFN( pInMsg ));
    }
    find= find->next;
    }
    return (true);
    }
    
    
    
    
    

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

    您好 Aries / Ryan、

    谢谢你。

    我测试过、如果我使用不同的端点、它可以工作。

    初始化如下所示:

    OtaClient_SetEndpoint (SAMPLESW_EndPoint + 1);

    zclport_registerZclHandleExternal (SAMPLESW_终结 点、zclSampleSw_ProcessIncomingMsg);

     是否需要?

    此致、

    Walter

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

    您好、Ryan / Aries、

    配置1

    OtaClient_SetEndpoint (SAMPLESW_EndPoint + 1);

    zclport_registerZclHandleExternal (SAMPLESW_终结 点、zclSampleSw_ProcessIncomingMsg);

     --有传入消息,但无法进行 OTA。

    配置2.

    OtaClient_SetEndpoint (SAMPLESW_EndPoint);

    zclport_registerZclHandleExternal (SAMPLESW_终结 点、zclSampleSw_ProcessIncomingMsg);

     --没有传入消息 ,但可以进行 OTA

    注:未解决问题。

    此致、

    Walter

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

    如果您的 OTA-客户端在应用程序-端点中使用相同的端点,请查看此处:https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/t/916746

    如果 您的 OTA-客户端将不同的端点与应用端点一起使用、请在项目中定义"OTA_Standalone (OTA_Standalone)"。

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

    您好、Ryan、

    我尝试使用 define "ota_standalone "并取消注释该静态 uint8 zclota_TaskID 以完成构建、但遇到了以下问题:

    [E0004]用于重定位的无效数据大小:

     错误! 在第861行:[E0004]重定位的数据大小无效
    .bits zclota_TaskID、8;$O1$$.zclota_EP.epType @ 584

    此致、

    Walter

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

    您好 Aries、

    我尝试添加 yu Yuming 更改以使用相同的端点。

    我注意到 OTAPER_SetEndpoint 的所有调用都使用 NULL 作为第二个参数。

    因此、我在示例开关代码中使用了相同的代码:

    #if 已定义(OTA_CLIENT_CC26XX)

    OtaClient_SetEndpoint (SAMPLESW_EndPoint、NULL);

    OTA_Client_Init (appSemHandle、appServiceTaskId);
    #endif

    但是、 如果我在 zclSampleSw_ProcessIncomingMsg 中放置断点、则不会再出现传入消息。

    和,注释:

    #if 已定义(OTA_CLIENT_CC26XX)

    //OtaClient_SetEndpoint (SAMPLESW_EndPoint、NULL);

    //ota_Client_Init (appSemHandle、appServiceTaskId);
    #endif

    它可以接收消息 zclSampleSw_ProcessIncomingMsg。

    任何关于如何从 交换机应用程序中将 OTAPER_SetEndpoit 作为第二个参数传入的想法。

    此致、

    Walter

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

    在您的应用文件"zcl_samplesw.c"中、像这样修复

    静态 void zclSampleSw_initialization (void)
    {
    
    ......
    
    #if 已定义(OTA_CLIENT_CC26XX)
    OtaClient_SetEndpoint (SAMPLESW_终结 点,zclSampleSw_ProcessIncomingMsg);
    OTA_Client_Init (appSemHandle、appServiceTaskId、gCuiHandle);
    #endif
    
    
    }
    

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

    主要目的是强制"zclSampleSw_ProcessIncomingMsg"在"OTA_ProcessUnhandledFoundationZCLMsgs"中运行

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

    您好 Aries、

    谢谢你。 我确认同一个端点可以通过 luming 添加一些修复程序来工作

    此致、

    Walter

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

    您好 Aries / Ryan、

    添加 Aries 解决方案后、FOTA 正常工作、但我注意到调试未正确完成。

    我们在 SDK 3.10中使用 SMART SWITCH_OTA 示例代码。

    请查看监听器日志。

    e2e.ti.com/.../snifferlog-cannot-complete-commisoning-0x9005.7z

    此致、

    Walter

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

    您好、Walter、

    我假设问题中的 PAN ID 是0x7E91?  器件短地址0x9005正确加入并开始发送常规数据请求、因此、您能否阐明您还希望发生什么情况?  如果协调员要采取进一步的 F&B 行动、请确保在此期间启用了此功能。

    此致、
    Ryan

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

    您好、Ryan、

    像这样的原始实现、使用类似这样的非 FOTA 代码。 节点描述符请求/响应后、它可以完全加入:

     FOTA 开关示例代码。

    相关器件为0x9005。  节点描述符请求/响应后、它无法完全加入:

    以及为什么器件发送太多匹配描述符请求。 正确吗?

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

    您好、Walter、

    ZED 成功加入网络,但未完成绑定。  ZC 父级不响应标识请求、因此我建议您在上一次答复中启用 F&B 模式。  因此,ZED 永远不会发送节点描述符请求,从中形成绑定并开始发送属性报告。  对于匹配描述符请求、这来自 ZCL_OTA_SEND_MATH_REGER_EVT、以发现 ZC 也不响应的 OTA 服务器。  因此、您需要进一步研究您的 ZC OTA 服务器解决方案。

    注意:最新的 SIMPLELINK-CC13X2-26X2-SDK 版本对 OTA 解决方案进行了多项改进、我强烈建议您进行相应的迁移。

    此致、
    Ryan