BLE多连接

1. GR5xx BLE多连接基本功能介绍

  • 多连接可以是 “一主多从” 或 “一从多主”,也可以是 “多主多从”。GR5xx系列芯片可支持这三种类型。

  • GR5xx系列芯片总共可以同时支持12个业务,包括1个扫描1个广播,最大连接个数为10。可通过宏CFG_MAX_CONNECTIONS配置最大连接数。

  • GR5xx系列芯片支持同时开启广播和扫描,两业务时序冲突后底层动态调整优先级。

2. GR5xx多连接应用笔记

  • 一旦设备连接上或者被连接上,将进入BLE_GAPC_EVT_CONNECTE事件。在该事件中可获取当前的conn_idx和对端设备的MAC地址。通过MAC地址和conn_idx可区分不同的设备。发送数据、接收数据、发现服务、配对加密均可使用conn_idx区分。

  • “多主多从” 的通信模型可以实现简单的组网需求。可参照SDK_Folder\projects\ble\ble_multi_role\ble_app_hrs_rscs_relay工程。

  • 在 “多主多从” 场景下,可通过ble_gap_evt_connected_t中的ll_role区分当前连接创建后本端角色是Master还是Slave,后续发送数据通过角色判断是使用ble_gatts_noti_ind或是ble_gattc_write/ble_gattc_write_no_resp。

  • 在多连接场景下,支持不同的连接使用不同的PHY,可通过ble_gap_phy_update设置;同理,支持不同的链接和不同的发射功率,可通过ble_gap_tx_power_set设置。

  • 在 “一从多主” 场景下,从机只需要初始化一次服务即可。后续任何主机连接上后,服务均相同。如果需要服务不同,请参考多从机SDK_Folder\projects\ble\ble_peripheral\ble_app_multi_slave工程。

  • 在 “一从多主” 场景下,每条链接的每个服务下的CCCD都是独立的,必须单独使能才可以执行发送ble_gatts_noti_ind。协议栈内部并没有对CCCD通知使能与否做判断。

3. FAQ

  • Q:GR5xx芯片在多少个连接下可以稳定通信?

    A:实测在4~5个连接时,可以做到稳定通信。超过5个连接后可能存在断连现象,但是断连后可以立刻回连上。

  • Q:如何优化多连接的稳定性?

    A:“一主多从” 场景下,一旦连接上从设备,每条连接执行一次连接参数更新,并重新排布时间划分,避免冲突,从而保证每条连接均稳定。详见https://developers.goodix.com/zh/bbs/detail/87e8f3be6c9b464496381ac8f8ff4893。

    “一从多主”场景下,可以修改连接参数,确保各个链路CI成倍数关系。但由于主机是多台无关联设备,依旧可能出现冲突。

  • Q:“一从多主” 场景下广播在连接建立之后是否需要重新开启?

    A:需要重新开启广播。因为连接建立后,当前的广播会自动停止,可以在BLE_GAPM_EVT_ADV_STOBLE_GAPC_EVT_CONNECTED中再次开启广播。若同时开启两个相同的广播,则其中一个广播被停止,另一个广播继续工作。