CC2652P7: 关于CC2652通讯失败问题

Part Number: CC2652P7
Other Parts Discussed in Thread: CC1352P7, SYSCONFIG

你好:

       我将CC2652P7设置发送功率为20db 。zc和zed数据在距离较近(10m以内)时可以通讯上,距离较远时通讯不上,但是使用zigbee抓包可以看到数据请求,这是因为什么?抓包数据如下

  • 已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好,

    这取决于射频链路预算。

    监听器硬件设计可能具有比 ZC/ZED 更好的接收灵敏度、从而使监听器能够在给定设置下查看更多的数据包。

    ZC/ZED 是客户设计的定制硬件吗? 如果是、我建议运行灵敏度测试(例如 SmartRF Studio)-如果这里需要更多帮助、我可以联系我们的射频硬件专家来提供见解!

  • 您好,

    这个灵敏度测试工具主要关注那些指标?我们需要提供那些测试参数以及结果以供贵司专家协助分析?

    ZC&ZED都是基于信驰达的RF-BM-2652P4I这个模组硬件,天线采用了引出的外部天线方式。

    信驰达该模组的情况:https://szrfstar.com/product/cc2652p7_matter_zigBee_thread_ble_rf_ipex_module-en.html

    谢谢

  • 您好,

    请进行RX灵敏度测试并提供结果。 然后,我可以向硬件专家咨询意见。

    Basic RF Testing of CCxxxx Devices

  • 你好:

         测试结果如图所示。使用Packet TX 和 Packet RX时可以正常接到数据,但使用Zigbee例程时通讯不上。在相同的距离下。

  • 您好,

    您能否指定 SDK 中的哪些示例在 ZC/ZED 上运行?

    请注意、为了在 SDK 示例中支持20dBm、应遵循此处类似的步骤:(2) LAUNCHXL-CC1352P: Building Zigbee Network Processor (ZNP) Example App for CC2652P7 chip - Zigbee & Thread forum - Zigbee & Thread - TI E2E support forums

  • 不清楚什么原因,在这里的回复总是失败。

    SDK使用simplelink_cc13xx_cc26xx_sdk_8_30_01_01   

    例程使用zc_thermostat_LP_CC1352P7_4_tirtos7_ticlang  和 zed_temperatursensor_LP_CC1352P7_4_tirtos7_ticlang

    核心的函数如下:

    发送程序使用函数使用static void zclGenericApp_ReportCommand(uint16 shortAddr, uint16 len, uint8 *cmd)
    {
      static uint8 seqNum = 0;  
      zclReportCmd_t *reportCmd;

     
        //目标设备的地址信息
        afAddrType_t destAddr;  
        destAddr.addrMode = afAddr16Bit;
        destAddr.endPoint = GENERICAPP_ENDPOINT;
        destAddr.addr.shortAddr = shortAddr;
        reportCmd = (zclReportCmd_t *)OsalPort_malloc(sizeof(zclReportCmd_t)+sizeof(zclReport_t));//申请内存空间
        if(reportCmd == NULL)//判断内存空间是否申请成功
             return;  
     
        reportCmd->numAttr = 1;//属性数量为1
        reportCmd->attrList[0].attrID = ATTRID_CLUSTER_UART ;
        reportCmd->attrList[0].dataType = ZCL_DATATYPE_CHAR_STR;//数据类型
        (reportCmd->attrList[0].attrData) = cmd;//属性值
        
        //上报数据
        zcl_SendReportCmd(GENERICAPP_ENDPOINT,//源端点号
            &destAddr,//地址信息
            ZCL_CLUSTER_ID_GENERAL_ALARMS,//Cluster ID
            reportCmd,
            ZCL_FRAME_CLIENT_SERVER_DIR,//通信方向为从客户端到服务端
            TRUE,//关闭默认响应(目标设备的响应)
             seqNum++ );//数据包标号,每上报一次数据seqNum的值就会增加1
     
        OsalPort_free(reportCmd);
    }

    是否还需要其它信息?

    谢谢

  • 另外,关于20dBm,我们就是参考这个步骤做的。该配置生效后,对通信效果有改善,但离我们的预期还差很远。

    目前我们回复的所有结果都是基于这个20dBm的发射功率测试得到的。

  • 您好,

    请确认您已完成此处的所有步骤:(+) LAUNCHXL-CC1352P: Building Zigbee Network Processor (ZNP) Example App for CC2652P7 chip - Zigbee & Thread forum - Zigbee & Thread - TI E2E support forums

    其他意见:

    1,使用 stackapi_sysSetTxPowerReq()在运行时设置并确认20dBm TX 功率设置。
    2,确认用于评估系统的 TI LaunchPad 或third-party module
    3,如果使用定制电路板、请确认匹配网络已针对+20dBm 进行了优化、并且设计已经由 TI 审查

  • 确认已经完成所有关于20dBm的步骤。已经使用stackapi_sysSetTxPowerReq()在运行时设置并确认20dBm TX 功率。已和信驰达的FAE联系确认过,模组已经对+20dBm做过优化,下图是他们提供的测试效果802.15.4

  • 您好,

    该配置生效后,对通信效果有改善,但离我们的预期还差很远。

    这可以用 Zigbee 量化吗? 数据包丢失前的最大距离是多少? 它与在+20dBm LaunchPad 设置(如 LAUNCHXL-CC1352P-2)上进行评估时的距离相同吗? 

    下图是他们提供的测试效果802.15.4

    该输出是否显示在 Smart RF Studio 8的频谱分析仪或 Zigbee SimpleLink F2 SDK 示例上? 

  • 不是很明白您这里的量化时什么意思。我们最开始用的是默认的4dBm的配置,大约只能在2-3米的距离内稳定通信。后面使用了20dBm的配置,稳定通信距离扩大到15-20m的距离。超过这个距离之后,我们使用的dongle可以监听到通信,但是我们的两个设备连接不成功。

    但根据zigbee的理论通信距离,这个距离至少也应该在100米左右。(以上所述都是无遮挡距离)

    信驰达的FAE告诉我,这个图是用smart 控制模块工作测的。具体我就也不是很清楚了。

  • Hi Lydia,

    您好,下图是我们通过dongle抓到的包:

    从dongle抓到的包信息分析,我们认为在更远距离上通信失败的原因是终端设备没有收到协调器的Beacon Payload回复。

    这个是否是因为终端设备配置的可识别信号强度阈值过低有关?我们是否能够通过修改终端设备的信号阈值进行下尝试?如果可以修改,该在哪里,怎么修改?

    谢谢

  • 您好,

    4 dBm 的距离也低于预期。 使用开箱即用、未修改的 zc_恒温 器/zed_temperaturesensor 设置时、它们是否收到相同的效果? 从 Zigbee 协议栈和 Smart RF Studio 7接收到的数据包的 RSSI 水平是多少? 使用的电源电压是多少? 它们是在安静或嘈杂的信道上进行测试? 您可以让它们启用射频输出以进一步调试和使用示波器或逻辑分析仪监控其 DIO28/29 (表3)。

  • Hi Lydia,

    关于你的建议。RSSI水平,如上面回复中的截图,应该是-101dBm, 电源电压是3.3V,信道是默认信道。

    我们尝试过加大电源电压到3.8V.以及更换信道,均无改善。

    至于使用未修改的 zc_恒温 器/zed_temperaturesensor ,因为考虑到这个demo示例还有串口操作,而我们又是现有模块,不太方便,所以未作尝试。现在我们看看如何在最小改动的情况下,使用这个demo进行下测试。

    谢谢

  • 您好,

    -101dBm 是非常低的 RSSI 值、超过了 CC2652P7的 IEEE 无线电接收器灵敏度、超出了改变 RSSI 灵敏度所能达到的水平。

    3.3V 是正常的、增加电压在该电平下不会产生差异。 使用信道25和26时、TX 功率级别存在一些限制、但听起来他们也考虑了其他信道。

    该演示可以使用按钮操作进行调试、可以通过将相应的 DIO 短接至 GND 在模块上对其进行仿真。 或者、您可以在器件初始化后使用计时器一秒钟左右启动 Zstackapi_bdbStartCommissioningREQ。

    客户能否提供自定义的 ti_radio_config.c、ti_drivers_config.c 和 SysConfig 文件以供查看?

  • Hi Lydia,

    好消息。我们通过SmartRF Studio已经可以做到100m+的通信距离了。

    问题似乎是出在我们对天线的IO配置上。我们目前在SmartRF Studio中的IO配置情况如下:

    请教下,如何在ZStack协议栈中配置这个IO为如上图所示的状态?是不是要实现rfDriverCallbackAntennaSwitching函数,是的话,有没有参考例程?

    谢谢

  • 您好,

    假设您遵循了这些步骤

    LAUNCHXL-CC1352P: Building Zigbee Network Processor (ZNP) Example App for CC2652P7 chip - Zigbee & Thread forum - Zigbee & Thread - TI E2E support forums

    并且 ti_drivers_config.c 被单独保留(由 SysConfig 生成),它将包含原始 rfDriverCallbackAntennaSwitching,它将具有 Smart RF Studio 7 参考中列出的 DIO28/29/30 的正确方向。

    /*
     * ======== Antenna switching ========
     */
    /*
     * ======== rfDriverCallbackAntennaSwitching ========
     * Sets up the antenna switch depending on the current PHY configuration.
     *
     * Truth table:
     *
     * Path       DIO28 DIO29 DIO30
     * ========== ===== ===== ===== 
     * Off        0     0     0
     * 2.4 GHZ    1     0     0
     * HIGH PA    0     1     0
     * SUB1 GHZ   0     0     1
     */
    void __attribute__((weak)) rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
    {
    
        if (events & RF_GlobalEventRadioSetup) {
            bool    sub1GHz   = false;
            uint8_t loDivider = 0;
    
            /* Switch off all paths. */
            GPIO_write(CONFIG_RF_24GHZ, 0);
            GPIO_write(CONFIG_RF_HIGH_PA, 0);
            GPIO_write(CONFIG_RF_SUB1GHZ, 0);
    
            /* Decode the current PA configuration. */
            RF_TxPowerTable_PAType paType = (RF_TxPowerTable_PAType)RF_getTxPower(client).paType;
    
            /* Decode the generic argument as a setup command. */
            RF_RadioSetup* setupCommand = (RF_RadioSetup*)arg;
    
            switch (setupCommand->common.commandNo) {
                case (CMD_RADIO_SETUP):
                case (CMD_BLE5_RADIO_SETUP):
                        loDivider = RF_LODIVIDER_MASK & setupCommand->common.loDivider;
    
                        /* Sub-1GHz front-end. */
                        if (loDivider != 0) {
                            sub1GHz = true;
                        }
                        break;
                case (CMD_PROP_RADIO_DIV_SETUP):
                        loDivider = RF_LODIVIDER_MASK & setupCommand->prop_div.loDivider;
    
                        /* Sub-1GHz front-end. */
                        if (loDivider != 0) {
                            sub1GHz = true;
                        }
                        break;
                default:break;
            }
    
            if (sub1GHz) {
                /* Sub-1 GHz */
                if (paType == RF_TxPowerTable_HighPA) {
                    /* PA enable --> HIGH PA
                     * LNA enable --> Sub-1 GHz
                     */
                    GPIO_setConfigAndMux(CONFIG_RF_24GHZ, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
                    /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
                             de-asserted on CC1352 Rev A. */
                    GPIO_setConfigAndMux(CONFIG_RF_HIGH_PA, GPIO_CFG_OUTPUT, IOC_PORT_RFC_GPO3);
                    GPIO_setConfigAndMux(CONFIG_RF_SUB1GHZ, GPIO_CFG_OUTPUT, IOC_PORT_RFC_GPO0);
                } else {
                    /* RF core active --> Sub-1 GHz */
                    GPIO_setConfigAndMux(CONFIG_RF_24GHZ, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
                    GPIO_setConfigAndMux(CONFIG_RF_HIGH_PA, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
                    GPIO_setConfigAndMux(CONFIG_RF_SUB1GHZ, GPIO_CFG_OUTPUT | GPIO_CFG_OUT_HIGH, IOC_PORT_GPIO);
                }
            } else {
                /* 2.4 GHz */
                if (paType == RF_TxPowerTable_HighPA)
                {
                    /* PA enable --> HIGH PA
                     * LNA enable --> 2.4 GHz
                     */
                    GPIO_setConfigAndMux(CONFIG_RF_24GHZ, GPIO_CFG_OUTPUT, IOC_PORT_RFC_GPO0);
                    /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
                             de-asserted on CC1352 Rev A. */
                    GPIO_setConfigAndMux(CONFIG_RF_HIGH_PA, GPIO_CFG_OUTPUT, IOC_PORT_RFC_GPO3);
                    GPIO_setConfigAndMux(CONFIG_RF_SUB1GHZ, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
                } else {
                    /* RF core active --> 2.4 GHz */
                    GPIO_setConfigAndMux(CONFIG_RF_24GHZ, GPIO_CFG_OUTPUT | GPIO_CFG_OUT_HIGH, IOC_PORT_GPIO);
                    GPIO_setConfigAndMux(CONFIG_RF_HIGH_PA, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
                    GPIO_setConfigAndMux(CONFIG_RF_SUB1GHZ, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
                }
            }
        }
        else if (events & RF_GlobalEventRadioPowerDown) {
            /* Switch off all paths. */
            GPIO_write(CONFIG_RF_24GHZ, 0);
            GPIO_write(CONFIG_RF_HIGH_PA, 0);
            GPIO_write(CONFIG_RF_SUB1GHZ, 0);
    
            /* Reset the IO multiplexer to GPIO functionality */
            GPIO_setConfigAndMux(CONFIG_RF_24GHZ, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
            GPIO_setConfigAndMux(CONFIG_RF_HIGH_PA, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
            GPIO_setConfigAndMux(CONFIG_RF_SUB1GHZ, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
        }
    }

  • Hi Lydia,

    Thanks,就是这个。问题Fix。可以关闭了。

    谢谢