Nordic获取设备和修改设备MAC地址的办法
每一个支持蓝牙功能的设备都被分配有一个独一无二的蓝牙 MAC 地址,就如同设备的 “身份证号码”。比如,你有两部不同品牌和型号的手机,它们的蓝牙 MAC 地址是不同的。这使得在蓝牙网络里,每个设备都能被精准识别。
Nordic芯片在FICR寄存器里面有一个随机的MAC地址,如果默认不改动的话,蓝牙协议栈使用的就是出厂设置的MAC地址,下面我讲以下如何获取默认的MAC地址已经如何修改MAC地址
一、nRF52_SDK
1.1 获取MAC地址
```c
void get_ble_address(void)
{
ble_gap_addr_t addr;
uint32_t err_code = sd_ble_gap_addr_get(&addr);
if (err_code != NRF_SUCCESS)
{
NRF_LOG_ERROR("Failed to get BLE address, error code: %d", err_code);
return;
}
NRF_LOG_INFO("BLE Address: %02X:%02X:%02X:%02X:%02X:%02X",
addr.addr, addr.addr, addr.addr,
addr.addr, addr.addr, addr.addr);
}
```
1.2修改MAC地址
```
void set_ble_address(void)
{
ble_gap_addr_t new_addr;
new_addr.addr_type = BLE_GAP_ADDR_TYPE_PUBLIC;
new_addr.addr = 0x01;
new_addr.addr = 0x02;
new_addr.addr = 0x03;
new_addr.addr = 0x04;
new_addr.addr = 0x05;
new_addr.addr = 0x06;
uint32_t err_code = sd_ble_gap_addr_set(&new_addr);
if (err_code != NRF_SUCCESS)
{
NRF_LOG_ERROR("Failed to set BLE address, error code: %d", err_code);
}
else
{
NRF_LOG_INFO("BLE address set successfully");
}
}
```
二、NCS修改NCS地址
这里我是使用NCS2.9.0版本peripheral_uart例程,硬件使用nRF54L15的DK
2.1 获取MAC地址
```
static void get_mac(uint8_t mac_address)
{
unsigned int device_addr_0 = NRF_FICR->DEVICEADDR;
unsigned int device_addr_1 = NRF_FICR->DEVICEADDR;
const uint8_t* part_0 = (const uint8_t*)&device_addr_0;
const uint8_t* part_1 = (const uint8_t*)&device_addr_1;
mac_address = part_1;
mac_address = part_1;
mac_address = part_0;
mac_address = part_0;
mac_address = part_0;
mac_address = part_0;
}
//main bt_enable函数之后调用
uint8_t mac;
get_mac(mac);
LOG_INF("MAC Address: %02X:%02X:%02X:%02X:%02X:%02X\n", mac, mac, mac, mac, mac, mac);
```
2.2 修改MAC地址
```
static void set_mac()
{
int ret;
bt_addr_le_t addr;
ret = bt_addr_le_from_str("FF:EE:DD:CC:BB:AA", "random", &addr);
if (ret) {
printk("Invalid BT address (err %d)\n", ret);
}
ret = bt_id_create(&addr, NULL);
if (ret < 0) {
printk("Creating new ID failed (err %d)\n", ret);
}
}
//main bt_enable函数之后调用
```
页:
[1]