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_read_callback会出现两次回调,第一次buffer=0,第二次buffer为非0,这是一个正常的流程控制方式,支持read、read_blob等操作

  • 两次回调都需要返回长度,第一次返回characteristic内容的总长度,第二次返回真正写入buffer数据的长度

  • 第一次回调获取characteristic的内容长度,用来决定第二次回调的操作方式,例如申请buffer大小和offset的偏移等

  • 不调用接口sm_just_works_confirm确认即可,然后发送断开命令

    1. 中途更改BLE广播数据的方法

ble_op_adv_enable(0);
ble_op_set_adv_data(offset, buf);
ble_op_adv_enable(1);
    1. BLE接收数据被分包问题

  • 首先默认传输时支持20byte的长度,按打印信息,确认对方是不是做了分包的行为

  • 先确定有没有做MTU交换的行为

  • 如果有交换还是20bytes payload长度,那就是对方不支持大于20byte的传输,需要对方修改支持

    1. 蓝牙通话时,数传BLE的传输速率下降

  • 手机是会有带宽仲裁策略,通话是同步传输,固定要占用带宽,而手机是优先通话,剩下的带宽才给BLE通信,所以这时候建议不要做大数据量的传输操作,可以尝试调整一下BLE的发包的包长和interval,看看有没有提升

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);