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:BLE 不再是 TX 和放大器;与 iPhone 连接一段时间后、RX 数据不再与 Android 手机连接

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1433692/cc2640r2f-ble-no-longer-tx-rx-data-after-some-time-connecting-with-iphone-but-not-with-android-phone

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

工具与软件:

我的 BLE 配置文件配置如下:

#define SBP_PERIODIC_EVT_PERIOD         20.

//////////////////////////////////////////////////////////////////////////////////////////////

#define SIMPLEPROFILE_CHAR1_LEN 4.
#define SIMPLEPROFILE_CHAR4_LEN 20.

//////////////////////////////////////////////////////////////////////////////////////////////

当 cc2640与 iPhone 或 Android 手机连接时、cc2640会将 TX char4数据保留到  iPhone 或 Android 手机。  同时,不同步 char4数据事件,iPhone 或 Android 手机将保留 TX 1 char1数据到 cc2640每5秒。

在与 iPhone 连接的情况下、cc2640在随机时间(几秒到几分钟)后不会再从 iPhone 发送/接收任何数据。 cc2640和 iPhone 断开连接后、cc2640会再次进行广播并能够再次连接、但数据 TX/TX Rx 仍无法正常工作。  

连接 Android 手机时不会出现此问题。

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

    Jeff、您好!

    感谢您的咨询。 我想问您使用的是哪个 SDK 版本、以及您要使用的开箱即用的 SDK 是什么示例? 此外、您是使用 blestack (4.2 BLE 规范)还是 ble5stack (5 BLE 规范)? 我想问一下、TX/RX 不起作用是什么意思、您是说写入/读取/通知不起作用吗?

    BR、

    David。

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

    David、您好!

    感谢您的及时回复和提问。  

    我使用的是 SDK "simplelink_cc2640r2_sdk_2_20_00_49"和示例"\rtos\CC2640R2_LAUNCHXL\blestack\tida_01624 "。 它属于4.2 BLE 堆栈。

    是、 写入/读取/通知无效。 我还发现、一旦问题发生、程序就无法正常在主循环中运行。

    以下是参考代码:

    >>>>>

    静态空 SimplePeripheral_taskFxn (UArg a0、UArg A1)

    //初始化应用程序
    SimplePeripheral_init ();

    //应用程序主循环
    (;;)

    uint32_t 事件;

    >>>>> 我在这里添加了一个测试切换引脚>>>至>>>至>>>>>至>>>>>

    //等待与调用线程关联的事件发布。
    ///请注意,与线程关联的事件是在一个时发布的
    //消息将进入线程的消息接收队列
    Events_pend (syncEvent、Event_Id_、SBP_ALL_EVENTS、
    iCall_timeout_forever);

    if (事件)
    {  

    ..........

    }

    }

    }

    >>>>>

    再次感谢您的帮助。

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

    Jeff、您好!

    我想问一下您是如何将信息从外设发送到手机的吗? 我会假设有通知? 我希望函数看起来是这样的。 您是否具有蓝牙监听器、以便了解无线网络中发生的情况。 这对于比较 Android 和 iPhone 的行为非常有用。

    tatic bStatus_t gattServApp_SendNotiInd( uint16 connHandle, uint8 cccValue,
                                              uint8 authenticated, gattAttribute_t *pAttr,
                                              uint8 taskId, pfnGATTReadAttrCB_t pfnReadAttrCB )
    {
      attHandleValueNoti_t noti;
      uint16 len;
      bStatus_t status;
    
      // If the attribute value is longer than (ATT_MTU - 3) octets, then
      // only the first (ATT_MTU - 3) octets of this attributes value can
      // be sent in a notification.
      noti.pValue = (uint8 *)GATT_bm_alloc( connHandle, ATT_HANDLE_VALUE_NOTI,
                                            GATT_MAX_MTU, &len );
      if ( noti.pValue != NULL )
      {
        status = (*pfnReadAttrCB)( connHandle, pAttr, noti.pValue, &noti.len,
                                   0, len, GATT_LOCAL_READ );
        if ( status == SUCCESS )
        {
          noti.handle = pAttr->handle;
    
          if ( cccValue & GATT_CLIENT_CFG_NOTIFY )
          {
            status = GATT_Notification( connHandle, &noti, authenticated );
          }
          else // GATT_CLIENT_CFG_INDICATE
          {
            status = GATT_Indication( connHandle, (attHandleValueInd_t *)&noti,
                                      authenticated, taskId );
          }
        }
    
        if ( status != SUCCESS )
        {
          GATT_bm_free( (gattMsg_t *)&noti, ATT_HANDLE_VALUE_NOTI );
        }
      }
      else
      {
        status = bleNoResources;
      }
    
      return ( status );
    }

    BR、

    David。

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

    David、您好!

    再次感谢您对我的案例的答复和评论。

    对于您的问题、是的、我以上面提到的方式从外围设备向电话发送信息。 上面引用的代码也与我的 SDK 示例工程中包含的代码相同、在该示例中、调用该代码是为了使用建议的方式。

    是的、我使用了 BT 监听器、对我来说在空中检查数据是一个好主意。 谢谢你。 让我这样做、然后我会在回来时分享更多相关的详细信息。 再次感谢!

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

    已使用 BLE 嗅探器工具来比较在 Android 和 iPhone 充电盒上捕获的数据。 似乎我看不到它们之间的差异。

    从器件连续发送20+7个字节、从主器件周期性地发送4+7个字节、每5秒。

    图1。 Android 案例

    图2。 iPhone 外壳、每5秒写入4+7个字节、而不从 Slave 读取。

    图片3. iPhone 外壳、从 Slave 读取时、每5秒写入4+7个字节。

    如果有任何线索、请告知我进一步检查。 谢谢。

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

    Jeff、您好!

    感谢您的宝贵意见。 我可以让您共享完整的监听器日志供我查看整个事件序列吗? 这包括建立连接时发生的事件(例如、查看 MTU 交换、更新参数-连接间隔值)。

    BR、

    David。

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

    尊敬的 David:

    再次感谢您的观看。

    这是我将这些日志文件共享到的链接。  

    https://drive.google.com/drive/folders/1AVZzWefy-EI_o6aS8AhkXnTbFgI-SaIR

    期待 ro 收到您的回复。

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

    Jeff、您好!

    道歉延迟。 我无法访问驱动器文件(公用或专用)。 我是否可以让您在此处共享日志(当然、如果它们不包含任何机密/私人信息)? 此外、能否确认您是否无法将通知从外设传输到中央设备以及执行写入操作(从中央设备传输到外设)?

    BR、

    David。

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

    尊敬的 David:

    这是可以的、再次感谢。 我这次通过两个链接共享了日志文件。 请再次下载、希望它能为您效劳。

    https://www.dropbox.com/scl/fi/frxgv8qrz2fu26gntn3h5/sniffer_test_logfiles.zip?rlkey=bdxe2anb0f3ax9ush6n9axku5&st=jgiu4v5s&dl=0
    https://namiorghk-my.sharepoint.com/:u:/g/personal/jeffchu_nami_org_hk/EV7R5k5i661Dv51cWNbutysBcY-d3O2NbVrmXyeJvUO-FQ?e=8FY1x6

    要回答您的问题、是。当问题发生(正在连接和沟通几分钟)时、我无法从外设发送通知以及读取/写入。

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

    Jeff、您好!

    再次感谢您提供这些链接。 我可以下载日志。 您能帮助我理解问题所在吗? 根据我们讨论的内容、当器件重新连接时、将无法发送/接收数据。 但是我无法看到发生的情况、您能否在日志中指出这一点? 例如、我看到外设在某一点发送一些通知、然后仅发送空数据包、这是您提到的情况吗?

    BR、

    David。

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

    尊敬的 David:

    很好,感谢您再次光临。

    该设备连接一次开始时间0.000,然后它继续发送20字节到主(应用)连续. 在主器件(APP)端、它每5秒一直向器件发回4字节数据包。 这种连接和数据通信操作应该保持不间断运行 但在 IO 情况下、在326.295秒时间后、器件停止向主器件发送20个不符合预期的字节。 在我的器件程序中、我设置了一个测试切换引脚、使其在主循环内部继续运行、从而告诉我主程序运行正常。  发生未知问题后、TEST 引脚不再切换、因此我认为器件程序在326.295时间后失控。  

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

    Jeff、您好!

    感谢您提供额外的信息。 我看到设备没有崩溃、基本上只是开始发送空数据包来保持通信活动。 触发数据传输(通知)的因素是什么-例如、数据是否来自传感器?

    我还想问一下、您是否可以考虑迁移到更新更高的 SDK 版本? 在过去5年中实施了几项改进和修复措施。

    BR、

    David。

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

    尊敬的 David:

    感谢您的建议。 我花了几天时间将代码迁移到更新的 SDK 版本、即 SDK 5.30.01.11。 现在旧问题没有再次发生。 设备在连接到 Android 或 iPhone 应用时工作正常。 此问题已在新 SDK 中得到修复。 再次感谢您的帮助。