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.

[参考译文] CC1352R:ApiMac status ==ApiMac_STATUS_noData 在 pollCb 内、当它被认为是 noAck 时。

Guru**** 2482105 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1234866/cc1352r-apimac-status-apimac_status_nodata-inside-pollcnfcb-when-it-was-supposed-to-be-noack

器件型号:CC1352R

嗨、团队!

我将在 FH 模式下使用具有32个通道的收集器和传感器的 SimpleLink SDK 示例。
https://dev.ti.com/tirex/explore/node?a=BSEc4rl__6.40.00.13&devtools=LAUNCHXL-CC1352R1&node=A__ADh8veUDmQ809L8z0l6GtQ__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__6.40.00.13&r=BSEc4rl__7.10.00.98

在下面的这个 线程的问题中 、我想它也与这个  和这个相关 。 在我运行了一些测试并挖掘了搜索问题原因的代码后、我发现当收集器关闭时、一些传感器会继续接收状态 ApiMac_STATUS_noData 或0xEB。  

某些传感器会接收状态 ApiMac_STATUS_noAck 或0xE9、因此进入孤立模式、有些传感器会接收状态0XEB。 然后继续重新设置 devInfoBlock.dataFailures、因此 if (devInfoBlock.dataFailures == CONFIG_MAX_DATA_FAULTS)绝不会验证为 true。

下面是代码:

static void pollCnfCb(ApiMac_mlmePollCnf_t *pData)
{
    Csf_print("POLLCNFCB",pData->status);
    if((pData->status == ApiMac_status_noData) ||
       (pData->status == ApiMac_status_success))
    {
        if(!CONFIG_FH_ENABLE)
        {
            if(devInfoBlock.currentJdllcState == Jdllc_states_initRestoring)
            {
                ApiMac_deviceDescriptor_t devInfo;
                Llc_netInfo_t parentNetInfo;
                populateInfo(&devInfo,&parentNetInfo);
                ApiMac_mlmeSetReqBool(ApiMac_attribute_RxOnWhenIdle,
                                      CONFIG_RX_ON_IDLE);

                /* device joined */
                if(pJdllcCallbacksCopy && pJdllcCallbacksCopy->pJoinedCb)
                {
                    pJdllcCallbacksCopy->pJoinedCb(&devInfo, &parentNetInfo);
                }

                updateState(Jdllc_states_rejoined);

                if((!CONFIG_RX_ON_IDLE))
                {
                    /* set event for polling if sleepy device*/
                    Util_setEvent(&Jdllc_events, JDLLC_POLL_EVT);
                }
            }
        }
        devInfoBlock.dataFailures = 0;
    }
    else if(pData->status == ApiMac_status_noAck)
    {

            /* track the number of failures  */
            devInfoBlock.dataFailures++;

        if((devInfoBlock.currentJdllcState == Jdllc_states_joined)
           || (devInfoBlock.currentJdllcState == Jdllc_states_rejoined))
        {
            if(!CONFIG_FH_ENABLE)
            {
                /* retry poll with shorter interval in busy network */
                Ssf_setPollClock(JDLLC_RETRY_POLL);
            }
        }

        if(devInfoBlock.dataFailures == CONFIG_MAX_DATA_FAILURES)
        {
            Csf_print("NOACK MAX FAILURES", pData->status);
            if(CONFIG_MAC_BEACON_ORDER == JDLLC_BEACON_ORDER_NON_BEACON)
            {
                handleMaxDataFail();
            }
        }
        else
        {
            if(devInfoBlock.currentJdllcState == Jdllc_states_initRestoring)
            {
                if((!CONFIG_RX_ON_IDLE) && (!CONFIG_FH_ENABLE))
                {
                    /* set event for polling if sleepy device*/
                    Util_setEvent(&Jdllc_events, JDLLC_POLL_EVT);
                }
            }
        }
    }
    else if(pData->status == ApiMac_status_channelAccessFailure)
    {
        if(!CONFIG_FH_ENABLE)
        {
            /* retry poll with shorter interval in busy network */
            Ssf_setPollClock(JDLLC_RETRY_POLL);
        }
    }

    if(macCallbacksCopy.pPollCnfCb != NULL)
    {
        macCallbacksCopy.pPollCnfCb(pData);
    }
}

以下是我在由10个传感器组成的网络中使用的调试终端:

我们可以看到、当收集器关闭时、有些传感器会进入孤立模式、然后进入复位模式。 有些仍在接收0xEB (235)。  
在频谱方面噪声较低的环境中 I m。  

问题可能是什么、有人能帮我解决这个问题吗?

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

    报告间隔= 60s

    轮询间隔= 10s

    最大故障= 5

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

    我最好的猜测是、由于孤立重置、它们开始发送 PCS 消息。 会在频谱中产生大量噪声。 无论哪种方式、回调不返回状态无数据、但返回的值与不同的值不同。 你怎么看?

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

    您好、Nelson、

    我试图在我的办公桌上复制这本书。 但是、我无法重现我们的传感器收集器示例的问题。  

    为了帮助您将通道数量限制为1,并使用数据包监听器查看那里发生了什么?  

    对于较小的网络 (6网络设备没有出现此问题),是否也会发生这种情况?

    您是否更改了以上描述的任何其他内容?  

    此致、

    亚历克斯  

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



    很抱歉回复延迟。

    当传感器进入孤立状态时、我会强制进行复位。 所以我怀疑的是、当多个传感器重置时、它们会开始发送 PC 的消息、从而在频谱中产生很大的噪音。  
    该噪声由传感器接收、而传感器尚未进入孤立状态并 仍在等待来自转换器的 ACK 信号。 由于某些原因,这被认为是"APIStatus_nodata"并因此返回错误235。 堆栈接收到的消息似乎没有被100%过滤。

    此致、


    纳尔逊

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

    嗨、尼尔森

    1.)为什么要让传感器在孤立后进行重置,是否要让它连接到另一个泛协调器,如果旧的一个已关闭?  

    2.)  为了测试您的假设、您可能会增加  

    #define CONFIG_PAN_ADDRT_CLK_DURATION  

    和  

    #define CONFIG_PAN_CONFIG_SETRADER_CLK_DURATION

    在 advanced_config.h 中  

    这将缩短发送广播消息的间隔、从而可能降低"噪声"  

    此致、

    亚历克斯

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



    在我将这些值从6000ms 增加到60000ms 后、仍有一些传感器不会处于孤立状态。  
    我设法通过延迟复位来解决问题。 进入孤立状态后、让传感器等待30s、然后进行复位似乎可以解决这个问题。


    但我仍然对堆栈有一个问题:

    堆栈过滤器是否应该确认不适用于特定传感器的消息? 也就是说、从传感器的角度来看、如果它发送 msg1、它应该会在响应中等待一条 ACK1消息、msg2-ack2、msg3-ack3、等等。 我不知道 ACK 的格式、但堆栈不应该滤除此类内容、如果它不是供传感器使用的 ACK、则返回235之外的状态?

    此致、

    纳尔逊

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

    我需要说明的是、我在31个传感器组成的网络中对此进行了测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么要您的传感器在孤立后进行重置,如果旧的 PAN 协调器关闭,是否要将其连接到另一个 PAN 协调器?  [/报价]

    您能回答这个问题吗?  

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

    您好、Nelson、

    要了解有关 ACK 帧的更多信息、请查看802.15.4标准。 它基本上是具有已更改的帧控制字段的通用帧。

    不过、使用我们的数据包监听器、 我在 ACK 帧(ACK-Frame)中未看到任何寻址、并且 帧控制字段中的寻址字段设置为 NONE。

    如果我了解 ACK 的正确工作方式、器件会发送一条消息并切换到 Rx 模式、使用专用数量的符号来查看是否接收到 ACK。

    但是、其他器件不应接收到该信号、因为每次只有一个器件在传输、因此只有一个器件等待 ACK。

    在您的情况下、 甚至不应作为对任何消息的确认、 ,如果 Pan-Cordinator 已关闭!!!

    此致、  

    亚历克斯