Ping
关于蓝牙MAC地址规则,可参考以下链接说明:
如果需要在应用软件中存储Public MAC地址,参考如下两种方法:
1. 调用SYS_SET_BD_ADDR()函数接口写入Flash NVDS存储区域,详情参考gr55xx_sys.h文件定义
#define SYS_SET_BD_ADDR(BD_ADDR_ARRAY) nvds_put(0xC001, SYS_BD_ADDR_LEN, BD_ADDR_ARRAY) /**< NVDS put BD address. */
关于NVDS操作接口,参考《开发者指南》2.4.2章节说明
2. 调用Efuse读写接口,写入IC的efuse存储区域,示例方法如下:
A:实现efuse写函数dfu_efuse_write,写入数据要求Word对齐
bool dfu_efuse_write(uint8_t word_offset, uint32_t * efuse_value, uint8_t size_word)
{
efuse_handle_t EFUSEHandle ={0};
hal_status_t status = HAL_OK;
memset(&EFUSEHandle, 0, sizeof(efuse_handle_t));
EFUSEHandle.p_instance = EFUSE;
EFUSEHandle.init.info_mode = ENABLE;
hal_efuse_deinit(&EFUSEHandle);
hal_efuse_init(&EFUSEHandle);
status = hal_efuse_write(&EFUSEHandle, word_offset, efuse_value, size_word);
if(HAL_OK ==status)
return true;
else
return false;
}
B:写入示例,
MAC地址主分区 址:0x0124
备份分区地址:0x0034,
MAC地址存储在efuse中只能写一次,并且每次写需要4字节对齐。因此需要将MAC地址构造成8字节,例如待写入的MAC地址为:11:22:33:44:55:66,构造为11:22:33:44:55:66:00:00再写入efuse;
state = dfu_efuse_write(offset/4, (uint32_t *)&p_frame->data[5], len/4);
关于efuse中Public MAC地址读,可以参考晶振校准参数读取说明:
Ping
如果只是软件临时修改MAC地址,可调用ble_gap_addr_set()函数,重启后需要重新设置:
打开微信,使用“扫一扫”即可关注