主题中讨论的其他器件: SysConfig、
工具/软件:
尊敬的团队
我使用的是使用 SDK 8.40和 IDE 12.8的 CC2340R5。
我正尝试在固件更新期间更改器件的 MAC 地址。
我尝试使用 SysConfig、将地址类型设置为"RPA with Public Identity"、但 MAC 地址会在每次下电上电时更改、这不是所需的行为。
我还尝试使用以下代码以编程方式更改 MAC 地址。 它仅在第一次运行—MAC 地址不会随后续固件更新而更新。
您能否提供建议、说明如何确保在每次固件更新期间可靠更新 MAC 地址?
谢谢你。
静态 uint32_t 苗木计数器= 0;
Uint8_t getFakeRandom()
{
couyCounter++;//每次调用函数时、此值都会递增
return (uint8_t)((Random_getNumber ()+ sedyCounter * 31)& 0xFF);// 31只是一个 salt 乘法器
}
void generateRandomMAC (uint8_t *macaddr)
{
macaddr[0]= getFakeRandom ()& 0x3F;//仅限低6位
macaddr[1]= getFakeRandom ();
macaddr[2]= getFakeRandom ();
}
//初始化或加载自定义 BD 地址
void setCustomBDAddr (void)
{
uint8_t customBDDr[6]={0x00、0x12、0x34、0x56、0x78、 0x9A };
//打开 NVS
NVS_Params nvsParams;
NVS_Params_init (&nvsParams);
nvsHandle = NVS_open (CONFIG_NVS_0、&nvsParams);
if (nvsHandle == NULL){
//处理错误
返回;
}
NVS_getAttrs (nvsHandle、®ionAttrs);
//从闪存读取现有 MAC
uint8_t readMac[MAC_ADDR_SIZE];
INT STATUS = NVS_READ (nvsHandle、0、readMac、MAC_ADDR_SIZE);
//如果没有 MAC 保存、则生成并写入它
if (status != NVS_STATUS_SUCCESS || readMac[0]== 0xFF){
generateRandomMAC (customBDAddr);
NVS_ERASE (nvsHandle、0、regionAttrs.sectorSize);//干净扇区
NVS_write (nvsHandle、0、customBDAddr、MAC_ADDR_SIZE、NVS_write_post_verify);
}
//使用 HCI 命令设置 BD_ADDR
HCI_EXT_SetBDADDRCmd (readMac);
//可选调试
NVS_Close (nvsHandle);
}