Слияние кода завершено, страница обновится автоматически
Программируется адрес EDR, а не адрес BLE.
Программатор 1 на 8
Программатор 1 на 2
Если программатор не программирует MAC-адрес, то при первом запуске устройства MAC-адрес не будет найден,
и будет сгенерирован случайный адрес, который будет сохранён в области VM внутренней флэшки.
При каждом последующем запуске устройство будет читать этот адрес.
Связанный код находится в user_cfg.c следующим образом:
u8 mac_buf_tmp[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
u8 mac_buf_tmp2[6] = {0, 0, 0, 0, 0, 0};
do {
ret = syscfg_read(CFG_BT_MAC_ADDR, mac_buf, 6);
if ((ret != 6) || !memcmp(mac_buf, mac_buf_tmp, 6) || !memcmp(mac_buf, mac_buf_tmp2, 6)) {
get_random_number(mac_buf, 6);
syscfg_write(CFG_BT_MAC_ADDR, mac_buf, 6);
}
} while (0);
```### Раздел 4. Способ генерации адреса BLE
По умолчанию адрес BLE отличается от адреса EDR.
Адрес BLE генерируется согласно алгоритму отображения Джили, как другой адрес.
**Адрес BLE отображается наоборот на мобильном устройстве**

Корреспондирующий код:
```c
lib_make_ble_address(tmp_ble_addr, (void *)bt_get_mac_addr()); //Используется метод отображения
#if 0 //Не использовать EDR, использовать EDR адрес как BLE адрес
memcpy(tmp_ble_addr, bt_get_mac_addr(), 6);
#endif
#if 0//Обратный BLE-MAC адрес
u8 ble_addr[6];
swapX(tmp_ble_addr, ble_addr, 6);
memcpy(tmp_ble_addr, ble_addr, 6);
#endif
le_controller_set_mac((void *)tmp_ble_addr);
```### Раздел 5. Динамическое изменение MAC-адреса через код
Определите новый ID в syscfg_id.h
`#define CFG_USER_DEFINE_MAC 2`
```c
ble_module_enable(0);
u8 addr[6];
le_controller_get_mac(addr); // Получаем текущий адрес
put_buf(addr, 6);
addr[0]++; // Пример: увеличиваем на 1
// Для применения изменений после перезапуска системы, требуется определить новый ID VM для запоминания
// Наличие существующего поля CFG_BT_MAC_ADDR недопустимо, так как его можно записывать только один раз, поэтому требуется определить новый ID
/* int ret = syscfg_write(CFG_USER_DEFINE_MAC, addr, bcmMacAddrLen); */
/* r_printf("syscfg_write(CFG_USER_DEFINE_MAC):%d", ret); */
le_controller_set_mac((void *)addr); // Перезапись для нижележащего уровня
ble_module_enable(1);
https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I52T43
Вход Перед тем как оставить комментарий