我要把579M芯片换成582M
手机连接579的时候如图,2次更新参数都成功,从连接到发现服务用了大概900ms
用手机连接582的时候,更新连接参数失败,且发现服务时间大概在2300ms左右
用的工程是peripheral,用默认的参数2次更新都失败,
不知是不是主设备发送参数更新失败导致发现服务时间比较长,如何更快的发现服务?
我要把579M芯片换成582M
手机连接579的时候如图,2次更新参数都成功,从连接到发现服务用了大概900ms
用手机连接582的时候,更新连接参数失败,且发现服务时间大概在2300ms左右
用的工程是peripheral,用默认的参数2次更新都失败,
不知是不是主设备发送参数更新失败导致发现服务时间比较长,如何更快的发现服务?
这个发现速度慢的根本原因,是整个发现过程中的连接间隔比较长,
上面的错误是连接间隔更改失败, 根本原因是 代码在初始化时候给连接间隔限制了一个较小的范围,,
实际上你可以修改为更大的范围,如(代码来自 CH583EVT_v1.1\EVT\EXAM\BLE\BLE_UART ):
void Peripheral_Init( ) { Peripheral_TaskID = TMOS_ProcessEventRegister( Peripheral_ProcessEvent ); // Setup the GAP Peripheral Role Profile { uint8 initial_advertising_enable = TRUE; uint16 desired_min_interval = 6; uint16 desired_max_interval = 1000; // Set the GAP Role Parameters GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable ); GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData ); GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData ); GAPRole_SetParameter( GAPROLE_MIN_CONN_INTERVAL, sizeof( uint16 ), &desired_min_interval ); GAPRole_SetParameter( GAPROLE_MAX_CONN_INTERVAL, sizeof( uint16 ), &desired_max_interval ); }
后面从机可以根据实际的应用需求,再去请求主机更新需要的连接参数
if ( events & SBP_PARAM_UPDATE_EVT ) { // Send connect param update request GAPRole_PeripheralConnParamUpdateReq( peripheralConnList.connHandle, DEFAULT_DESIRED_MIN_CONN_INTERVAL, DEFAULT_DESIRED_MAX_CONN_INTERVAL, DEFAULT_DESIRED_SLAVE_LATENCY, DEFAULT_DESIRED_CONN_TIMEOUT, Peripheral_TaskID); // GAPRole_PeripheralConnParamUpdateReq( peripheralConnList.connHandle, // 10, // 20, // 0, // 400, // Peripheral_TaskID);
我用的是CH582M官方开发板,用BLE_UART工程,依然会出现更新参数失败。我也尝试了更大范围,还是更新参数失败,难道是手机工具不对吗?
如果是安卓手机的话,可以到应用市场搜索 BLE调试助手,这个app是我们公司自己做的app。
BLE调试助手日志没有显示更新参数的情况,我用的是nRF Connect
https://github.com/NordicSemiconductor/Android-nRF-Connect
请确认一下CH582第一次手机发起更新参数失败的原因。