一步步理解 WiFi Chip
路灯网关
说 WiFi Chip 之前先说一个我三年前做过的项目:路灯网关(好吧,我承认我的思维很跳跃)。其结构是这样的:
核心由一个主处理器(Linux)和一个协处理器(STM32)构成,二者通过串口通信。
这里只讲下系统升级功能,Linux 的 APP 升级就不需要讲了,太容易了。给 STM 32 进行升级,采用的方案是:STM32 整体固件由两部分组成,bootloader 和 application。通过主处理器从云端下载 application 的二进制文件,然后通过串口给 STM32 进行升级。这样就能够对整套系统进行迭代升级。
华丽的分割线
嵌入式 Linux 整体结构
一直以来致力于嵌入式 Linux 系统开发,对嵌入式 Linux 整体结构较为熟悉,大致如下:
带 WiFi 芯片的嵌入式 Linux 整体结构
具体的,一个带 WiFi 芯片的嵌入式 Linux 整体结构如下:
其中,应用层程序和 WiFi 驱动进行交互,WiFi 驱动和 WiFi 芯片进行交互,构成一个完整的 WiFi 功能。
通信结构 && 配置结构
其实图中的 WiFi APP 承担的是配置 WiFi Driver 的作用,而不能算作通信结构,真正的通信结构是下图蓝色部分:
对应到 TCP/IP 参考模型
WiFi Driver Vs WiFi Chip
在含有 WiFi 的 TCP/IP 参考模型中,数据链路层又被划分为 MAC 子层和 LLC 子层,LLC 子层在 WiFi Driver 中,那 MAC 子层是在 WiFi Driver 中还是在 WiFi Chip 中呢?
SoftMAC or HardMAC
MAC 层使用三种类型的帧:管理帧、数据帧、控制帧。其中,802.11 标头中的帧控制字段用以标识特定的类型。
管理帧是由被称为 MLME(MAC 子层管理实体)的实体进行管理的。根据处理 MLME 的实体的运行位置的不同,我们可以将 WiFi Chip 的实现大体分为两种:SoftMAC,其中 MLME 在 Kernel 的WiFi Driver 中运行;HardMAC(也称为 FullMAC),其中 MLME 是以固件的形式嵌入在 WiFi Chip 中的。但实际情况要比这里说的要复杂得多,并且还存在一些混合实现形式,例如,Probe Req/Rsp 由 WiFi Driver 管理,而 Auth 和 Association 则归 WiFi Chip 固件处理。
MLME(MAC 子层管理)
SoftMAC —— SoftAP
HardMAC(FullMAC):功耗、性能
参考
WiFi的Firmware和Nvram文件 WiFi芯片内部有一个小系统,用来运行802.11协议,此部分代码就叫Firmware。有些芯片(例如 broadcom)的Firmware是以文件的形式存放的,有些芯片(例如 realteck)的Firmware是做到驱动代码中的。 WiFi芯片需要作相应的RF参数校准,校准值等信息一般放到到Nvram中。