一、 蓝牙的MAC地址可以分为Public device address(公共设备地址)和Random device address(随机设备地址)。
在蓝牙发展到BLE后,由于公共设备地址不够用,加上申请地址需要费用等原因,BLE协议增加了随机设备地址的方式。随机设备地址又可以分为静态地址和私有地址。
1、静态地址:是指在设备上电的时候随机生成的地址,如下图是格式 ①最高两位是11; ②剩下的46位是随机数生成,在一个上电周期不变; ③重新上电后这个地址也可以保持不变,如果改变,上次保持的连接信息会变为无效;
2、私有地址:私有地址通过定时更新和地址加密方式来提高数据的可靠性和安全性。其中私有地址又可以分为不可解析地址和可解析地址。
①不可解析私密地址:如下图是不可解析地址格式,其中最高两位是00; ②可解析私密地址:为了生成地址,需要通过一个随机数和Local Identity Resolving Key (IRK)生成,同样的要解析这个地址也需要相同的IRK。如下图是可解析地址格式; 二、Nordic的MAC地址采用的是静态随机地址
其中获取nordic地址的方式有两种,一种是直接通过协议栈的API函数来获取,另外一种是通过去读设备的ID号,再通过转换的方式来获取
1、通过调用协议栈的API函数sd_ble_gap_addr_get(...)来获取,这种方式比较简单直接,获取的MAC地址可以直接用。这种方式前提要先使能协议栈。
2、另外可以通过读取device address,Nordic芯片通过获取的设备ID号拼接在一起生成MAC地址。
芯片内部的寄存器DEVICEADDR[0]定义了MAC地址中低32位的地址,DEVICEADDR[1]定义了MAC地址中高16位的地址,其中DEVICEADDR[1]仅第0到15位有效。然后把这48位数拼接在一起,把最高的两位数置1就是最终的MAC。 DEVICEADDR[0]= 0xD2ED72CB DEVICEADDR[1]= 0xCB0B3207
然后对寄存器DEVICEADDR[1]的第14和15位的00的置为1,换算方式就是把0x32|0xC0=0xF2,最后把其余的数拼接在一起。所以得到的MAC地址就是F2 07 D2 ED 72 CB,这个和第一种方式直接通过协议栈的API函数获取是一样的。 |