3. UWB MAC层机制:超帧结构、时隙分配、接入机制

MAC层,说白了就是管“谁在什么时候说话”的。UWB物理层虽然能发纳秒级脉冲,但如果MAC层调度不好,大家一窝蜂抢信道,吞吐量照样崩。我这些年调过不少UWB设备,踩坑最多的反而不是天线,而是MAC参数没配对。

这一节,我们重点拆解三个东西:超帧结构、时隙分配、接入机制。搞懂了它们,你才算真正入了UWB MAC的门。

3.1 超帧结构:时间轴怎么切?

UWB MAC的时间轴不是连续的,而是被切成了一个个超帧。每个超帧是固定长度的周期,里面再细分出更小的单元。

我个人习惯把超帧想象成“一节火车”:

  • 超帧 = 整列火车
  • 帧 = 每节车厢
  • 时隙 = 车厢里的座位

IEEE 802.15.4a/z标准里,超帧结构大致长这样:

超帧 (Superframe)
├── 信标时隙 (Beacon Slot)      —— 同步用
├── 竞争接入期 (CAP)            —— CSMA/CA 随机抢
└── 非竞争期 (CFP)             —— TDMA 固定分配
    ├── 保证时隙 1 (GTS 1)
    ├── 保证时隙 2 (GTS 2)
    └── ...

信标时隙在最前面,协调器会在这里广播同步帧。所有设备收到信标后,就知道当前超帧的起始时间、时隙分配情况。嗯,这里要注意:如果信标丢了,整个超帧的同步就乱了。我在项目中遇到过,某次测试时一台设备始终连不上,查了半天发现是信标功率设得太低,被干扰吞掉了。

核心要点:超帧长度决定了系统的延迟上限。超帧越短,延迟越低,但信标开销占比越大;超帧越长,有效数据吞吐越高,但同步精度会下降。一般室内定位场景用 10-50ms 的超帧,数据吞吐场景可以拉到 100ms 以上。

下面这张图,是我自己画的一个超帧结构示意,方便你理解时间轴怎么切:

UWB 超帧结构示意图 一个超帧 (Superframe) — 固定时长 信标时隙 竞争接入期 (CAP) — CSMA/CA 非竞争期 (CFP) — TDMA GTS 1 GTS 2 GTS 3 信标用于同步,CAP用于随机接入,CFP用于确定性调度

3.2 时隙分配:谁在哪个座位?

时隙分配,就是决定每个设备在哪个时间段发送数据。UWB MAC支持两种分配方式:

分配方式 特点 适用场景 我踩过的坑
静态分配 超帧开始时固定好,整个周期不变 节点数量固定、流量稳定的场景 节点掉线后时隙空转,浪费带宽
动态分配 设备按需申请,协调器实时调整 节点数量变化、突发流量场景 申请信令交互增加延迟

我个人更倾向动态分配,尤其是做工业传感器网络时。你想想看,现场几十个节点,有的每秒发一次数据,有的十分钟才报一次警。如果都用静态分配,大部分时隙都在空转,吞吐利用率低得可怜。

动态分配的核心流程是这样的:

  1. 设备在CAP阶段发送时隙请求帧
  2. 协调器收到后,在下一个信标里广播分配结果
  3. 设备根据分配结果,在指定的GTS里发送数据
  4. 数据发完后,可以主动释放时隙,也可以等超时回收

实战技巧:我曾经在测试中发现,动态分配时如果设备数量超过16个,信标帧会变得很大,导致CAP阶段被压缩。后来我把信标间隔从20ms改成50ms,给CAP留出足够窗口,问题就解决了。所以,超帧长度和节点数量要一起调。

3.3 接入机制:CSMA/CA vs TDMA

UWB MAC支持两种接入机制,它们各有各的脾气。

3.3.1 CSMA/CA — 先听后说,随机退避

CSMA/CA,全称是载波侦听多路访问/冲突避免。说白了就是:发之前先听一下信道,没人用就发,有人用就等一会儿再试。

退避算法用的是二进制指数退避:

退避时间 = random(0, 2^BE - 1) × aUnitBackoffPeriod

其中:
  BE = Backoff Exponent,初始值 macMinBE(通常3)
  每次冲突后 BE 加1,直到 macMaxBE(通常5)
  aUnitBackoffPeriod = 20 symbols(约 0.32ms @ 6.8Mbps)

为什么UWB要用CSMA/CA?因为UWB信号功率极低(< -41.3 dBm/MHz),传统能量检测很难判断信道是否空闲。所以UWB用的是前导码检测——侦听有没有其他设备在发前导码,而不是检测信号能量。

注意:CSMA/CA在设备密集时性能会急剧下降。我做过一个测试,当同频段设备超过10个时,碰撞率飙升到30%以上,有效吞吐直接腰斩。所以,高密度场景慎用CSMA/CA。

3.3.2 TDMA — 排好队,一个一个来

TDMA就简单粗暴了:每个设备分一个固定时隙,到点就发,不用抢。

它的优势很明显:

  • 无碰撞:只要时隙分配不重叠,就不会冲突
  • 确定性延迟:每个设备的最大等待时间 = 超帧长度
  • 高吞吐利用率:没有退避开销,信道利用率接近100%

但TDMA也有代价:

  • 需要精确的时间同步(UWB本身精度够,但信标丢失会出问题)
  • 时隙分配不灵活,突发流量不好处理
  • 节点加入/离开需要重新协商

3.3.3 怎么选?

对比维度 CSMA/CA TDMA
信道利用率 低(退避开销) 高(无竞争)
延迟抖动 大(随机退避) 小(固定时隙)
扩展性 好(即插即用) 差(需集中调度)
实现复杂度 低 高(需同步)
典型场景 低密度、低负载 高密度、高负载、实时性要求高

我个人建议:混合使用。CAP阶段用CSMA/CA做控制信令和低优先级数据,CFP阶段用TDMA做高优先级数据。很多商用UWB芯片(比如DW3000系列)默认就支持这种混合模式。

3.4 实战:MAC参数对吞吐的影响

讲完理论,我们看一组实测数据。这是我之前在实验室测的,环境是8个设备,超帧长度50ms:

MAC配置 CAP占比 CFP占比 有效吞吐 (Mbps) 丢包率
纯CSMA/CA 100% 0% 1.2 8.5%
纯TDMA 0% 100% 2.8 0.2%
混合 (30% CAP + 70% CFP) 30% 70% 2.1 1.1%

看到了吧?纯CSMA/CA的吞吐只有TDMA的一半不到,丢包率还高了一个数量级。但纯TDMA的灵活性差,新设备加入要等下一个超帧。混合模式是个不错的折中。

我的建议:如果你的应用场景节点数固定、流量稳定,直接上纯TDMA,吞吐最高。如果节点经常变动,用混合模式,CAP留10%-20%就够了,别超过30%,否则TDMA的优势会被稀释。

嗯,MAC层的东西就这些。超帧结构决定了时间轴怎么切,时隙分配决定了谁在哪个位置,接入机制决定了怎么抢或者怎么排。下一层,我们就要看物理层怎么把这些数据真正发出去——那就是调制和编码的事了。