news 2026/5/5 12:19:26

【RK3506实战-09】RK3506 + RTL8852BS(SDIO)WiFi6 驱动调试实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【RK3506实战-09】RK3506 + RTL8852BS(SDIO)WiFi6 驱动调试实战
  • 主控:RK3506(3×A7 + M0)
  • WiFi:RTL8852BS(SDIO 4bit,WiFi6/802.11ax,5G+2.4G)
  • 接口:SDMMC1(SDIO)
  • 内核:Linux 5.10 / 6.1(Rockchip SDK)
  • 系统:Buildroot / Yocto / 原厂 Linux

一、硬件原理与上电时序(SDIO 必看)

1.1 引脚连接(RK3506 ↔ RTL8852BS)

RK3506RTL8852BS说明
SDMMC1_CLKCLKSDIO 时钟
SDMMC1_CMDCMD命令线
SDMMC1_D0~D3DATA0~34bit 数据
GPIO_PB0WL_REG_ON模组电源使能(3.3V,高有效)
GPIO_PB1WL_HOST_WAKE主机唤醒 WiFi(输入)
3.3VVDD供电
GNDGND
ANT天线必须接,否则无信号

1.2 上电时序(关键!否则驱动加载失败)

  1. 拉低WL_REG_ON→ 延时 10ms
  2. 拉高WL_REG_ON(3.3V)→ 延时 50ms
  3. 初始化 SDIO 控制器 → 识别模组(vendor=0x024c,device=0x8852)

二、设备树 DTS 配置(rk3506-evb.dts)

路径:arch/arm64/boot/dts/rockchip/rk3506-evb.dts

2.1 SDMMC1 控制器(WiFi 用)

dts

&sdmmc1 { status = "okay"; bus-width = <4>; /* SDIO 4bit */ max-frequency = <150000000>; /* 150MHz,WiFi6稳定 */ non-removable; /* 板载,不可热插拔 */ pinctrl-names = "default"; pinctrl-0 = <&sdmmc1_clk &sdmmc1_bus>; /* WiFi电源时序控制 */ mmc-pwrseq = <&wifi_pwrseq>; /* RTL8852BS 节点 */ wifi@1 { compatible = "realtek,rtl8852bs"; reg = <1>; wl-reg-on-gpios = <&gpio RK_PB0 GPIO_ACTIVE_HIGH>; wl-host-wake-gpios = <&gpio RK_PB1 GPIO_ACTIVE_HIGH>; }; }; /* WiFi电源时序节点(必须) */ wifi_pwrseq: mmc-pwrseq { compatible = "rockchip,mmc-pwrseq"; reset-gpios = <&gpio RK_PB0 GPIO_ACTIVE_LOW>; reset-delay-us = <10000>; /* 拉低10ms */ power-delay-us = <50000>; /* 拉高50ms */ };

2.2 编译设备树

make dtbs # 生成 rk3506-evb.dtb,烧录后重启

三、内核配置(WiFi6 + SDIO 依赖)

make menuconfig

3.1 MMC/SD/SDIO 核心

Device Drivers → MMC/SD/SDIO support → [*] MMC support → [*] SDIO support → [*] Rockchip SDMMC controller support

3.2 无线协议栈(WiFi6 必需)

Networking support → [*] Wireless → [*] cfg80211 → [*] mac80211 → [*] 802.11ax (WiFi6) support

3.3 Realtek SDIO 驱动

Device Drivers → Network device support → Wireless LAN → <M> Realtek wireless LAN support → <M> RTL8852BS SDIO WiFi6 adapter

3.4 保存配置

make savedefconfig cp defconfig arch/arm64/configs/rk3506_defconfig

四、RTL8852BS 驱动编译(RK3506)

4.1 驱动源码获取

Realtek 原厂驱动(RK 平台适配版):

# 从Rockchip SDK获取(推荐) cd external/rkwifibt/realtek/ git clone https://github.com/rockchip-linux/rkwifibt.git cd rkwifibt/realtek/RTL8852BS

或第三方适配:

git clone https://gitcode.com/gh_mirrors/rt/rtl8852bs.git cd rtl8852bs

4.2 修改 Makefile 适配 RK3506

makefile

# 平台选择 CONFIG_PLATFORM_I386_PC = n CONFIG_PLATFORM_ARM_ROCKCHIP = y # 内核路径(改为你的SDK路径) KERNELDIR ?= /home/xxx/rk3506-sdk/kernel ARCH ?= arm64 CROSS_COMPILE ?= /home/xxx/rk3506-sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-

4.3 编译

make clean make -j8 # 生成:8852bs.ko

五、固件部署(RTL8852BS 必需)

5.1 固件文件

  • 固件:fw_8852bs.bin(Realtek 原厂,与驱动匹配)
  • 路径:/vendor/etc/firmware//lib/firmware/
mkdir -p /vendor/etc/firmware/ cp fw_8852bs.bin /vendor/etc/firmware/

六、驱动加载与初始化

6.1 手动加载(调试)

# 拷贝驱动到系统 cp 8852bs.ko /lib/modules/$(uname -r)/ depmod -a # 加载驱动 insmod 8852bs.ko # 查看加载状态 lsmod | grep 8852bs dmesg | grep -i 8852

6.2 正常日志(成功标志)

rtw_8852bs: Driver initialization ok sdio 1:0001:1: wlan0: RTL8852BS WiFi6 registered

6.3 查看 SDIO 设备

cat /proc/mmc # 看到:sdmmc1:0001: 024c:8852 (Realtek)

七、wpa_supplicant 配置 WiFi6 联网

7.1/etc/wpa_supplicant.conf(WiFi6 关键)

conf

ctrl_interface=/var/run/wpa_supplicant ap_scan=1 country=CN network={ ssid="你的WiFi6_SSID" psk="你的密码" key_mgmt=WPA-PSK ieee80211w=2 /* WiFi6/WPA3 强制开启 */ freq_list=2412 5180 /* 2.4G + 5G */ priority=1 }

7.2 启动 WiFi

# 后台运行 wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf # 查看连接状态 wpa_cli -i wlan0 status # 获取IP udhcpc -i wlan0 # 测试外网 ping 223.5.5.5

八、WiFi6 特性验证

8.1 查看网卡能力

iw dev wlan0 info

WiFi6 成功标志

supported wifi generations: 802.11b 802.11g 802.11n 802.11ac 802.11ax

8.2 扫描 WiFi

iw dev wlan0 scan | grep SSID

九、常见问题与排错(SDIO 高频坑)

问题 1:dmesg 报sdio: error while initializing card

  • 原因:上电时序错误(WL_REG_ON 未按 10ms 低→50ms 高)
  • 解决:检查设备树wifi_pwrseq延时,或硬件 GPIO 电平

问题 2:能识别 SDIO(024c:8852),但无 wlan0

  • 原因:固件缺失 / 路径错
  • 解决:dmesg | grep firmware→ 补fw_8852bs.bin

问题 3:驱动加载报symbol not found

  • 原因:内核未开启CFG80211/MAC80211
  • 解决:重新配置内核,开启无线协议栈

问题 4:WiFi6 路由连不上,只能连 5G

  • 原因:未加ieee80211w=2
  • 解决:wpa_supplicant.conf 增加该配置

问题 5:WiFi 丢包、速率低

  • 原因:SDIO 时钟低 / 天线差
  • 解决:设备树设max-frequency=150MHz;接原厂天线,远离干扰源

十、量产优化

  1. 开机自启:在/etc/init.d/添加脚本,上电自动加载8852bs.ko并启动 wpa_supplicant
  2. 固件固化:将fw_8852bs.bin编译进根文件系统
  3. 降日志:关闭驱动调试打印,降低 CPU 占用
  4. 电源管理:配置 WiFi 休眠,降低功耗

总结

RK3506 + RTL8852BS(SDIO)WiFi6 调试核心:

  1. 严格上电时序(WL_REG_ON 10ms 低→50ms 高)
  2. 设备树正确配置 SDMMC1 + 电源时序节点
  3. 内核开启 SDIO + WiFi6 协议栈
  4. 匹配驱动与固件
  5. wpa_supplicant 加 ieee80211w=2 开启 WiFi6

整套方案稳定适配 RK3506 5.10/6.1 内核,可直接用于工控、IoT 网关、智能家电量产。

后续预告

下一篇文章:【RK3506实战-10】RK3506 Linux 接入 ESP32-SDIO WiFi 超详细实战

原创不易,如果本文对你有帮助,欢迎点赞、收藏、关注三连!有任何问题都可以在评论区留言,我会及时回复。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 12:18:28

一夜格式化 2500 万行代码库:rubyfmt 的传奇故事

1. 文章相关链接 博客、活动、文档、YouTube、GitHub、见面会等相关链接。 2. 文章标题 一夜之间格式化 2500 万行代码库&#xff1a;rubyfmt 的故事 3. 元数据 日期为 2026 年 4 月 28 日&#xff0c;作者为 Fable Tales 和 Anna Mason&#xff0c;阅读时间 8 分钟&#xff0c…

作者头像 李华
网站建设 2026/5/5 12:17:26

C 语言自定义类型:联合体 + 枚举(全网最细讲解)

大家好&#xff0c;今天带来 C 语言联合体&#xff08;共用体&#xff09;和枚举类型的完整精讲。这两个是 C 语言自定义类型的最后两块拼图&#xff0c;面试常考、开发常用。目录联合体类型的声明联合体的特点联合体大小的计算联合体实战&#xff1a;判断大小端枚举类型的声明…

作者头像 李华
网站建设 2026/5/5 12:07:26

Tiled地图编辑器终极指南:从零开始创建专业2D游戏地图

Tiled地图编辑器终极指南&#xff1a;从零开始创建专业2D游戏地图 【免费下载链接】tiled Flexible level editor 项目地址: https://gitcode.com/gh_mirrors/ti/tiled Tiled是一款强大而灵活的2D地图编辑器&#xff0c;专为游戏开发者设计。无论你是独立开发者还是团队…

作者头像 李华
网站建设 2026/5/5 12:05:26

AI智能体安全支付中间件:MoneyClaw架构设计与OpenClaw集成实战

1. 项目概述&#xff1a;为AI智能体赋予支付能力的“金钱之爪”如果你正在探索如何让AI智能体&#xff08;Agent&#xff09;在真实世界里完成在线支付、管理订阅&#xff0c;而不是仅仅停留在对话和文本生成&#xff0c;那么你很可能已经遇到了一个核心难题&#xff1a;如何安…

作者头像 李华
网站建设 2026/5/5 12:02:26

MAGI:AI原生文档格式,为RAG与智能体注入结构化灵魂

1. 项目概述&#xff1a;为什么我们需要一个“AI原生”的文档格式&#xff1f;如果你最近在折腾大语言模型应用&#xff0c;特别是RAG或者智能体&#xff0c;那你肯定遇到过这个头疼的问题&#xff1a;怎么把那些五花八门的文档——网页、PDF、Word、甚至内部Wiki——喂给AI&am…

作者头像 李华