基于 NXP QN9080 的蓝牙设备地址讲解

  • 概述

最近有客户反馈到 NXP QN9080 在蓝牙模式下出现了部分 IC 连不上 MAC 电脑的问题,客户在将相同的 FW 烧录到其他样机上能够正常使用,发现是不同的芯片,它的蓝牙设备地址也不同,通过对比两个芯片的蓝牙设备地址发现设备地址的最后一个字节的高 4 位必须要小于 8,才能够连接上 MAC 电脑。以下将为大家讲解这部分的知识。

  • 蓝牙设备地址

在通信系统中,设备地址是用来唯一识别一个物理设备的,具有唯一性。这种地址分配方式在 BLE 中也保留了下来。由 24-bit 的 company_id 和 24-bit 的company_assigned 组成。高 24 位是公司标识,低 24 位公司内部自己赋值。


图一

蓝牙地址分为三部分:LAP(24 位地址低端部分)、UAP(8 位地址高端部分)、NAP(16 位无意义地址部分)。其中,NAP 和 UAP 是生产厂商的唯一标识码,必须由蓝牙权威部门分配给不同的厂商。而 LAP 是由厂商内部自由分配。对于某一种型号的手机或者设备,所有个体的 NAP、UAP 是固定的,可变的是 LAP。

LAP 共有 24 位,一般来说厂家在制造时会从  0 开始分配地址直到 2 的 24 次方,以保证个体之间地址的区别。但是当产品数量太多,导致 2 的 24 次方都用完之后,或者在写地址的时候出了问题,就会出现蓝牙地址重复使用的情况, 但是概率非常小。

蓝牙地址的类型可分为:


图二

通过苹果开发者网站查看相关文档可知,苹果的手册里面要求要用 Resolvable Private Address(可解析私密地址)。


图三

因此我们下面主要来讲解可解析私密地址的特征。

  • 原因分析

我们查看蓝牙核心规范 《Core_V5.2》的 Page 2861,可以了解到可解析私密地址的特征:

可解析私密地址通过一个随机数和一个称作 Identity Resolving Key(IRK)的密码生成,因此只能被拥有相同 IRK 的设备扫描到,可以防止被未知设备扫描和追踪。

其格式如下:


图四

特征说明:
高位 24 bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash值,运算公式为hash = ah(IRK, prand)。当主端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),如果不同则继续用下一个 IRK 做上面的过程,直到找到一个关联 IRK 或者一个也没找到。以 T_GAP(private_addr_int) 为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。



Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要同时具备 Public Device Address 或者 Static Device Address中的一种。目前我们手上的 NXP QN9080 开发板跟 SDK 蓝牙工程(MAC 地址未经过特殊处理)进行烧录测试,是能够正常连接 MAC 使用的。

可通过 ISP 方式查看 nvds 可以得到该芯片的蓝牙设备地址为:


图五

在通过代码中获取蓝牙设备地址的函数 BOARD_GetMCUUid 中,将该芯片蓝牙设备地址以顺序打印出来,打印结果为:


图六

可以发现 48-bit 的 MAC 地址数组,低字节在前,所以与我们实际看到的地址顺序是相反的。同样的,它的蓝牙设备地址最高位 MSB 为 “0”。符合可解析私密地址的特征。在客户工程中,不可能每次都把芯片的蓝牙地址都读取出来去判断是否符合可解析私密地址的特征,因此,我们在代码中对蓝牙设备地址进行统一的 MAC 地址处理。


图七

通过上图可知,我们对最后一个字节的地址进行处理,使用“与”操作将最高位 bit 设置成“0”,这样就可以排除不同芯片不同蓝牙设备地址的问题了。我们进行蓝牙多设备切换时,也只是修改蓝牙设备地址的某个可修改字节,因此不会去修改到这部分地址码的,通过上面我们可以知道这块开发板为什么不经过地址码处理也能工作的原因。

  • 总结

通过前面的讲解,大家对于 MAC 在蓝牙中的特殊机制也有了些理解,关于蓝牙设备地址的其他类型,可以通过查看《Core_V5.2》蓝牙核心规范文档DEVICE ADDRESS 相关章节的讲解。

  • 参考资料
  • 【1】Core_V5.2.pdf
  • 【2】Accessory-Design-Guidelines.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论