3. UWB协议适配的硬件平台与开发环境

聊UWB,绕不开FiRa联盟。很多人以为UWB就是测距,其实真正让UWB走进消费电子、走向标准化的,是FiRa这帮人。我2019年第一次接触FiRa规范时,第一反应是——终于有人把UWB的“玩法”定清楚了。

FiRa全称是Fine Ranging,它定义了UWB设备怎么发现对方、怎么建立连接、怎么交换数据。说白了,它让不同厂家的UWB芯片能互相“听懂”。

3.1 FiRa架构:三层模型

FiRa把UWB系统分成三层,我习惯叫它“三层蛋糕”:

  • 应用层:跑在手机或设备上的APP,比如“数字车钥匙”、“室内导航”。它不关心底层UWB怎么收发信号,只关心“距离是多少”、“方位在哪”。
  • FiRa协议层:这是核心。它负责设备发现、会话管理、安全配对。我遇到过不少团队,自己写UWB驱动时忽略了这层,结果设备之间连不上——其实就是FiRa的握手没做好。
  • UWB物理层:IEEE 802.15.4z定义的底层,负责发脉冲、测距、算角度。FiRa不重新发明轮子,它直接复用物理层的能力。

关键点:FiRa不是替代IEEE 802.15.4z,而是在它上面搭了一层“应用框架”。你想想看,没有FiRa,每个厂家都得自己定义设备发现和会话管理,那生态就碎了。

下面这张图是我自己画的FiRa三层架构,方便你理解数据怎么流动:

FiRa 三层架构 应用层 数字车钥匙 · 室内导航 · 无感支付 FiRa 协议层 设备发现 · 会话管理 · 安全配对 UWB 物理层 (IEEE 802.15.4z) 脉冲收发 · 测距 · AoA 计算 FiRa 不重新定义物理层,只定义上层交互规范

3.2 UWB设备角色:谁说了算?

FiRa定义了四种角色。嗯,这里要注意,角色不是固定的,同一个设备在不同场景下可以切换身份。

角色 英文 职责 典型设备
控制器 Controller 发起并管理整个UWB会话,决定测距参数 手机、车机
受控端 Controlee 响应控制器的指令,执行测距或数据传输 智能门锁、标签
发起者 Initiator 主动发出测距请求,启动一次测距交换 手机(测距时)
响应者 Respondent 被动响应测距请求,返回测距帧 锚点、基站

我的经验:Controller和Initiator容易搞混。简单记——Controller管“会话”,Initiator管“测距”。一个会话里可以有很多次测距,每次测距都有一个Initiator和一个Respondent。

举个例子。你的手机是Controller,它跟车上的UWB模块(Controlee)建立会话。当你要开门时,手机变成Initiator,发一个测距请求;车上的模块作为Respondent,返回响应。手机算出距离,发现小于1米,自动解锁。

我曾经在一个项目中踩过坑:把Controller和Initiator写死在同一个设备上,结果换了个场景(比如车机主动测距找手机),角色切换逻辑就乱了。后来我改成动态角色分配,代码反而更简洁。

3.3 UWB与蓝牙协同:为什么非要蓝牙?

很多人问:UWB精度这么高,为什么还要蓝牙?

答案很简单——UWB功耗高、建立连接慢。你想想看,如果手机一直开着UWB接收机,电池半天就没了。蓝牙低功耗(BLE)正好补这个短板。

FiRa规范里,蓝牙负责两件事:

  1. 设备发现:BLE广播告诉周围设备“我支持UWB,来连我”。UWB本身没有广播机制,全靠蓝牙牵线。
  2. 参数协商:通过BLE交换UWB的配置参数,比如信道、数据速率、PRF(脉冲重复频率)。

我习惯把蓝牙比作“红娘”,UWB是“正主”。红娘先介绍双方认识,交换(参数),然后正主开始干正事(测距)。

实际流程:BLE发现 → BLE交换UWB参数 → 建立UWB会话 → UWB测距 → 测距完成,UWB休眠 → BLE保持低功耗监听

下面这张图展示了蓝牙和UWB的协同流程:

UWB + BLE 协同流程 BLE 广播 设备发现 BLE 参数交换 信道 · 速率 · PRF UWB 会话建立 Controller 发起 测距 循环 测距完成后 UWB 休眠,BLE 保持低功耗监听 为什么需要 BLE? 1. UWB 建立连接慢(~100ms),BLE 只需 ~3ms 2. BLE 功耗低,适合常开监听;UWB 只在需要测距时唤醒 3. BLE 可以同时管理多个 UWB 设备,扩展性好

3.4 避坑指南:蓝牙与UWB的时序配合

我曾经在一个智能门锁项目里,遇到一个诡异的问题:手机靠近门锁,UWB测距结果有时准有时不准。排查了两天,最后发现是蓝牙和UWB的时序没对齐。

具体来说,BLE交换完参数后,UWB会话建立需要几十毫秒。如果手机在这期间移动了,测距结果就偏了。解决方案是:在BLE参数交换完成后,加一个“准备就绪”的确认帧,双方确认后再启动UWB测距。

注意:BLE和UWB共用天线时,一定要做好时分切换。我见过一个方案,BLE和UWB同时发数据,结果天线打架,测距帧全丢了。解决办法是加一个天线开关,或者用软件调度,保证同一时刻只有一个射频在工作。

另外,FiRa规范里建议BLE的MTU(最大传输单元)至少设到512字节,因为UWB参数配置包比较大。我习惯把MTU设到1024,留点余量。

3.5 小结

FiRa联盟把UWB从“能测距”变成了“好用”。它定义了清晰的角色分工——Controller管会话,Initiator管测距,BLE负责发现和协商。这三者配合好了,UWB才能真正落地。

嗯,这一章的内容就到这里。记住一句话:没有FiRa,UWB只是实验室里的玩具;有了FiRa,UWB才是能进千家万户的产品。