第二章 协议栈概览:BLE/Wi-Fi/Zigbee协议栈对比、各层功耗占比分析
做无线低功耗设计,第一件事是什么?
我个人习惯,不是先看芯片手册,而是先搞清楚协议栈。为什么?因为功耗的命门,就藏在协议栈的每一层里。你想想看,一个蓝牙包发出去,从应用层一路走到物理层,每一层都在吃电。搞不清楚这些,你连功耗从哪漏的都不知道。
2.1 三大协议栈的宏观对比
先看一张总表,我这些年做项目,每次选型都会拿出来对照一遍。
| 特性 | BLE | Wi-Fi | Zigbee |
|---|---|---|---|
| 标准组织 | Bluetooth SIG | IEEE 802.11 / Wi-Fi Alliance | Zigbee Alliance (现CSA) |
| 物理层速率 | 1Mbps / 2Mbps (LE) | 最高数Gbps (Wi-Fi 6/7) | 250kbps |
| 典型通信距离 | 10-100m | 30-100m (室内) | 10-100m |
| 网络拓扑 | 星型、Scatternet | 星型 (AP-STA) | 星型、树型、Mesh |
| 峰值电流 | ~15mA (TX 0dBm) | ~300mA (TX) | ~30mA (TX) |
| 待机电流 | ~1μA | ~100μA (DTIM) | ~1μA |
| 应用场景 | 穿戴、传感器、Beacon | 视频流、大文件传输 | 智能家居、工业控制 |
嗯,这里要注意。这张表只是宏观对比。真正做低功耗设计时,你会发现——协议栈的每一层,都在悄悄吃掉你的电池。
2.2 BLE协议栈分层与功耗分析
BLE协议栈,我拆成三层来看:Controller、Host、Application。每一层的功耗占比,我在项目中实测过多次。
2.2.1 物理层 (PHY) — 功耗大头
物理层是吃电大户。发射功率每增加3dB,电流大约翻倍。但很多人忽略了一点:接收功耗往往比发射更可怕。为什么?因为发射是瞬间的,接收却要一直开着射频窗口。
我曾经在一个穿戴项目中,发现设备待机电流比预期高了20μA。查了三天,最后发现是物理层的接收窗口开得太宽了。射频一直处于RX状态,电流自然下不来。
2.2.2 链路层 (LL) — 连接间隔的陷阱
链路层决定了什么时候收发数据。连接间隔设得越小,功耗越高。我见过有人把连接间隔设成7.5ms,结果设备一天就没电了。
说白了,链路层就是你的「开关」。开关次数越多,功耗越大。我建议:非实时数据,连接间隔至少设到100ms以上。
2.2.3 L2CAP / ATT / GATT — 数据打包的学问
这一层很多人不重视。其实MTU大小直接影响功耗。MTU太小,同样的数据要拆成多个包发,每个包都有协议开销。MTU太大,一次传输时间长,容易受干扰重传。
我个人习惯,BLE应用层数据尽量打包发送。比如传感器数据,攒够20个字节再发,比一次发1个字节省电得多。
2.3 Wi-Fi协议栈分层与功耗分析
Wi-Fi的协议栈比BLE复杂得多。它的功耗大头,往往不在数据传输,而在——保持连接。
2.3.1 物理层 — OFDM的代价
Wi-Fi物理层用了OFDM调制,峰值电流轻松上300mA。但好消息是,Wi-Fi有省电模式。802.11n/ac/ax都支持PS-Poll和U-APSD。
我记得有个项目,客户要求Wi-Fi设备用电池供电。一开始直接跑标准模式,电池撑不过8小时。后来启用了DTIM=3的省电模式,待机电流从50mA降到了2mA。嗯,这就是协议栈的威力。
2.3.2 MAC层 — 竞争窗口的隐形成本
Wi-Fi的MAC层用CSMA/CA。设备在发送前要监听信道,如果信道忙,就要退避。这个退避过程,射频一直在工作。你想想看,如果周围Wi-Fi设备多,退避时间可能比发送时间还长。
2.3.3 网络层 — DHCP和ARP的陷阱
很多人不知道,DHCP续租和ARP广播也会吃电。Wi-Fi设备每隔一段时间要发DHCP请求续租IP,还要响应ARP广播。这些看似不起眼,但积少成多。
我建议:固定IP可以减少DHCP开销,静态ARP表可以减少广播响应。当然,这要看你的网络环境是否支持。
2.4 Zigbee协议栈分层与功耗分析
Zigbee天生为低功耗设计。它的协议栈比BLE和Wi-Fi都精简,但陷阱也不少。
2.4.1 物理层 — 250kbps的取舍
Zigbee物理层速率只有250kbps,但换来的是极低的接收灵敏度(-100dBm以上)。这意味着同样的发射功率,Zigbee可以传得更远。
但要注意:低速率意味着长传输时间。一个128字节的数据包,Zigbee要传4ms,而BLE只要1ms。所以Zigbee的功耗优势,更多体现在待机,而不是传输。
2.4.2 MAC层 — 信标使能 vs 非信标
Zigbee的MAC层有两种模式:信标使能和非信标。信标使能模式下,设备按信标周期同步唤醒,功耗可控。非信标模式下,设备要一直监听父节点的数据指示。
我做过一个Zigbee传感器项目,一开始用非信标模式,电池寿命只有3个月。后来改成信标使能模式,信标间隔设为1秒,电池寿命直接延长到1年。差别就在MAC层的调度策略上。
2.4.3 网络层 — 路由发现的代价
Zigbee Mesh网络的路由发现,是功耗的隐形杀手。当一个节点发起路由发现时,整个网络都要参与广播。这个过程的功耗,可能比正常通信高10倍。
2.5 各层功耗占比总结
好了,说了这么多,我直接给结论。这是我多年实测的典型数据,供你参考。
| 协议栈 | 物理层 | MAC/链路层 | 网络/传输层 | 应用层 |
|---|---|---|---|---|
| BLE | 60-70% | 20-25% | 5-10% | 5% |
| Wi-Fi | 50-60% | 25-35% | 10-15% | 5% |
| Zigbee | 40-50% | 30-40% | 15-20% | 5% |
看到没?物理层永远是功耗大头。但MAC/链路层的优化空间最大。我见过太多人只盯着发射功率调,却忽略了协议栈上层的调度策略。说白了,低功耗设计不是「省着用」,而是「用对地方」。
下一章,我会带你深入BLE的链路层,看看连接间隔、事件长度、跳频算法这些参数,到底怎么调才能省电。嗯,那才是真正见功夫的地方。