CN / EN
CN / EN

提问

设计支持

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

关于GR5xxx 平台升级最新SDK,SDK生成BLE Static Address发生变化,导致之前设备交互异常的修复办法 其它

185***527

汇顶员工
2024-07-15 17:37

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);

}

1收藏

0赞成

185***527

汇顶员工
2024-07-15 17:40

如用任何使用问题,欢迎随时本帖反馈

0条评论

0赞成

0收藏

您的评论

Snail

2024-10-08 17:29

请问GR5405支持这种根据eFuse 中的UID生成静态BLE MAC的方法吗?我看在 app_periph_init函数中直接配置了固定的MAC

0条评论

0赞成

0收藏

您的评论

185***527

汇顶员工
2024-10-08 17:48

您好:

是的,同样的方式,app_periph_init中配置的是public地址,写入至了NVDS。

BLE地址使用策略是:

1. 首先读取NVDS是否有写入MAC地址,若有,会将其设置为Public使用

2. 若NVDS没有,则读取Efuse中是否有配置MAC地址,若有配置,会将其设置为Public使用

3. 若Efuse未写入MAC地址,会读取Efuse中CHIP UID,以其为输入生成唯一的Static地址使用

0条评论

0赞成

0收藏

您的评论

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

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

扫描关注公众号

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