3、UWB帧结构解析:前导码、同步头、物理层头、数据负载
UWB的帧结构,说白了就是数据在空中飞行的“包装盒”。我刚开始接触UWB时,总觉得帧结构就是一堆寄存器的配置项,直到有一次在产线上抓包,发现设备之间死活对不上时序……后来才明白,帧结构里的每一个字段,都藏着物理层的秘密。
今天咱们就把这个包装盒拆开,看看里面到底装了啥。
3.1 整体帧结构概览
UWB的物理层帧(PPDU)由四个部分组成:
- 前导码(Preamble) —— 用于信号检测和粗同步
- 同步头(SHR) —— 包含前导码和起始帧定界符(SFD)
- 物理层头(PHR) —— 携带帧长度、数据速率等控制信息
- 数据负载(PSDU) —— 真正要传的数据
你想想看,这就像快递包裹:前导码是快递员喊“有包裹来了”,同步头是确认收件人身份,物理层头是面单上的地址和重量,数据负载才是包裹里的东西。
关键认知: 抓包时,前导码和SHR决定了你能不能“听到”信号,PHR决定了你能不能“读懂”信号,PSDU才是你真正关心的数据。
3.2 前导码(Preamble)—— 信号的“敲门砖”
前导码是UWB帧的第一个部分。它的作用很简单:让接收方知道“有信号来了”。
我个人习惯把前导码理解成“敲门砖”。接收机在空闲时一直在监听信道,前导码的重复脉冲序列能让接收机快速锁定信号到达的时间。
3.2.1 前导码的构成
前导码由一系列已知的脉冲组成。IEEE 802.15.4a/z标准定义了多种前导码长度:
| 前导码长度(符号数) | 典型应用场景 | 抓包难度 |
|---|---|---|
| 64 | 高数据速率、短距离 | 较难(信号短) |
| 128 | 通用场景 | 中等 |
| 256 | 长距离、低速率 | 较易(信号长) |
| 1024 | 超长距离、抗干扰 | 最容易 |
抓包技巧: 如果你不确定目标设备的前导码长度,可以从256开始尝试。我在项目中遇到过,有些设备默认用128,但实际抓包时用256更容易锁定信号。
3.2.2 前导码的生成方式
前导码不是随便发的脉冲。它基于一个特定的三元序列(-1, 0, +1),通过I/Q调制生成。标准里定义了多种前导码序列,不同信道使用不同的序列,目的是减少多设备之间的干扰。
嗯,这里要注意:前导码序列是公开的,但不同厂商可能会在序列上做微调。我曾经在抓一款国产UWB模块时,发现它的前导码序列和标准不完全一致,折腾了两天才找到原因。
3.3 同步头(SHR)—— 找到帧的“起点”
SHR = 前导码 + SFD(起始帧定界符)。
前导码告诉接收机“有信号”,SFD告诉接收机“数据要开始了”。SFD是一个特殊的序列,接收机检测到SFD后,就知道接下来是PHR了。
3.3.1 SFD的作用
SFD本质上是一个“标记”。它和前导码的序列不同,接收机通过匹配滤波器来识别SFD。一旦匹配成功,接收机就进入PHR解析阶段。
你想想看,如果没有SFD,接收机怎么知道前导码什么时候结束?数据什么时候开始?SFD就是那个“分界线”。
避坑指南: 我曾经在抓包时发现,有些设备在发送SFD时会出现时序偏移。如果你发现抓到的PHR总是CRC错误,先检查SFD的检测是否稳定。有时候换个前导码长度就能解决问题。
3.4 物理层头(PHR)—— 帧的“身份证”
PHR只有19个比特(标准模式下),但它包含了接收机解码PSDU所需的全部信息。
3.4.1 PHR的字段结构
| 字段 | 比特数 | 说明 |
|---|---|---|
| 数据速率 | 3 | 110 kbps / 850 kbps / 6.8 Mbps 等 |
| 帧长度 | 9 | PSDU的字节数(0~255) |
| Ranging位 | 1 | 是否为测距帧 |
| 预留/扩展 | 2 | 标准保留位 |
| HCS | 4 | PHR的校验和 |
我个人觉得,PHR里最重要的就是帧长度和数据速率。这两个字段错了,后面的PSDU根本解不出来。
3.4.2 PHR的编码方式
PHR使用卷积码进行编码,速率固定。这意味着即使信道条件不好,PHR也有较高的概率被正确解码。标准里PHR的编码是独立的,不依赖前导码的配置。
抓包要点: 如果你能正确解析PHR,恭喜你,你已经成功了一大半。PHR里的帧长度字段直接告诉你需要抓多少字节。我曾经在调试时,就是靠PHR里的长度字段来确认抓包缓冲区是否够用。
3.5 数据负载(PSDU)—— 真正的内容
PSDU就是MAC层交给物理层的数据。它包含MAC帧头、MAC负载和FCS(帧校验序列)。
说白了,前导码、SHR、PHR都是“包装”,PSDU才是“礼物”。
3.5.1 PSDU的编码
PSDU的编码方式取决于PHR里指定的数据速率:
- 低速率(110 kbps):使用BPM-BPSK调制,抗干扰能力强,但速度慢
- 中速率(850 kbps):折中方案
- 高速率(6.8 Mbps):使用BPSK调制,速度快,但距离短
我在项目中遇到过,有些设备为了省电,默认使用850 kbps。但如果你在抓包时发现信号弱,可以尝试让设备切换到110 kbps,抓包成功率会高很多。
3.5.2 PSDU的抓包注意事项
抓PSDU时,最容易出问题的是长度不匹配。PHR里声明的长度和实际发送的长度不一致,会导致CRC错误。
我的经验: 抓包时,先抓一小段数据(比如10字节),确认PHR解析正确后,再抓完整帧。这样能快速定位问题。
3.6 帧结构在抓包中的实际应用
理解了帧结构,抓包就变成了“按图索骥”。
- 第一步:锁定前导码 —— 调整接收机参数,匹配目标设备的前导码序列和长度
- 第二步:检测SFD —— 确认帧起始位置
- 第三步:解析PHR —— 获取帧长度和数据速率
- 第四步:接收PSDU —— 根据PHR的参数,完整接收数据负载
你想想看,这四步缺一不可。哪一步出问题,抓包就失败。
重要提醒: 不同UWB芯片厂商对帧结构的实现可能有细微差异。比如,有些芯片在SFD之后会插入额外的同步序列。如果你用通用的抓包工具抓不到数据,不妨查一下芯片手册,看看有没有特殊的帧结构配置。
好了,帧结构就讲到这里。记住:前导码是敲门砖,SHR是分界线,PHR是身份证,PSDU才是真金白银。抓包时,每一步都要稳扎稳打。