185***527

GR5xxx平台BLE Static Address是根据Efuse中Chip UUID及校验信息生成,但客户端反馈存在一定概率不同Chip生成BLE Static Address重复,因此优化了BLE Static Address生成算法
此优化也带来了一个客户端问题:
- SDK版本升级导致同一设备前后生成的BLE Static Address不一致,若是使用BLE Static Address,升级之前有进行配对绑定,升级后无法与已配对的设备正常交互。
Ø 变更版本细节:已开始应用优化算法版本:
- GR5525 SDK V1.0.2
- GR533x SDK V1.0.6
- GR5526 SDK V1.0.3
Ø 因此,若有客户使用
- GR551x SDK V2.0.0 and earlier versions,
- GR5525 SDK V1.0.1 and earlier versions,
- GR533x SDK V1.0.5 and earlier versions,
- GR5526 SDK V1.0.2 and earlier versions,
升级到最新SDK时,若要保持BLE Static Address一致,需使用以下patch。
Ø 新项目使用最新SDK版本,无需使用以下patch
修复办法可在升级新版SDK后,在ble stack初始化完成后应用以下patch,使用方法见下图

// In order to maintain consistency in the static addresses generated by
// - GR551x SDK V2.0.0 and earlier versions,
// - GR5525 SDK V1.0.1 and earlier versions,
// - GR533x SDK V1.0.5 and earlier versions,
// - GR5526 SDK V1.0.2 and earlier versions,
// this patch function needs be applied
static void ble_gap_static_addr_replace(void)
{
sdk_err_t error_code;
uint8_t chip_uuid[SYS_CHIP_UID_LEN];
uint16_t trim_sum = 0;
ble_gap_bdaddr_t ble_gap_addr;
if ((sys_device_uid_get(chip_uuid) == SDK_SUCCESS) && (sys_trim_sum_get(&trim_sum) == SDK_SUCCESS))
{
if (0x41 == chip_uuid[0])
{
ble_gap_addr.gap_addr.addr[2] = chip_uuid[8];
ble_gap_addr.gap_addr.addr[3] = chip_uuid[9];
ble_gap_addr.gap_addr.addr[4] = chip_uuid[10];
ble_gap_addr.gap_addr.addr[5] = chip_uuid[11] | 0xC0;
} else
{
ble_gap_addr.gap_addr.addr[2] = chip_uuid[10];
ble_gap_addr.gap_addr.addr[3] = chip_uuid[13];
ble_gap_addr.gap_addr.addr[4] = chip_uuid[14];
ble_gap_addr.gap_addr.addr[5] = chip_uuid[15] | 0xC0;
}
ble_gap_addr.gap_addr.addr[1] = (uint8_t)trim_sum;
ble_gap_addr.gap_addr.addr[0] = (uint8_t)(trim_sum >> 8);
ble_gap_addr.addr_type = 1;
}
error_code = ble_gap_addr_set(&ble_gap_addr);
APP_ERROR_CHECK(error_code);
}
185***527

您好:
是的,同样的方式,app_periph_init中配置的是public地址,写入至了NVDS。
BLE地址使用策略是:
1. 首先读取NVDS是否有写入MAC地址,若有,会将其设置为Public使用
2. 若NVDS没有,则读取Efuse中是否有配置MAC地址,若有配置,会将其设置为Public使用
3. 若Efuse未写入MAC地址,会读取Efuse中CHIP UID,以其为输入生成唯一的Static地址使用
Snail
请问GR5405支持这种根据eFuse 中的UID生成静态BLE MAC的方法吗?我看在 app_periph_init函数中直接配置了固定的MAC
185***527

如用任何使用问题,欢迎随时本帖反馈
打开微信,使用“扫一扫”即可关注