NRF52832在OTA升级时,修改了APP的蓝牙MAC会导致无法升级,原因是OTA程序的蓝牙MAC没有被修改所以手机扫描蓝牙时无法连接
解决办法
在bootloader的程序里面加入修改蓝牙mac地址的代码
实现原理:
在bootloader蓝牙广播开启之前修改蓝牙mac
通过让bootloader去加载app保存在flash中的mac地址信息
然后进行设置即可
1:添加fsd模块
在sdkconfig.h中加入fds的宏定义
根据编译报错添加所需要的文件及其路径
直到fds组件编译通过
注意:app中修改的mac地址也必须用fds写入flash,
不然bootloader找不到存mac的信息块,并且尽量让
两个fds的大小,page,等配置参数一样(直
接从app的sdkconfig复制过来用就一样了)
2:添加代码
初始化fds
读出mac信息
修改蓝牙
1:打开文件:nrf_dfu_ble.c 找到函数 ble_dfu_transport_init()
2:在advertising_start(); 调用前修改mac
/**User app code**/
/****/
flash_app_init(); //初始化fds
s_dvc_ble_info_t dvc_ble_info = {0}; //这个是自定义变量用来存mac的
if (dvc_ble_info_load(&dvc_ble_info) == 0) //读出mac信息
{
ble_gap_addr_t bleAddr;
sd_ble_gap_addr_get(&bleAddr);
bleAddr.addr[0] = dvc_ble_info.ble_mac[5];
bleAddr.addr[1] = dvc_ble_info.ble_mac[4];
bleAddr.addr[2] = dvc_ble_info.ble_mac[3];
bleAddr.addr[3] = dvc_ble_info.ble_mac[2];
bleAddr.addr[4] = dvc_ble_info.ble_mac[1];
bleAddr.addr[5] = dvc_ble_info.ble_mac[0];
bleAddr.addr_type = BLE_GAP_ADDR_TYPE_PUBLIC; // 公共类型的广播地址; 如果是静态随机,最高2位需要为11: addr[5]|0xC0
if (bleAddr.addr_type == BLE_GAP_ADDR_TYPE_RANDOM_STATIC)
{
bleAddr.addr[5] = (dvc_ble_info.ble_mac[0] | 0xC0);
}
err_code = sd_ble_gap_addr_set(&bleAddr); //设置mac
APP_ERROR_CHECK(err_code);
}
/****/
/**User app code**/
err_code = advertising_start();
VERIFY_SUCCESS(err_code);
3:注意增加代码之后的bootloader的ROM大小不要和其他文件地址冲突了