This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2340R5:随机 Mac 地址需要在 advt 报告中添加

Guru**** 2322270 points
Other Parts Discussed in Thread: CC2340R5, SYSCONFIG, CC2340R5-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1500992/cc2340r5-random-mac-address-need-add-in-advt-report

器件型号:CC2340R5
主题中讨论的其他器件: 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、&regionAttrs);

//从闪存读取现有 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);
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    感谢您联系我们! 您是否在使用 CC2350R5或 CC2340R5-Q1?

    此致、

    Tarek

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tarek:

    我使用的是 CC2340R5  

    谢谢。此致

    Abinesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Abinesh、

    您是否尝试更改设备的 BLE 地址或随机地址?

    要更改随机地址、我建议使用 HCI_EXT_SetAdvSetRandAddrCmd () 函数。 至于更改 BLE 地址、仅在器件处于待机状态时使用、并且在器件复位(硬件复位、而不是 HCI 复位)时产生影响。  以下是有关使用 HCI_EXT_SetBADDRCmd ()函数的文档:  https://dev.ti.com/tirex/content/simplelink_lowpower_f3_sdk_8_40_02_01/docs/ble5stack/ble_user_guide/doxygen/ble/html/group___h_c_i.html#gaea8af8b8d0099e813cde1e30b864a0a7


    我建议在您希望更改地址的情况下使用随机地址、因为更改 BLE 地址(也称为 MAC 地址)可能会导致违反 IEEE 标准和 BLE 规范:"每个蓝牙设备都应分配一个唯一的48位蓝牙设备地址(BD_ADDR)。 地址应为根据 IEEE 802-2014标准(蓝牙核心规范版本5.4 | Vol 2、Part B)第8.2节("通用地址")创建的48位扩展唯一标识符(EUI-48)


    我希望这对您有所帮助!

    此致、

    Tarek

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tarek:

    您是否尝试更改设备的 BLE 地址或随机地址?

    是、我要更改 BLE MAC 地址

    我的要求是、每次将固件刷写到新电路板时、应会生成唯一的 MAC 地址。

    刷写后、MAC 地址应在器件的整个生命周期内保持不变、除非再次更新固件。

    谢谢。此致

    Abinesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HELO Abines、

    感谢您的澄清! 我想您应该继续使用相同的函数 HCI_EXT_SetAdvRandAddrCmd ()来更改 MAC 地址。 我建议在 APP_StackInitDoneHandler 内的 app_main.c 文件中调用它、因为应该尽快运行此函数。 另请记住、您要更改的地址需要是  有效 BLE 地址  BLE 规范的 BLE 器件。 我希望这能回答您的问题!

    此致、

    Tarek

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tarek:

    我尝试添加 HCI_EXT_SetAdvRandAddrCmd  ()函数、但显示为匿名、不带 Mac 地址、但添加 HCI_EXT_SetBDADDRCmd (customBDAddr)函数后、每个构建的地址都相同。

    在 SYS-CONFIG 地址模式下为公共地址。

    谢谢。此致

    Abinesh。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Abinesh、

    感谢您提供此信息! 这实际上是预期行为。

    HCI_EXT_SetAdvRandAddrCmd (uint8_t advHandle、uint8_t *randaddr)函数用于更改  RPA 地址  对于特定值 、应使用 HCI_EXT_SetBDADDRCmd (uint8_t *bdaddr)来更改 BLE 地址 (也称为 MAC 地址)也被指定为特定值。 这些函数将其各自的地址设置为用户在函数参数中设置的特定值、并且它们不会随机化地址。

    当我提到我建议使用 HCI_EXT_SetAdvRandAddrCmd 时、我也建议使用 RPA 地址并更改该地址、而不是更改 BLE 地址。

    我希望这对您有所帮助!

    此致、

    Tarek