CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

GR551X 如何通过软件方式写入固定的Public MAC地址 GR551x

已解决

Ping

汇顶员工
2022-03-12 11:49

关于蓝牙MAC地址规则,可参考以下链接说明:

GR551X BLE 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地址读,可以参考晶振校准参数读取说明:

GR551X SDK开发中如何获取efuse校准值判断晶体是否校准

0收藏

0赞成

最佳答案

Ping

汇顶员工
2022-03-12 11:51

如果只是软件临时修改MAC地址,可调用ble_gap_addr_set()函数,重启后需要重新设置:


0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注