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芯片,内部其实分三大部分。我画了个图,方便你理解。

WiFi芯片内部架构 主机接口 PCIe / USB / SDIO MAC 介质访问控制 BB 基带处理 RF 射频前端 天线 各模块功能 MAC:负责帧封装/解封装、CSMA/CA、ACK、重传、加密(AES/TKIP) BB:负责OFDM调制/解调、FFT/IFFT、信道估计、均衡、前向纠错(FEC) RF:负责上/下变频、功率放大(PA)、低噪声放大(LNA)、滤波、ADC/DAC 驱动分层模型 应用层 → 网络协议栈 → 驱动核心层 → 硬件抽象层 → 固件 → 芯片

这三个模块,我分别说说。

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驱动不是铁板一块,而是分层的。我习惯把它分成四层:

  1. 网络协议栈接口层:对接Linux内核的net_device、无线子系统cfg80211/mac80211。说白了,就是让内核知道“我是个网卡”。
  2. 驱动核心层:实现WiFi协议的核心逻辑,比如扫描、关联、认证、密钥管理。这部分代码量最大,也最容易出bug。
  3. 硬件抽象层(HAL):封装芯片寄存器的读写、DMA操作、中断处理。不同芯片的HAL差别很大,但接口可以统一。
  4. 固件接口层:通过SDIO/PCIe/USB与固件通信,下发命令、上传事件。固件负责实时性要求高的任务,比如ACK、重传、速率自适应。

为什么要分层?我举个例子。有一次换芯片平台,从MTK换到Realtek,驱动核心层基本没动,只改了HAL层和固件接口层。这就是分层的好处——隔离变化

调试技巧:遇到WiFi连接问题,先定位是哪一层。如果是扫描不到AP,大概率是MAC层或RF层的问题。如果是关联失败,可能是驱动核心层的状态机出错了。我曾经花了两天查一个“连接上但没网”的问题,最后发现是固件接口层的一个命令超时参数设得太短。

好了,第一章就聊这么多。WiFi芯片的概貌,你应该有个基本认识了。后面我们会深入每一层,从驱动代码到调试工具,一步步实战。


公众号:蓝海资料掘金营,微信deep3321