RK全志平台WiFiBT调试思路
调试前
WiFi常见的通信接口:PCIE、SDIO、USB。
BT 常见的通信接口: UART、SDIO、USB。
模组厂商提供:
(1)固件(用来控制模组硬件行为);
(2)模组驱动源码(SDK 一般会提供常用的 WiFi 模组驱动源码,没有的需要找模组厂商)。
WiFi 模组识别流程
SDIO 接口
开机时kernel MMC框架会去识别SDIO 卡,首先会去解析dts里面的sdio_pwrseq节点的reset-gpios属性配
置的GPIO,也就是WL_REG_ON然后拉高它,并通过SDIO_CLK/CMD/DATA发初始化指令给模块。
首先SDIO_CLK会以400/300/200K的低频给WiFi模块发命令,获取WiFi SDIO基本的信息。比如SDIO2.0(CLK最大50M)还是3.0 (CLK最大208M)、支持4线还是1线等信息,然后根据支持的规格提高SDIO_CLK频率到相应的高频50M/150M,到这一步初始化基本完成。
# 注意 mmc0: 0的数字是不固定的,也可能是0/1/2; ff4a0000:表示控制器的地址,不同平台也是不一样的
# 解析dts的mmc-pwrseq节点,获取WL_REG_ON
dwmmc_rockchip ff4a0000.dwmmc: allocated mmc-pwrseq
# 低频初始化
mmc_host mmc0: Bus speed (slot 0) = 400000Hz (... actual 400000HZ div = 0)
# 高频工作模式
mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (... actual 50000000HZ div = 0)
# SDIO 2.0
mmc0: new high speed SDIO card at address 0001
# SDIO 3.0
mmcx: new ultra high speed SDR104 SDIO card at address 0001
USB/PCIE接口
这两个接口识别过程比较复杂,当识别完成后,lsusb/lspci 可以看到如下类似信息:
USB接口:
Bus 001 Device 002: ID 0bda:f179 Realtek Semiconductor Corp. RTL8188FTV
802.11b/g/n 1T1R 2.4G WLAN Adapter
PCIE接口:
0002:21:00.0 Network controller: Broadcom Inc. and subsidiaries Device 449d (rev02)
调试思路
拿到模组后,总体调试思路如下:
(1)硬件检查:确认模组供电、接口(SDIO/USB/PCIe)、时钟信号、天线连接正常。
(2)设备树/内核配置:验证接口控制器、GPIO、 复位/中断引脚配置正确。
(3)驱动加载与固件:确保驱动匹配模组,固件正确加载(/lib/firmware/)。
(4)模组识别状态:调试 PCIE /USB 接口 WiFi 模组时,首先还要 lspci/lsusb 确认 PCIE 是否识别到模块。
(5)连接与网络验证: AP 扫描网络、wpa_supplicant连接网络。
蓝牙总体思路类似,DTS 配置更简单,使用什么通信接口就配置什么接口,比如 UART,那 DTS 只需配置 UART 即可。
排查思路
重要:务必先看log,根据log的异常进行排查!!!
WiFi/BT大概分为3类问题:
(1)SDIO/USB/PCIE设备识别不到;
(2)识别到SDIO卡,但firmware加载失败;
(3)性能问题,连不上/扫描个数少/概率断开等等;
具体步骤以及更多排查手段可以参考各 soc 厂商的开发文档。
欢迎关注“嵌入式分享”,持续更新!