Linux 驱动开发之WIFI设备分析2(基于Linux6.6)---简要介绍
一、什么是wifi 模块
WiFi模块是一种用于提供无线局域网(WLAN)连接的硬件组件,它允许设备通过Wi-Fi网络进行通信。WiFi模块通常集成了WiFi功能,使得嵌入式设备或物联网(IoT)设备能够与互联网或本地局域网(LAN)进行无线数据传输。
1.WiFi模块的组成部分
WiFi模块通常包含以下几个主要组成部分:
- 无线通信芯片:负责处理WiFi信号的发送和接收。常见的芯片如 ESP8266、ESP32、MTK(联发科) 和 Qualcomm 等。
- 微控制器(MCU):用于控制WiFi模块的工作逻辑,如连接网络、管理数据传输等。
- 天线:用于接收和发送无线信号。WiFi模块可以内置天线或外接天线。
- 存储器:存储WiFi模块的固件和配置文件。
- 电源管理电路:确保WiFi模块能在各种电源条件下正常工作。
2.WiFi模块的工作原理
WiFi模块通过无线电波与路由器或无线接入点(AP)进行通信。其工作流程一般如下:
- 扫描网络:WiFi模块会扫描周围的无线网络,寻找可用的Wi-Fi信号。
- 连接网络:一旦发现可用网络,模块会尝试通过提供正确的密码(如果是加密网络)连接到该网络。
- 数据传输:连接成功后,WiFi模块会开始通过Wi-Fi网络进行数据传输,可以是上传数据到云端,或从互联网上下载数据。
3.常见的WiFi模块
- ESP8266:广泛使用的低成本Wi-Fi模块,具有较小的体积和强大的功能,常用于物联网(IoT)项目中。它支持 802.11b/g/n 协议,适合基础的无线联网应用。
- ESP32:是ESP8266的升级版,支持更强的功能,包括蓝牙、更多的GPIO接口、更高的处理能力和更多的存储空间,适用于更复杂的项目。
- Wemos D1 mini:这是一款基于ESP8266的开发板,适用于快速开发Wi-Fi项目。
- Raspberry Pi的WiFi模块:树莓派(Raspberry Pi)开发板通常内置WiFi模块,方便连接到无线网络。
- Arduino WiFi Shield:用于Arduino开发板的Wi-Fi扩展模块,可以使Arduino设备连接到Wi-Fi网络。
4.WiFi模块的应用场景
- 物联网(IoT):WiFi模块是IoT设备的核心组成部分之一,用于实现设备与互联网之间的无线连接。比如智能家居设备、智能灯泡、温湿度传感器等。
- 智能硬件:如智能音响、智能门锁、智能家电等,通过WiFi模块实现远程控制和数据传输。
- 远程监控系统:WiFi模块用于远程视频监控、摄像头数据上传等。
- 无线通信:用于移动设备、嵌入式设备等的无线通信。
二、WiFi 模块主要分类
1. 按芯片平台分类
WiFi模块的芯片平台通常决定了其性能、功能以及与其他硬件的兼容性。常见的芯片平台有:
- ESP8266:一种低成本、功能强大的WiFi模块,广泛应用于物联网(IoT)和嵌入式系统。ESP8266支持802.11b/g/n协议,适合需要较低功耗和较小尺寸的项目。
- ESP32:是ESP8266的升级版,具有更强的处理能力,支持双核处理器、蓝牙(BLE)、更多的GPIO引脚、更大的内存等,适用于复杂的应用场景。
- MT7688/MT7697(联发科):这些芯片常用于需要较高数据处理能力和连接稳定性的应用,如路由器、智能家居控制器等。
- Qualcomm Atheros(AR系列芯片):这些高性能芯片多用于高端设备,如智能家居产品、商用路由器等。
- Atmel (Microchip):Atmel(现为Microchip)也提供WiFi解决方案,常用于嵌入式应用。
2. 按功能分类
WiFi模块可以根据其功能特性分为以下几类:
-
基本WiFi模块:这些模块仅提供WiFi连接功能,适用于简单的联网任务,如ESP8266、ESP32等。这类模块通常包括基本的WiFi协议栈,用于设备与路由器或接入点(AP)的通信。
-
带处理器的WiFi模块(WiFi SoC):这些模块不仅提供WiFi连接,还集成了微控制器(MCU)功能。常见的例子如ESP32,它除了WiFi功能外,还可以进行数据处理和控制任务,适合较为复杂的应用。
-
WiFi扩展模块:这类模块通常作为附加模块,通过SPI、UART等接口与主控制器(如Arduino或树莓派)连接,为主控制器提供WiFi连接能力。常见的有ESP8266 WiFi Shield、Arduino WiFi Shield等。
3. 按工作模式分类
WiFi模块可以根据其工作模式分类,这通常与设备的使用场景和应用需求相关:
-
站点模式(Station Mode, STA):在这种模式下,WiFi模块作为客户端连接到已有的Wi-Fi网络(如家庭路由器)。大多数WiFi模块默认使用站点模式。
-
接入点模式(Access Point Mode, AP):在接入点模式下,WiFi模块本身充当一个无线热点,其他设备可以连接到该热点。这种模式常见于无线设备之间的点对点通信,或者在没有外部路由器时使用。
-
混合模式(SoftAP+STA模式):在这种模式下,WiFi模块既能作为客户端连接到现有Wi-Fi网络,同时也能作为无线接入点,允许其他设备通过Wi-Fi连接到它。这种模式常用于设备之间的局部网络。
4. 按数据传输速率分类
根据Wi-Fi模块支持的传输速率不同,也可以将其分为以下几类:
-
低速模块:支持802.11b协议的WiFi模块,通常用于简单的数据传输和控制应用。这类模块的速率较低,约为11 Mbps。例如,部分老旧的WiFi模块可能仅支持这一协议。
-
中速模块:支持802.11g协议的WiFi模块,传输速率较高,约为54 Mbps,适用于一般的数据传输和流媒体应用。
-
高速模块:支持802.11n或更高协议的WiFi模块(如802.11ac/ax),支持更高的传输速率(可达数百兆比特或千兆比特),适合高清视频流、快速数据传输和大规模的设备连接等高带宽需求的应用。
5. 按应用场景分类
WiFi模块还可以按具体的应用场景进行分类,常见的应用包括:
-
物联网(IoT)WiFi模块:这类模块通常用于低功耗、短距离通信的场景。它们广泛应用于智能家居、环境监测、传感器、智能穿戴设备等IoT产品中,典型代表如ESP8266、ESP32等。
-
工业级WiFi模块:这类模块通常用于工业自动化、远程监控等场景,要求高稳定性、长距离和抗干扰能力。它们可能具有更强的抗噪声能力和更高的传输稳定性。
-
嵌入式WiFi模块:用于各种嵌入式设备中,如自动售货机、智能仪表、远程控制系统等,这类模块通常兼具小体积和强大的集成能力。
6. 按功耗分类
WiFi模块根据功耗的不同,可以分为以下几类:
-
低功耗WiFi模块:适用于电池供电的设备,如可穿戴设备、传感器节点等。ESP8266和ESP32都有低功耗模式,适合这类应用。
-
普通功耗WiFi模块:适用于一般的家庭和办公环境中,电源通常来自于稳定的电源适配器,不太需要过多关注功耗。
7. 按支持的WiFi标准分类
WiFi模块还可以按支持的WiFi标准进行分类:
-
802.11b/g/n模块:这些模块支持较为基础的Wi-Fi标准,传输速度较低,适用于一般的家庭和小型应用。
-
802.11ac/ax模块:这些模块支持更高速的Wi-Fi标准,适用于高清视频流、大文件传输和高带宽应用,适合现代家庭和办公环境。
针对嵌入式WIFI与普通WIFI来进行对比:
|
嵌入式WIFI模块 |
普通WIFI模块 |
适用范围 |
无线家电、仪表、智能灯泡等智能家居设备 |
笔记本、手机、平板电脑等 |
主控芯片 |
模块上集成的MCU |
x86 CPU、ARM等高速微处理器 |
接口 |
UART、SPI、I2C、SDIO |
USB、SDIO |
功耗 |
低 |
高 |
产品 |
TI的CC3200系列、MXCHIP系列、ASIX系列 、Atheros的HF-LPA系列等 |
瑞昱RTL81xx系列、威盛VT系列、雷凌RT系列、 博通BCM、Marvell、高通Atheros等 |
开发设计 |
内置WIFI驱动、MAC、WIFI协议、无线安全协议等, 所有的网络软件封装成一个UART或SPI接口的设备, 使用简单,只需要往UART或者SPI收发数据即可。 从整体软件层面上看,不属于网络设备。 |
需要在主机添加WIFI驱动、同时需要依赖主机的网络协议栈等软件平台资源, 从整体软件层面上看,属于网络设备,使用时需要遵循网络相关的协议。 |
8.USB接口WiFi模块原理图的主要组成部分:
-
USB接口控制器
- 功能:将WiFi模块与主机(如电脑、树莓派、嵌入式系统等)进行通信。通常使用USB 2.0或USB 3.0标准。
- 常见芯片:FTDI(用于串口转USB)、Prolific等USB转接芯片,或直接集成了USB控制器的WiFi芯片(如Broadcom、Qualcomm、Realtek等)。
- 工作原理:当模块插入主机时,USB控制器负责数据传输、供电管理以及设备识别等任务。
-
WiFi芯片(无线通信模块)
- 功能:处理无线网络的连接、数据传输和接收。WiFi芯片通常包括一个无线电发射/接收单元(RF部分)和一个数字信号处理单元(baseband部分),也可能包括一个处理器来管理网络协议栈。
- 常见芯片:Realtek RTL8188、Qualcomm Atheros AR9271、Broadcom BCM43143、Cypress CYW43340等。
- 工作原理:WiFi芯片使用调制解调技术处理无线信号,并通过无线电频率(RF)收发无线数据流。
-
天线接口
- 功能:提供信号接收和发射的接口,通常是一个SMA或IPX连接器,接驳外部天线。
- 工作原理:天线通过无线电波进行信号传输和接收。良好的天线设计和定位是保证WiFi信号强度和稳定性的关键。
-
电源管理模块
- 功能:提供WiFi模块所需的稳定电源,一般通过USB供电。电源模块可以包含电压转换电路、稳压器和电源滤波器等,确保WiFi芯片稳定工作。
- 工作原理:USB接口提供的是5V电源,但WiFi芯片的工作电压通常低于5V,因此需要电压转换(例如,3.3V)和稳压器来确保芯片获得适当的电源。
-
数据处理与协议栈
- 功能:WiFi模块内可能会集成一个小型的处理器(例如,MCU),用于运行TCP/IP协议栈或其他网络协议,从而使得WiFi模块能够实现网络连接、数据加密和传输等功能。也可以在主机端运行协议栈并通过USB接口与WiFi芯片通信。
- 工作原理:WiFi模块通过内置的协议栈或主机计算机上的驱动程序来进行网络通信,如进行连接管理、数据传输、加密解密等操作。
-
控制接口
- 功能:WiFi模块通常会有一些控制引脚,例如复位引脚、使能引脚(ENABLE)、引导模式引脚(BOOT)等,用于控制芯片的启动、复位和模式切换。
- 工作原理:主机通过控制信号来控制WiFi模块的工作状态,例如在初始化时复位WiFi模块或切换工作模式。
-
驱动和固件
- 功能:USB WiFi模块通常需要特定的驱动程序和固件才能在操作系统中正常工作。驱动程序负责控制模块的操作并实现与主机的通信,而固件则运行在WiFi芯片上,处理WiFi协议栈、连接管理等任务。
- 工作原理:固件通常通过USB接口与主机系统通信,驱动程序通过控制WiFi模块的各项功能(如扫描网络、连接Wi-Fi等)。
9.USB WiFi模块原理图概述:
|----------------------------|
| USB接口控制器 |<----->| 主机 (PC/嵌入式) |
|----------------------------| |--------------------------|
| |
v v
|----------------------------| |---------------------------|
| 电源管理模块 | | WiFi协议栈、驱动 |
|----------------------------| |---------------------------|
| |
v v
|----------------------------| |---------------------------|
| WiFi芯片 | | 网络连接 |
| (包含RF、Baseband、处理器) |----->| 数据处理/传输 |
|----------------------------| |---------------------------|
| |
v v
|----------------------------| |---------------------------|
| 天线接口 |<----->| 无线信号传输与接收 |
|----------------------------| |---------------------------|
三、WiFi模块主要功能
Wifi 模块 包括两种类型的拓扑形式:基础网(Infra)和自组网(Adhoc),要说明无线网络的拓扑形式,首先要了解两个基本概念:
a -- AP
也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。
b -- STA站点
每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。
1、基于AP组建的基础无线网络(Infra)
Infra:也称为基础网,是由AP创建,众多STA加入所组成的无线网络,这种类型的网络的特点是AP是整个网络的中心,网络中所有的通信都通过AP来转发完成。
附:
AP是将wifi模块当路由器使用,这样手机和电脑就可以直接连接wifi模块了。
Infra 是将wifi模块当基础设备使用,用于连接别的路由器。
2、基于自组网的无线网络(Adhoc)
Adhoc:也称为自组网,是仅由两个及以上STA自己组成,网络中不存在AP,这种类型的网络是一种松散的结构,网络中所有的STA都可以直接通信。
3、安全机制
本模块支持多种无线网络加密方式,能充分保证用户数据的安全传输,包括:WEP64/WEP128/ TKIP/CCMP(AES) WEP/WPA-PSK/WPA2-PSK。
4、快速联网
本模块支持通过指定信道号的方式来进行快速联网。在通常的无线联网过程中,会首先对当前的所有信道自动进行一次扫描,来搜索准备连接的目的AP创建的(或Adhoc)网络。本模块提供了设置工作信道的参数,在已知目的网络所在信道的条件下,可以直接指定模块的工作信道,从而达到加快联网速度的目的。
5、地址绑定
本模块支持在联网过程中绑定目的网络BSSID地址的功能。根据802.11协议规定,不同的无线网络可以具有相同的网络名称(也就是SSID/ESSID),但是必须对应一个唯一的BSSID 地址。非法入侵者可以通过建立具有相同的SSID/ESSID的无线网络的方法,使得网络中的STA联接到非法的AP上,从而造成网络的泄密。通过BSSID地址绑定的方式,可以防止STA 接入到非法的网络,从而提高无线网络的安全性。
6、无线漫游
本模块支持基于802.11协议的无线漫游功能。无线漫游指的是为了扩大一个无线网络的覆盖范围,由多个AP共同创建一个具有相同的SSID/ESSID的无线网络,每个AP用来覆盖不同的区域,接入到网络的STA可以根据所处位置的选择信号最强的AP接入,而且随着STA的移动自动在不同的AP之间切换。
四、工作方式
1、主动型串口设备联网
主动型串口设备联网指的是由设备主动发起连接,并与后台服务器进行数据交互(上传或下载)的方式。典型的主动型设备,如无线POS机,在每次刷卡交易完成后即开始连接后台服务器,并上传交易数据。PUSH型串口设备联网的拓扑结构如右图所示。其中,后台服务器作为TCP Server端,设备通过无线AP/路由器接入到网络中,并作为TCP Client端。
2、被动型串口设备联网
被动型串口设备联网指的是,在系统中所有设备一直处于被动的等待连接状态,仅由后台服务器主动发起与设备的连接,并进行请求或下传数据的方式。典型的应用,如某些无线传感器网络,每个传感器终端始终实时的在采集数据,但是采集到的数据并没有马上上传,而是暂时保存在设备中。
4.1、无线工作模式
在 Linux 中,WiFi 模块可以工作在不同的模式,以下是几种常见的工作模式:
-
Managed
模式(客户端模式):- 这是最常见的工作模式,设备(如笔记本、智能手机等)通过 WiFi 连接到现有的无线接入点(如家庭路由器或公共WiFi热点)。
- 在
Managed
模式下,设备需要通过 SSID 扫描并选择网络,并使用 WPA 或 WPA2 进行安全认证。
-
Access Point
模式(接入点模式):- 这种模式下,WiFi 网卡充当一个无线接入点(AP),允许其他设备通过 WiFi 连接到它。通常用于创建一个小型的无线局域网。
- 设备充当 AP,提供一个 SSID,并允许其他设备通过该接入点进行通信。
-
Ad-hoc
模式:- 也称为点对点模式,WiFi 设备直接连接到另一个 WiFi 设备,而无需通过中介的接入点(如路由器)。这种模式通常用于设备间快速的无线连接,缺乏中心化管理。
-
Monitor
模式:- 在监控模式下,WiFi 网卡能够捕获无线信道上的所有数据包,包括其他设备发送的未加密的和加密的数据包。这种模式主要用于网络嗅探和无线网络分析(如使用
Wireshark
、airmon-ng
等工具进行嗅探)。
- 在监控模式下,WiFi 网卡能够捕获无线信道上的所有数据包,包括其他设备发送的未加密的和加密的数据包。这种模式主要用于网络嗅探和无线网络分析(如使用
-
Mesh
模式:- 在这种模式下,WiFi 设备通过无线网状网络进行通信,适用于需要广泛覆盖区域的网络,例如农村地区或灾区应急通信。
4.2、WiFi 网络管理工具
在 Linux 系统中,WiFi 连接的管理通常通过以下工具和服务来实现:
-
wpa_supplicant
:wpa_supplicant
是 Linux 中用于管理 WiFi 连接的核心工具,支持 WPA 和 WPA2 加密协议。它负责连接到 WiFi 网络,处理身份验证过程。- 配置文件:
/etc/wpa_supplicant/wpa_supplicant.conf
用于设置连接的 SSID、加密方式等信息。
-
NetworkManager
:NetworkManager
是一个管理 Linux 系统中网络连接的工具,它能够处理有线和无线网络接口的配置。NetworkManager
提供了一个更友好的界面来管理网络连接,支持 GUI、CLI(nmcli
)、D-Bus API 等。
-
iw
和iwconfig
:iw
是一个现代的无线配置工具,用于显示和配置无线设备。它通常用于扫描无线网络、设置信道等。iwconfig
是旧版的无线配置工具,功能类似,但有些较新的 Linux 发行版已经不再推荐使用它。
-
ifconfig
和ip
:- 这些工具用于查看和配置网络接口,包括 WiFi 网络接口。
4.3、WiFi 配置和管理
-
连接到网络: 使用
wpa_supplicant
或NetworkManager
,你可以配置 WiFi 连接。通常,用户需要提供 SSID 和密码来连接到加密的 WiFi 网络。 -
扫描可用网络: 使用
iw dev wlan0 scan
可以扫描周围可用的 WiFi 网络,并获取 SSID、信号强度、加密类型等信息。 -
查看连接状态: 使用
iwconfig
或nmcli
命令来查看当前的 WiFi 连接状态,显示已连接的网络名称(SSID)、信号强度、传输速率等信息。
4.4、WiFi 配置示例
1.通过 wpa_supplicant
配置:
-
编辑
/etc/wpa_supplicant/wpa_supplicant.conf
文件,添加你的网络配置:
-
network={ ssid="YourSSID" psk="YourPassword" }
-
启动
wpa_supplicant
: -
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
-
获取 IP 地址:
-
sudo dhclient wlan0
2.使用 nmcli
(NetworkManager CLI):
- 扫描并连接到网络:
nmcli device wifi list
nmcli device wifi connect "YourSSID" password "YourPassword"