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.

[参考译文] CC2640R2F:当多个从器件连接到一个主器件时、其中一个从器件将无法打开&'notification'

Guru**** 2625255 points

Other Parts Discussed in Thread: CC2640, SIMPLELINK-CC13XX-CC26XX-SDK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1197578/cc2640r2f-when-multiple-slaves-were-connected-to-one-master-one-of-the-slaves-would-fail-to-turn-on-notify

器件型号:CC2640R2F
主题中讨论的其他器件:CC2640

大家好、

主器件为 cc2642、从器件为 cc2640。

当一个主站有6个从站时、 我可以开启"通知"并执行数据传输。 当一个主器件 有7个从器件时、第七个从器件无法开启"通知"。 当一个主器件有8个从器件时、第七个从器件  也无法开启"通知"。 如果 连接到主器件的从器件数量超过6个、我应该进行哪些修改来解决这个问题?

    for(i=0;i<MAX_NUM_BLE_CONNS;i++)
    {
        req.pValue = GATT_bm_alloc(connList[i].connHandle, ATT_WRITE_REQ, 2, NULL);
        if ( req.pValue != NULL )
        {
            if(index ==SIMPLEPROFILE_CHAR1)
            {
                req.handle = connList[i].charHandle+1;
            }
            else if(index ==SIMPLEPROFILE_CHAR2)
            {
                req.handle = connList[i].charHandle+5;
            }
            req.len = 2;
            req.pValue[0] = LO_UINT16(GATT_CLIENT_CFG_NOTIFY); //0x0001 is to turn on 'notify'.
            req.pValue[1] = HI_UINT16(GATT_CLIENT_CFG_NOTIFY);
            req.sig = 0;
            req.cmd = 0;

            uint8_t status = GATT_WriteCharValue(connList[i].connHandle, &req, selfEntity);
//            System_printf("Notification connHandle:%d,%d\r\n",connList[i].connHandle,i);

            CPUdelay(100);//250 * 48 / 4    //6*3
            if ( status != SUCCESS )
            {
            GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
              #ifdef uart_debug
//                        System_printf("Notification failed:%d\r\n",i);
                        pStrAddr = (uint8_t*) Util_convertBdAddr2Str(connList[i].addr);
                    System_printf( "Notification failed:%d , %s\r\n",  i,pStrAddr);
              #endif
//                return false;
                        i--;
//                        CPUdelay(6*3);
            }
//            else
//            {
//            //                SimpleCentral_autoConnect();
//            //                    System_printf("Notification success:%d\r\n",i);
//                return true;//return use careful!
//            }
        }
    }

此致、

Katherine

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

    您好、Katherine

    感谢您与我们联系。 我们将仔细查看您的问题、并尽快与您联系。 同时、您可以指定用于 CC2642和 CC2640R2的 SDK 版本吗?

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

    您好、Katherine

    为了补充 Jan 的回答、您能否澄清一下您的意思、即"未能开启'通知'"。 是否会得到特定的错误代码? 系统是否挂起? CCCD 是否已写入、但堆栈不会将通知传递给应用程序?  

    我建议您使用蓝牙记录器收集低功耗蓝牙跟踪、以便能够识别问题。  

    此致、

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

    大家好、Jan、

    您能指定用于 CC2642和 CC2640R2的 SDK 版本吗?

    是的

    simplelink_cc13x2_26x2_SDK_4_30_00_54

    simplelink_cc2640r2_sdk_4_20_00_04

    此致、

    Katherine

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

    您好、Katherine、

    请务必考虑以下因素

    为了补充 Jan 的回答、您能否澄清一下您的意思、即"未能开启'通知'"。 是否会得到特定的错误代码? 系统是否挂起? CCCD 是否已写入、但堆栈不会将通知传递给应用程序?  

    我建议您使用蓝牙记录器收集低功耗蓝牙跟踪、以便能够识别问题。  

    [/报价]

    此外、我建议您使用 可用的最新 SIMPLELINK-CC13XX-CC26XX-SDK 版本运行其他测试。

    此致、

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

    大家好、Jan 和 Clement、

    uint8_t status = GATT_WriteCharValue (connList[I].connHandle、&req、selfenty)

    当主机  在第7个从器件上打开"notify"时、它返回 "failure"。

    我已要求客户说明 "未能打开"通知"的意思、并会在客户回复时回复您。

    此致、

    Katherine

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

    您好、Katherine、

    uint8_t status = GATT_WriteCharValue (connList[I].connHandle、&req、selfenty)

    当主机  在第7个从器件上打开"notify"时、它返回 "failure"。

    [/报价]

    请指定函数返回的错误代码。 您可以参考函数文档(此处为: GATT_WriteCharValue)来解释错误代码。

    我希望这将有所帮助、

    此致、

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

    尊敬的 Clement:

    Unknown 说:
    uint8_t status = GATT_WriteCharValue (connList[i].connHandle、&req、selfenty)

    我实施了该代码片段、它返回0。

    是否编写了 CCCD,但堆栈没有将通知传递给应用程序?  [/报价]

    我如何确认这一点?

    使用蓝牙记录器收集低功耗蓝牙跟踪

    您能否指定它是什么器件?

    此致、

    Katherine

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

    您好!

    - GATT_WriteCharValue 返回0表示"成功"

    -请使用 https://www.ti.com/tool/PACKET-SNIFFER/ 检查外围设备是否向中央设备发送通知。 通过这种方法、您还可以验证 CCCD 是否被正确写入。

    此致。

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

    您好!

    客户回答说、他的问题仍有待解决 、怀疑问题 可能与 堆栈和内存有关。

    此致、

    Katherine

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

    您好、Katherine、  

    感谢您的讲解。  
    请打开一个新主题、以便我们可以讨论该问题。  

    此致、