WiFi/蓝牙驱动
1. 概述
1.1 功能简介
WiFi/蓝牙驱动负责无线网络连接和蓝牙通信功能。M4-R2 底板板载 WiFi/蓝牙模块,支持 WiFi 5 和蓝牙 5.0(BLE)标准,配置 2 根外置天线,适用于无线网络接入、蓝牙外设连接、物联网网关等场景。RK3576 通过 SDIO/UART 接口与板载无线模块通信。
1.2 应用场景
- WiFi 网络:无线局域网接入(802.11 a/b/g/n/ac)
- 蓝牙通信:蓝牙耳机、键鼠、传感器
- 双频 WiFi:2.4GHz + 5GHz 同时工作
- 物联网网关:WiFi + BLE 中心节点
- 无线投屏:Miracast/AirPlay 等无线显示
1.3 工作原理
M4-R2 板载 WiFi/蓝牙模块支持以下特性:
| 特性 | 说明 |
|---|---|
| WiFi 标准 | 802.11 a/b/g/n/ac(WiFi 5) |
| 频段 | 2.4GHz + 5GHz |
| 蓝牙 | 蓝牙 5.0 + BLE |
| 接口 | SDIO(WiFi)/ UART(蓝牙) |
| 安全 | WPA3-SAE、WPA2-PSK |
| 天线 | 2 根外置天线(板载) |
板载模块的具体型号与规格以底板规格书为准(S-01,已验证)。
2. 硬件准备
2.1 硬件清单
| 组件 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| 主控板 | C-3576BQ 核心板 + M4-R2 底板 | 1 | 板载 WiFi/蓝牙模块 |
| 调试串口线 | USB 转 TTL(3.3V) | 1 | 波特率 1500000 |
| 天线 | 2.4G + 5G 外置天线(板载 2 根) | 2 | 出厂已预装 |
| 无线路由器 | 支持 2.4G/5G | 1 | 用于网络连接测试 |
2.2 引脚连接
M4-R2 底板板载 WiFi/蓝牙模块(含 2 根天线),无需外部接线,直接使用即可。
板载模块与主控板之间的 SDIO/UART 连接已在底板原理图(S-04)中定义,用户无需干预。
2.3 硬件确认
# SDIO WiFi:查看 SDIO 设备
cat /sys/bus/sdio/devices/
ls /sys/bus/mmc/devices/
# 查看 WiFi 接口
ip link show wlan0
# 查看蓝牙设备
hciconfig -a3. 软件准备
3.1 内核配置
确认以下内核配置已启用:
# WiFi
CONFIG_WIRELESS=y
CONFIG_CFG80211=y
CONFIG_MAC80211=y
CONFIG_BRCMFMAC=y # Broadcom WiFi(板载模块)
CONFIG_WLAN_VENDOR=y
# 蓝牙
CONFIG_BT=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_BNEP=y
CONFIG_BT_HIDP=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIBCM43XX=y # Broadcom 蓝牙
# SDIO
CONFIG_MMC=y
CONFIG_MMC_SDIO=y具体内核配置项以实际发布的 RK3576 SDK 内核 defconfig 为准。
3.2 设备树
以板载 WiFi 模块(SDIO 接口)为例的设备树配置:
&sdio0 {
status = "okay";
max-frequency = <150000000>;
cap-sdio-irq;
keep-power-in-suspend;
bus-width = <4>;
brcmfmac: wifi@1 {
compatible = "brcm,bcm4329-fmac";
reg = <1>;
// WiFi 电源控制
wl_reg_on = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
wl_host_wake = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
};
};以上 GPIO 编号为 RK 平台通用示例,具体以实际发布的 RK3576 SDK 设备树为准。
4. 操作步骤
4.1 启动 WiFi
# 查看 WiFi 接口
ip link show wlan0
# 扫描 WiFi 网络
iw dev wlan0 scan | grep -E "SSID|freq|signal"
# 连接 WiFi 网络(WPA2)
wpa_cli -i wlan0
> add_network
> set_network 0 ssid "MyWiFi"
> set_network 0 psk "password"
> enable_network 0
> quit
# 使用 wpa_supplicant 配置文件
cat > /etc/wpa_supplicant.conf << EOF
ctrl_interface=DIR=/var/run/wpa_supplicant
update_config=1
network={
ssid="MyWiFi"
psk="password"
key_mgmt=WPA-PSK
}
EOF
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
udhcpc -i wlan04.2 测试 WiFi 连接
# 查看 WiFi 连接状态
iw dev wlan0 link
# 查看 WiFi 信号强度
iw dev wlan0 station dump
# ping 测试
ping -c 4 8.8.8.8
# WiFi 速度测试
iperf3 -c 192.168.1.14.3 启动蓝牙
# 启动蓝牙服务
systemctl start bluetooth
# 查看蓝牙设备
hciconfig -a
# 扫描蓝牙设备
bluetoothctl
> power on
> agent on
> scan on
> devices4.4 配置蓝牙音频
# 安装 PulseAudio 蓝牙模块
apt-get install pulseaudio-module-bluetooth
# 重启 PulseAudio
pulseaudio -k
pulseaudio --start
# 在 bluetoothctl 中配对蓝牙耳机
bluetoothctl
> pair XX:XX:XX:XX:XX:XX
> trust XX:XX:XX:XX:XX:XX
> connect XX:XX:XX:XX:XX:XX5. 代码详解
5.1 内核中 WiFi 驱动的注册
// Broadcom WiFi 驱动(简化)
// drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
static struct sdio_driver brcmf_sdiod_driver = {
.probe = brcmf_sdiod_probe,
.remove = brcmf_sdiod_remove,
.drv = {
.name = "brcmfmac-sdio",
.of_match_table = brcmf_sdiod_of_match,
},
};
static const struct of_device_id brcmf_sdiod_of_match[] = {
{ .compatible = "brcm,bcm4329-fmac" },
{ /* sentinel */ }
};5.2 用户空间 WiFi 操作的内核调用链
用户空间 iw dev wlan0 scan
→ nl80211 事件
→ cfg80211_scan()
→ brcmf_cfg80211_scan()
→ brcmf_sdio_bus_scan()
→ 通过 SDIO 发送扫描命令
→ 返回扫描结果6. 常见问题
6.1 WiFi 无法识别
现象: ip link show wlan0 无 wlan0 设备
解决方案:
# 检查 SDIO 设备
cat /sys/bus/sdio/devices/
# 检查 WiFi 驱动加载
dmesg | grep -i brcm
# 检查固件是否加载
dmesg | grep -i firmware
# 检查 WiFi 电源控制
cat /sys/kernel/debug/gpio | grep wl确认设备树中 WiFi 节点 status = "okay",检查固件文件是否存在于 /lib/firmware/。
6.2 WiFi 信号弱
现象: WiFi 信号不稳定或信号弱
解决方案:
# 查看信号强度
iw dev wlan0 station dump | grep signal
# 切换频段
iw dev wlan0 set freq 5180 # 切换到 5GHz检查天线连接(板载 2 根天线需拧紧),调整路由器位置。
6.3 蓝牙无法配对
现象: 蓝牙搜索不到设备或配对失败
解决方案:
# 检查蓝牙设备
hciconfig -a
# 重启蓝牙服务
systemctl restart bluetooth
# 查看蓝牙日志
dmesg | grep -i bluetooth检查蓝牙固件加载,确认蓝牙电源控制引脚配置正确。
相关文档
- GPIO驱动与控制 — GPIO 控制
- SDMMC-eMMC驱动 — SDIO 接口
- 设备树详解与实践 — 设备树配置
- 核心板参数 — 硬件事实基线
