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.

[参考译文] CC1352P:TI-15.4收集器无法从传感器节点接收数据、而无法将数据发送到传感器节点

Guru**** 2473260 points
Other Parts Discussed in Thread: CC1352P, CC1190, CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1395942/cc1352p-ti-15-4-collector-cannot-receive-data-from-sensor-node-s-while-being-able-to-send-data-to-sensor-node-s

器件型号:CC1352P
Thread 中讨论的其他器件: CC1190CC1310

工具与软件:

您好!

我们正在测试基于 CC1352P 和 TI-15.4非信标模式的网络、并发现收集器节点复位后会出现一些奇怪的行为。 大多数情况下、大多数传感器节点无线电可以在收集器节点复位后自动重新加入网络(由下电上电或外部 RST 引脚信号触发)、或通过以下方式触发计时器触发的系统复位:

SysCtrlSystemReset();

有时、网络中的某些传感器节点可以重新加入网络、但除了跟踪数据包之外、无法接收任何应用层数据包;有时、传感器可以重新加入网络、甚至接收收集器节点发送给它的应用层数据、但收集器节点不会接收传感器节点发送给收集器的数据包。 发生这种情况时、以下函数返回的状态代码:

/*!
 * @brief      MAC Data Confirm callback.
 *
 * @param      pDataCnf - pointer to the data confirm information
 */
static void dataCnfCB(ApiMac_mcpsDataCnf_t *pDataCnf)

仍然为0x00/SUCCESS

发生这种情况时、如果我们手动重新启动受影响的传感器节点、一切都将恢复到预期状态。 但由于返回的状态代码仍然为0x00、因此传感器节点本身不知道收集器实际上并不接收这些数据包。 这使得无法使用代码进行管理。

我的问题是、这怎么可能发生? 我怀疑收集器节点收到这些数据包但无法解密。  

请告知:

ZL

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

    尊敬的 ZL:

    您能否提供演示错误行为的监听器日志?  此外、获得 SimpleLink F2 CC13XX/CC26XX SDK 版本以及有关网络大小以及对默认传感器/收集器示例进行的任何更改都会很有帮助。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的答复。

    SDK 版本为 v7.41.00.17、具有非信标模式和 custom-phy。 但我们在跳频模式下遇到了与 CC1310 + CC1190无线电和 SDK v4.20类似的问题。 我还没有嗅探器日志、一旦有了它们、我就会重新发布。

    我还在收集器节点代码中添加了一些调试输出:

    /*!
     * @brief      MAC Data Indication callback.
     *
     * @param      pDataInd - pointer to the data indication information
     */
    static void dataIndCB(ApiMac_mcpsDataInd_t *pDataInd)
    {
        if((pDataInd != NULL) && (pDataInd->msdu.p != NULL)
           && (pDataInd->msdu.len > 0))
        {
            Smsgs_cmdIds_t cmdId = (Smsgs_cmdIds_t)*(pDataInd->msdu.p);
    
            char debugInfo[128];
    
    #ifdef FEATURE_MAC_SECURITY
            {
                if(Cllc_securityCheck(&(pDataInd->sec)) == false)
                {
                    memset(debugInfo, 0x00, sizeof(debugInfo));
                    sprintf(debugInfo, "SC failed, srcAddr =%04X", pDataInd->srcAddr.addr.shortAddr);
                    atUartOutputDebugInfo(debugInfo, strlen(debugInfo));
                    /* Reject the message */
                    return;
                }
            }
    #endif /* FEATURE_MAC_SECURITY */
    
            if(pDataInd->srcAddr.addrMode == ApiMac_addrType_extended)
            {
                uint16_t shortAddr = Csf_getDeviceShort(
                                &pDataInd->srcAddr.addr.extAddr);
                if(shortAddr != CSF_INVALID_SHORT_ADDR)
                {
                    /* Switch to the short address for internal tracking */
                    pDataInd->srcAddr.addrMode = ApiMac_addrType_short;
                    pDataInd->srcAddr.addr.shortAddr = shortAddr;
                }
                else
                {
                    /* Can't accept the message - ignore it */
                    memset(debugInfo, 0x00, sizeof(debugInfo));
                    sprintf(debugInfo, "Addr ET failed, srcAddr =%04X", pDataInd->srcAddr.addr.shortAddr);
                    atUartOutputDebugInfo(debugInfo, strlen(debugInfo));
                    return;
                }
            }
    
            switch(cmdId)
            {
                case Smsgs_cmdIds_configRsp:
                    processConfigResponse(pDataInd);
                    break;
    
                case Smsgs_cmdIds_trackingRsp:
                    processTrackingResponse(pDataInd);
                    break;
    
                case Smsgs_cmdIds_IdentifyLedReq:
                    processIdentifyLedRequest(pDataInd);
                    break;
    
                case Smsgs_cmdIds_toggleLedRsp:
                    processToggleLedResponse(pDataInd);
                    break;
    
                case Smsgs_cmdIds_sensorData:
                    processSensorData(pDataInd);
                    break;
                case Smsgs_cmdIds_rampdata:
                    Collector_statistics.sensorMessagesReceived++;
                    break;
    #ifdef FEATURE_SECURE_COMMISSIONING
                case Smgs_cmdIds_CommissionMsg:
                    /* Process Security manager commissioning data */
                    SM_processCommData(pDataInd);
                    break;
    #endif /* FEATURE_SECURE_COMMISSIONING */
    
    #if defined(DEVICE_TYPE_MSG)
                case Smsgs_cmdIds_DeviceTypeRsp:
                    processDeviceTypeResponse(pDataInd);
                    break;
    #endif /* DEVICE_TYPE_MSG */
                // Customized Smsgs_cmdIds
                case Smsgs_cmdIds_PassThroughMessageReq:
                case Smsgs_cmdIds_PassThroughDataReq:
                    // This sends data out to external MCU via UART
                    processDataPassThrough(pDataInd);
                    break;
                default:
                    /* Should not receive other messages */
                	/* Can't accept the message - ignore it */
    				memset(debugInfo, 0x00, sizeof(debugInfo));
    				sprintf(debugInfo, "Unknown cmdIds = %02X, srcAddr =%04X", cmdId,  pDataInd->srcAddr.addr.shortAddr);
    				atUartOutputDebugInfo(debugInfo, strlen(debugInfo));
                    break;
            }
        }
    }

    当 传感器加入网络时、有时甚至会从收集器接收数据、但此传感器节点发送的数据无法显示在收集器无线电的外部 MCU 上、我不会观察到任何这些调试输出、表示根本没有调用 dataIndCB。

    同时、以下函数返回的所有状态代码均保持为0x00。

    /*!
     * @brief      MAC Data Confirm callback.
     *
     * @param      pDataCnf - pointer to the data confirm information
     */
    static void dataCnfCB(ApiMac_mcpsDataCnf_t *pDataCnf)

    总而言之、我怀疑传感器节点发送的所有数据包都在收集器节点上的 MAC 和应用层之间以某种方式丢失。

    我记得在这里看到的一些帖子时会发生故障、说如果收集器重置、传感器节点可能看起来能够重新加入网络、但实际上无法发送数据、但我无法找到该帖子。

    Regardes、

    ZL

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

    其他可能相关的信息为: MAX_DEVICE 设置为150、NVS 大小保留为默认值。