1. WiFi芯片概述:从协议演进到驱动分层
大家好,我是老张。做WiFi驱动开发十几年了,踩过的坑比走过的路还多。今天咱们聊聊WiFi芯片的“家底”——从协议怎么一路升级,到芯片内部长啥样,再到驱动怎么分层。这些东西搞明白了,后面调试起来才顺手。
1.1 WiFi技术演进:从802.11a到802.11be
WiFi协议这二十多年,说白了就是一场“速度与激情”的竞赛。我最早接触的是802.11b,11Mbps的速率,当时觉得快得不得了。现在回头看,连看个标清视频都卡。
| 协议 | 频段 | 最大速率 | 关键技术 | 发布年份 |
|---|---|---|---|---|
| 802.11a | 5 GHz | 54 Mbps | OFDM | 1999 |
| 802.11b | 2.4 GHz | 11 Mbps | DSSS | 1999 |
| 802.11g | 2.4 GHz | 54 Mbps | OFDM | 2003 |
| 802.11n | 2.4/5 GHz | 600 Mbps | MIMO, 40MHz | 2009 |
| 802.11ac | 5 GHz | 6.9 Gbps | MU-MIMO, 160MHz | 2013 |
| 802.11ax | 2.4/5/6 GHz | 9.6 Gbps | OFDMA, 1024-QAM | 2019 |
| 802.11be | 2.4/5/6 GHz | 46 Gbps | 320MHz, 4096-QAM | 2024 |
这里有个关键点:802.11n是个分水岭。从它开始,MIMO技术引入,速率才真正起飞。我在一个路由器项目里,就因为天线校准没做好,MIMO性能死活上不去。后来发现是驱动里一个参数配错了——嗯,这种坑后面会细讲。
核心要点:WiFi演进本质上是“更宽的频宽 + 更多的天线 + 更高效的调制”。802.11ax(WiFi 6)引入OFDMA,解决了多用户场景下的效率问题。802.11be(WiFi 7)把频宽推到320MHz,速率直接翻倍。
1.2 主流WiFi芯片厂商
市面上WiFi芯片厂商不少,但真正能打的就那几家。我这些年几乎都打过交道,各有各的脾气。
- Broadcom(博通):老牌劲旅,高端路由器、苹果设备里常见。驱动闭源,文档少,调试起来最头疼。我当年调BCM4360,光找寄存器手册就花了一周。
- Qualcomm(高通):收购了Atheros后,实力大增。IPQ系列在路由器市场很猛。驱动相对开放,有QSDK,社区支持不错。
- MTK(联发科):性价比之王,中低端路由器、IoT设备大量使用。驱动源码开放,但质量参差不齐。我见过MT7620的驱动里,有个DMA描述符的bug,坑了不少人。
- Realtek(瑞昱):USB网卡、电视盒子、打印机里常见。驱动简单,但性能一般。优点是便宜,缺点是...嗯,你懂的。
个人建议:新手入门,先从MTK或Realtek开始。源码开放,资料多,容易上手。Broadcom和Qualcomm的芯片,等有经验了再碰。
1.3 芯片内部架构:MAC、BB、RF
一块WiFi芯片,内部其实分三大部分。我画了个图,方便你理解。
这三个模块,我分别说说。
MAC层
MAC层负责“谁先说话”的问题。CSMA/CA机制,说白了就是“先听后说,冲突了等会儿再说”。驱动里最常打交道的就是MAC层的寄存器——配置速率、控制ACK、管理重传。我记得有一次,客户反馈吞吐量上不去,查了半天,发现是MAC层的重传阈值设得太保守了。
BB层
基带处理,这是WiFi的“大脑”。OFDM调制、FFT变换、信道估计,全在这里。BB层的调试最麻烦,因为涉及信号处理,很多问题在数字域看不出来。我建议你备个频谱仪,关键时刻能救命。
RF层
射频前端,负责把数字信号变成电磁波。PA(功率放大器)、LNA(低噪声放大器)、开关、滤波器,都在这里。RF层的调试,温度影响很大。我有个项目,夏天测试没问题,冬天一冷,灵敏度掉了3dB——后来发现是LNA的偏置电压随温度漂了。
注意:驱动开发中,90%的问题出在MAC层和RF层的接口上。比如DMA描述符配置错误、TX/RX队列溢出、功率校准参数不对。这些坑,后面章节会一个个填。
1.4 驱动分层模型
WiFi驱动不是铁板一块,而是分层的。我习惯把它分成四层:
- 网络协议栈接口层:对接Linux内核的net_device、无线子系统cfg80211/mac80211。说白了,就是让内核知道“我是个网卡”。
- 驱动核心层:实现WiFi协议的核心逻辑,比如扫描、关联、认证、密钥管理。这部分代码量最大,也最容易出bug。
- 硬件抽象层(HAL):封装芯片寄存器的读写、DMA操作、中断处理。不同芯片的HAL差别很大,但接口可以统一。
- 固件接口层:通过SDIO/PCIe/USB与固件通信,下发命令、上传事件。固件负责实时性要求高的任务,比如ACK、重传、速率自适应。
为什么要分层?我举个例子。有一次换芯片平台,从MTK换到Realtek,驱动核心层基本没动,只改了HAL层和固件接口层。这就是分层的好处——隔离变化。
调试技巧:遇到WiFi连接问题,先定位是哪一层。如果是扫描不到AP,大概率是MAC层或RF层的问题。如果是关联失败,可能是驱动核心层的状态机出错了。我曾经花了两天查一个“连接上但没网”的问题,最后发现是固件接口层的一个命令超时参数设得太短。
好了,第一章就聊这么多。WiFi芯片的概貌,你应该有个基本认识了。后面我们会深入每一层,从驱动代码到调试工具,一步步实战。
公众号:蓝海资料掘金营,微信deep3321