4.11. BLE开发常见问题
概述
汇总用户在BLE的应用开发过程中遇到的常见问题
4.11.1. 问题汇总
1.手机连接带绑定配对功能的BLE从机设备时会弹两次配对框
可能是手机主动发起了加密配对后,设备端又发起安全加密请求命令,出现重复的行为
设备端有重复配置加密的行为,配置了请求安全加密命令,又在profile加密安全加密认证,详见问题2的说明
//方式1:配从机默认发请求加密命令
void sm_set_request_security(int enable);
//方式2:指定链接发加密请求命令
bool sm_api_request_pairing(hci_con_handle_t con_handle);
关于att操作读时att_read_callback回调会出现两次的解答
att_read_callback会出现两次回调,第一次buffer=0,第二次buffer为非0,这是一个正常的流程控制方式,支持read、read_blob等操作
两次回调都需要返回长度,第一次返回characteristic内容的总长度,第二次返回真正写入buffer数据的长度
第一次回调获取characteristic的内容长度,用来决定第二次回调的操作方式,例如申请buffer大小和offset的偏移等
BLE从机设备拒绝配对方法
不调用接口sm_just_works_confirm确认即可,然后发送断开命令
中途更改BLE广播数据的方法
ble_op_adv_enable(0);
ble_op_set_adv_data(offset, buf);
ble_op_adv_enable(1);
BLE接收数据被分包问题
首先默认传输时支持20byte的长度,按打印信息,确认对方是不是做了分包的行为
先确定有没有做MTU交换的行为
如果有交换还是20bytes payload长度,那就是对方不支持大于20byte的传输,需要对方修改支持
蓝牙通话时,数传BLE的传输速率下降
手机是会有带宽仲裁策略,通话是同步传输,固定要占用带宽,而手机是优先通话,剩下的带宽才给BLE通信,所以这时候建议不要做大数据量的传输操作,可以尝试调整一下BLE的发包的包长和interval,看看有没有提升
动态修改BLE的mac地址
ble_module_enable(0);
u8 addr[6];
le_controller_get_mac(addr); //获取当前的地址
put_buf(addr, 6);
addr[0]++; //例子:自增加1
//需要下次开机生效,需要新定义一个VM ID来记忆
//系统现有的CFG_BT_MAC_ADDR字段,不能用,只能写一次,无法修改,需要重新定义一个ID
/* int ret = syscfg_write(CFG_USER_DEFINE_MAC, addr, 6); */
/* printf("syscfg_write(CFG_USER_DEFINE_MAC):%d", ret); */
le_controller_set_mac((void *)addr); //重设给底层
ble_module_enable(1);