BSP 调试 #16:WiFi-ap6256(全志 T527)
摘要:以全志 T527 平台为例,记录 AP6256 Wi-Fi 模组从硬件检查、设备树与内核配置,到固件加载、问题定位和功能验证的完整调试过程。
1. 调试前:硬件条件
AP6256 是同时集成 Wi-Fi 和蓝牙功能的模组:
- Wi-Fi 默认使用 SDIO;
- 蓝牙默认使用 UART。
Wi-Fi 模组正常工作的硬件条件如下:
| 条件 | 要点 |
|---|---|
| 供电 | 通常为两路:VCC-Wi-Fi 主电源和 VCCIO-Wi-Fi IO 上拉电源 |
| 使能 | WL-REG-ON 需输出高电平 |
| 通信接口 | 可使用 USB、SDIO 或 PCIe,本文以 SDIO 为例;SDIO0~3 共 4 条数据线 |
| 唤醒主控 | WL-WAKE-AP 可用于唤醒主控,也可能作为主控接收数据的中断 |
| 主时钟 | 依模组规格,可为 24/26/30/40/60 MHz |
| 次时钟 | 通常为 32.768 kHz,可能由模组内部生成,也可能由外部输入 |
2. 软件流程
Wi-Fi 通常有 4 种工作模式:
- station:连接无线网络的终端,也是最常用的模式;
- AP:无线接入点,即热点/路由器模式;
- monitor:混杂监听模式,将所有数据包不经过滤地传给主机;
- P2P:WLAN 直连,设备之间无需中间接入点即可连接。
整体流程为:
系统启动 → 驱动加载 → 服务加载 → 启动网卡 → 访问网络
Linux 使用标准 rfkill 子系统管理射频开关和使能。主控厂商需要按 rfkill 标准注册 Wi-Fi/BT 操作。在 Tina Linux 平台中,蓝牙相关实现位于:
linux-x.X/drivers/misc/sunxi-rf/sunxi_bluetooth.c
Linux 驱动遵循设备驱动模型。Linux 3.4 及以上版本通常将板级差异配置归纳到设备树 DTS 中,由驱动负责解析配置,从而实现“核心驱动不变、平台差异由 DTS 描述”。
3. 硬件设计注意事项
3.1 供电
蓝牙和 Wi-Fi 供电通常复用,分别为模组提供主电源和 IO 通信上拉。若电源来自 PMIC,软件需要配置 PMIC,使其对相应电源域输出稳定电压;若为直接供电,软件通常无需额外配置。
3.2 时钟
- 主时钟:为蓝牙模块正常工作提供时钟源,可由外挂晶振或主控输出 24M/26M 等,具体取值以模组规格为准。
- 次时钟(AP-CK32K-OUT):作为休眠时的辅助时钟。部分模组不要求该时钟,部分模组需要主控输出并在软件中使能。
3.3 复位与唤醒
- BT-RESETN:主控 GPIO 输出的复位使能信号,蓝牙正常工作时需要拉高;
- AP-WAKE-BT:主控控制蓝牙休眠/唤醒;
- BT-WAKE-AP:蓝牙通过中断唤醒处于休眠状态的主控。
通常将 AP-WAKE-BT 配置为输出,将 BT-WAKE-AP 配置为中断输入。是否需要休眠唤醒配置,以具体模组规格为准。
3.4 接口
- UART:蓝牙模组与主控之间的数据传输接口,软件侧通常只需打开实际使用的 UART;
- PCM:蓝牙语音通话的音频接口,本文未使用。
4. 软件配置
4.1 驱动路径
rfkill 驱动路径:bsp/drivers/misc/sunxi-rf/sunxi-wlan.c
Wi-Fi 驱动路径:bsp/drivers/net/wireless/bcmdhd/*
4.2 DTS 配置
适配时需要手动配置 WL_REG_ON 和 WL_HOST_WAKE 两个引脚;SDIO 引脚沿用默认配置即可。
4.3 内核配置
CONFIG_BCMDHD=y
CONFIG_BCMDHD_FW_PATH="/lib/firmware/fw_bcm43456c5_ag.bin"
CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/nvram.txt"
将动译成模,还需要把固件加打路径:
./buildroot/buildroot/target/lib/firmware
并在 bcmdhd/dhd_linux.c 指定正确的件路径名称,例如将 DHD_FW_NAME 改为 CONFIG_BCMDHD_FW_PATH。
5. 调试过程
5.1 启动验证:网卡节点未成
用官方默认的 allwinner,sunxi-wlan 驱动动后没有成 wlan0 节点并报错。硬件检查发现:
- wl_regon 为低电平,正常状态应为高电平;
- wl_hostwake 为高电平,正常状态应为低电平。
因此首先应正备树引脚配置和硬件电平状态,再继续排查件问题。
5.2 题 1:固件载报错
现象: 正确添件,固仍无加载。
分析: 从错误信息看,固件文件名 不配。
处: 将固件重为:
fw_bcm43456c5_ag.bin
该改决了对应的固件名错误,但 Wi-Fi 功能仍未全恢复,需要继续检时钟等硬件条
5.3 问题 2:时钟引脚没有输出
定位: SoC 的时钟脚没有输出。之前以该时钟为空贴、无使。
解决: 修复时钟问题,Wi-Fi 可正生成 wlan0 节点,连热点并 ping 外网。
6. 功证
6.1 扫描 Wi-Fi
iw 命令用于扫描附近的 Wi-Fi:
iw dev wlan0 scan | grep SSID
6.2 连接指定 Wi-Fi
在 wpa_supplicant.conf 中完成置,启动连:
wpa_supplicant -B -i wlan0 -c /wpa_supplicant.conf
6.3 启动 Wi-Fi 服务
行下面命令后才能使用 wifi -s:
wifi_daemon
7. 调总结
- 先硬件、后软件:确认供电、时、wl_regon 和 wl_hostwake 引脚状态正常后,再排驱动和固件。
- 固件通位于 /lib/firmware/;径或文件名错误会导致 wlan0 无法生成
- 关注两个关键:
- wl_regon 正常工作态高电平
- wl_hostwake 正常工作状态为低电平。
- Wi-Fi 驱动编译为 M 模块时会自动加载,而他模块不定自加载。中结论是:Wi-Fi模块的自动加载使用 udev 机制。
本文内容为试记录,具体引脚、源、时和固件名称请以实际 AP6256 模组规格书及硬件设计准。
本文以全志T527平台适配AP6256 Wi-Fi/蓝牙模组为核心,详细阐述硬件供电、时钟、复位与唤醒信号设计要点,以及Linux内核驱动路径、设备树(DTS)配置、rfkill射频管理、固件加载机制和wlan0节点生成问题的定位与解决。重点涵盖SDIO接口初始化、wl_regon/wl_hostwake电平验证、时钟使能修复及iw/wpa_supplicant功能验证流程。
462

被折叠的 条评论
为什么被折叠?



