在嵌入式Linux開(kāi)發(fā)中,瑞芯微(Rockchip)平臺(tái)的Wi-Fi與藍(lán)牙調(diào)試是許多工程師的核心需求。無(wú)論是RK3588、RK356X等主流芯片,還是RV1106/1103等IPC專(zhuān)用芯片,Wi-Fi/BT的穩(wěn)定運(yùn)行直接影響產(chǎn)品體驗(yàn)。本文從配置、編譯、測(cè)試到問(wèn)題排查,手把手帶你搞定RK平臺(tái)Wi-Fi/BT調(diào)試。
一、先搞懂:RK平臺(tái)支持哪些芯片與模塊?
在開(kāi)始調(diào)試前,先確認(rèn)你的硬件與系統(tǒng)是否在支持范圍內(nèi),避免做無(wú)用功。
1.支持的芯片與內(nèi)核版本
不同芯片對(duì)應(yīng)不同Linux內(nèi)核版本,配置時(shí)需精準(zhǔn)匹配:
|
芯片系列
|
支持內(nèi)核版本
|
|
RK356X/RK3399/RK3288/RK3326/RK3308/RV1109/RV1126/PX30
|
Linux 4.4/4.19
|
|
RK3588/RK356X/RK3399/RV1106/RV1103
|
Linux 5.10
|
2.支持的Wi-Fi/BT模塊
相關(guān)SDK默認(rèn)支持主流模塊,無(wú)需額外移植即可直接使用,常見(jiàn)型號(hào)如下:
?正基(AP)/新思系列:AP6275、AP6358S、AP6212、AP6236等(含Wi-Fi+BT二合一)
?Realtek系列:RTL8723DS、RTL8822CS、RTL8188FU、RTL8189FS、RTL8821CS、RTL8852BS等(Wi-Fi單獨(dú)/二合一)
?英飛凌(Cypress /海華)系列:CYW4354、CYW43438、CYW5557X、CYW5557X_PCIE、CYW54591、CYW54591_PCIE等
?國(guó)產(chǎn)模塊:愛(ài)科微(AIC)、高拓(ATBM)等(需從指定FTP獲取支持文件)
二、核心步驟:Wi-Fi/BT配置與編譯
配置是調(diào)試的基礎(chǔ),需從SDK配置→DTS配置→內(nèi)核配置三步完成,每一步都不能錯(cuò)!
1. SDK配置:指定芯片與模塊型號(hào)
首先通過(guò)腳本指定芯片型號(hào),再配置Wi-Fi/BT模塊類(lèi)型:
# 1. 配置芯片型號(hào)(以RK3588為例)./build.sh chip rk3588# 2. 修改默認(rèn)配置文件(路徑:SDK_ROOT/device/rockchip/對(duì)應(yīng)芯片目錄)# 示例:rk3588/rockchip_rk3588_evb1_lp4_v10_defconfigRK_WIFIBT_CHIP="ALL_AP"# 支持所有正基模塊;ALL_CY支持所有英飛凌模塊RK_KERNEL_DTS_NAME="rk3588-evb1-ddr4-v10-linux"# 對(duì)應(yīng)DTS文件名# 3. 精細(xì)化選擇模塊(可選,替代ALL_AP/ALL_CY)# 打開(kāi)內(nèi)核配置界面,搜索RK_WIFIBT_CHIP,選擇具體型號(hào)(如AP6275/RTL8822CS)make menuconfig
其中,RK_WIFIBT_CHIP的配置需根據(jù)實(shí)際模塊選擇,除了ALL_AP和ALL_CY,還可直接指定具體型號(hào),如AP6275_PCIE、CYW4354、RTL8723DS等,具體支持的型號(hào)可在device/rockchip/common/scripts/post-wifibt.sh文件中查詢。
2. DTS配置:硬件接口的“橋梁”
DTS(設(shè)備樹(shù))是硬件與內(nèi)核的“翻譯官”,需根據(jù)Wi-Fi/BT接口類(lèi)型(SDIO/USB/PCIE)配置,核心是電源腳、復(fù)位腳、中斷腳的匹配。
(1)SDIO接口Wi-Fi配置(最常用)
支持“標(biāo)準(zhǔn)框架”(推薦,統(tǒng)一電源管理)和“傳統(tǒng)框架”(支持多次加載卸載),這里以正基模塊為例展示標(biāo)準(zhǔn)框架配置:
//1. 電源序列配置(SDIO_PWRSEQ)sdio_pwrseq: sdio-pwrseq {compatible = "mmc-pwrseq-simple";pinctrl-names = "default";pinctrl-0 = <&wifi_enable_h>; // 電源使能引腳reset-gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_LOW>; // WL_REG_ON(參考原理圖,別名可能為WIFI_REG_ON)post-power-on-delay-ms = <200>; // 上電后延遲(確保穩(wěn)定,默認(rèn)禁用可按需開(kāi)啟)};//2. 引腳配置(PINCTRL)&pinctrl {sdio-pwrseq {wifi_enable_h: wifi-enable-h {rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;};}};//3. SDIO控制器配置&sdio {max-frequency = <150000000>; //最高頻率(SDIO3.0支持150M,SDR104模式最高200MHz)bus-width = <4>; //4線模式cap-sd-highspeed; //支持SD高速時(shí)序cap-sdio-irq; //使能SDIO中斷信號(hào)non-removable; //非可移除設(shè)備(Wi-Fi模塊焊接在板上)mmc-pwrseq = <&sdio_pwrseq>; //關(guān)聯(lián)電源序列status ="okay";};//4. Wi-Fi節(jié)點(diǎn)配置wireless-wlan {compatible ="wlan-platdata";rockchip,grf = <&grf>;clocks = <&rk809?1>; //32.768K時(shí)鐘(參考原理圖,也可能為hym8563)clock-names ="ext_clock";wifi_chip_type ="ap6255"; //模塊型號(hào)WIFI,host_wake_irq = <&gpio0RK_PA0GPIO_ACTIVE_HIGH>; //喚醒引腳,需確認(rèn)硬件連接是否帶反向管status ="okay";};
標(biāo)準(zhǔn)框架中,WiFi的REG_ON由mmc框架統(tǒng)一管理,優(yōu)點(diǎn)是電源控制集中,缺點(diǎn)是不支持SDIO card重新識(shí)別;傳統(tǒng)框架中,WiFi的REG_ON由net/rfkill/rfkill-wlan.c控制,支持多次rmmod/insmodWiFi驅(qū)動(dòng),但需打KO模式補(bǔ)丁。
(2)藍(lán)牙配置(UART接口最常用)
藍(lán)牙需配置UART引腳(TX/RX/RTS/CTS)和電源腳,RTS/CTS必須按要求連接,否則會(huì)出現(xiàn)初始化異常:
// 1. 藍(lán)牙節(jié)點(diǎn)配置wireless-bluetooth {compatible ="bluetooth-platdata";uart_rts_gpios = <&gpio4?RK_PA7GPIO_ACTIVE_LOW>; // RTS引腳,部分藍(lán)牙芯片CTS上電前需低電平pinctrl-names ="default","rts_gpio";pinctrl-0= <&uart4_rts>;pinctrl-1= <&uart4_rts_gpio>;BT,power_gpio = <&gpio4?RK_PB3GPIO_ACTIVE_HIGH>; // BT_REG_ON(電源腳)// Linux平臺(tái)下,BT,wake_host_irq和BT,wake_gpio無(wú)需配置status ="okay";};// 2. UART控制器配置(以UART4為例)&uart4 {pinctrl-names ="default";pinctrl-0= <&uart4_xfer &uart4_ctsn>; // TX/RX/CTS引腳,無(wú)需配置RTS引腳status ="okay";};// 3. UART RTS GPIO配置&pinctrl {wireless-bluetooth {uart4_rts_gpio: uart4-rts-gpio {rockchip,pins = <4 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>;};}};
需注意,不同平臺(tái)UART相關(guān)引腳命名可能不同,例如uart4_ctsn在部分平臺(tái)可能名為uart4_cts,需在對(duì)應(yīng)芯片平臺(tái)的dts/dtsi中確認(rèn)。
(3)IO電源域配置(關(guān)鍵!SDIO3.0必看)
SDIO3.0的設(shè)備務(wù)必使用1.8V供電,需根據(jù)硬件實(shí)際供電情況配置IO電源域:
// 不同平臺(tái)io_domains名字可能不同,部分為&pmu_io_domains&io_domains {// VDDIO3_VDD引用vcc_1v8的電壓,若硬件接3.3V則改為vcc_3v3,名稱(chēng)需按實(shí)際dts/dtsi調(diào)整vccio3-supply = <&vcc_1v8>;};vcc_1v8: vcc-1v8 {compatible ="regulator-fixed";regulator-name ="vcc_1v8";regulator-always-on;regulator-boot-on;regulator-min-microvolt = <1800000>; // 1.8V供電regulator-max-microvolt = <1800000>;vin-supply = <&vcc_io>;};
(4)USB/PCIE接口配置(簡(jiǎn)要)
?USB Wi-Fi:需先參考docs/Common/USB/下的相關(guān)文檔配置USB控制器為HOST模式,Wi-Fi節(jié)點(diǎn)配置分兩種情況:若內(nèi)核.config打開(kāi)CONFIG_RFKILL/CONFIG_RFKILL_RK,則在wireless-wlan節(jié)點(diǎn)配置WIFI,poweren_gpio;若未打開(kāi),則通過(guò)regulator-fixed節(jié)點(diǎn)配置WIFI_REG_ON引腳。
?PCIE Wi-Fi:需先參考docs/Common/PCIe/下的相關(guān)文檔,配置PCIE控制器、PHY及復(fù)位腳(reset-gpios),關(guān)鍵是確認(rèn)VBAT/VCC3V3(長(zhǎng)供電3.3V)、WIFI_REG_ON(開(kāi)機(jī)高電平)、PCIE_PERST_L/PERSTO(復(fù)位管腳)的硬件連接與DTS配置一致,RK3588需特別注意PCIe20與dtsi的對(duì)應(yīng)關(guān)系,例如PCIE20_0對(duì)應(yīng)pcie2x1l2、PCIE20_1對(duì)應(yīng)pcie2x1l0等。
3.內(nèi)核配置:開(kāi)啟必要功能
內(nèi)核需開(kāi)啟Wi-Fi/BT相關(guān)驅(qū)動(dòng)與協(xié)議,核心配置如下(通過(guò)make menuconfig或修改.config):
# Wi-Fi核心配置CONFIG_RFKILL=y # 射頻開(kāi)關(guān)CONFIG_RFKILL_RK=y # RK平臺(tái)射頻開(kāi)關(guān)支持CONFIG_MMC=y # SDIO依賴MMC框架CONFIG_PWRSEQ_SIMPLE=y # 簡(jiǎn)單MMC電源序列支持CONFIG_MMC_DW=y # DW MMC控制器支持CONFIG_MMC_DW_PLTFM=y # DW MMC平臺(tái)支持CONFIG_MMC_DW_ROCKCHIP=y # RK平臺(tái)DW MMC支持CONFIG_WIRELESS=y # 無(wú)線功能支持CONFIG_WIRELESS_EXT=y # 無(wú)線擴(kuò)展支持CONFIG_WEXT_CORE=y # WEXT核心支持CONFIG_WEXT_PROC=y # WEXT進(jìn)程支持CONFIG_WEXT_PRIV=y # WEXT私有支持CONFIG_CFG80211=y# 802.11配置框架CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y # 要求簽名REGDBCONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y # 使用內(nèi)核REGDB密鑰CONFIG_CFG80211_DEFAULT_PS=y # 默認(rèn)電源管理CONFIG_CFG80211_CRDA_SUPPORT=y # CRDA支持# CONFIG_CFG80211_WEXT is not set # 關(guān)閉WEXT兼容CONFIG_MAC80211=y# MAC層驅(qū)動(dòng)CONFIG_MAC80211_HAS_RC=y # 速率控制支持CONFIG_MAC80211_RC_MINSTREL=y # Minstrel速率控制算法CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y # 默認(rèn)Minstrel算法CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"# 默認(rèn)速率控制算法CONFIG_MAC80211_STA_HASH_MAX_SIZE=0# STA哈希表最大大小# 藍(lán)牙核心配置CONFIG_BT=y # 藍(lán)牙支持CONFIG_BT_BREDR=y # 經(jīng)典藍(lán)牙支持CONFIG_BT_RFCOMM=y # RFCOMM支持# CONFIG_BT_RFCOMM_TTY is not set # 關(guān)閉RFCOMM TTY# CONFIG_BT_BNEP is not set # 關(guān)閉BNEPCONFIG_BT_HIDP=y # HIDP支持# CONFIG_BT_HS is not set # 關(guān)閉HSCONFIG_BT_LE=y # 低功耗藍(lán)牙(BLE)支持CONFIG_BT_DEBUGFS=y# 調(diào)試日志支持# Realtek藍(lán)牙需關(guān)閉以下配置,使用自有驅(qū)動(dòng)# CONFIG_BT_HCIUART is not set
其中,正基(新思)和英飛凌(海華/ CY)的模塊使用內(nèi)核默認(rèn)CONFIG_BT_HCIUART驅(qū)動(dòng),而Realtek模塊使用自有hci uart/hci_usb驅(qū)動(dòng),需關(guān)閉內(nèi)核CONFIG_BT_HCIUART配置,其驅(qū)動(dòng)源碼位于external/rkwifibt/realtek/bluetooth_uart_driver和external/rkwifibt/realtek/bluetooth_usb_driver目錄。
4.編譯:生成驅(qū)動(dòng)與固件
編譯需執(zhí)行指定腳本,自動(dòng)生成驅(qū)動(dòng)(.ko)、固件(firmware)并拷貝到文件系統(tǒng):
# 1. 編譯Wi-Fi/BT驅(qū)動(dòng)與工具./build.sh wifibt# 2. 打包根文件系統(tǒng)(確保驅(qū)動(dòng)與固件被包含)./build.sh rootfs && ./build.sh firmware
編譯過(guò)程會(huì)調(diào)用device/rockchip/common/scripts/mk-wifibt.sh和device/rockchip/common/scripts/post-wifibt.sh腳本,編譯external/rkwifibt/drivers/目錄下的驅(qū)動(dòng),并拷貝對(duì)應(yīng)固件文件到文件系統(tǒng),同時(shí)還會(huì)編譯brcm_patchram_plus1、rtk_hciattach等工具。
關(guān)鍵文件路徑(需熟記,排查時(shí)常用)
|
文件類(lèi)型
|
SDK中的路徑
|
燒錄后設(shè)備路徑
|
|
Wi-Fi驅(qū)動(dòng)(.ko)
|
external/rkwifibt/drivers/(如bcmdhd、rtlxxx目錄)
|
/system/lib/modules/或/usr/lib/modules/
|
|
固件(firmware)
|
external/rkwifibt/firmware/(broadcom目錄對(duì)應(yīng)正基,realtek目錄對(duì)應(yīng)Realtek)
|
正基:/system/etc/firmware/;Realtek藍(lán)牙:/lib/firmware/rtlbt/(UART)、/lib/firmware/(USB)
|
|
藍(lán)牙工具
|
external/rkwifibt/tools/(brcm_tools、rtk_hciattach目錄)
|
/usr/bin/(如brcm_patchram_plus1、rtk_hciattach)
|
|
配置文件
|
external/rkwifibt/conf/(wpa_supplicant.conf、dnsmasq.conf等)
|
/data/cfg/(wpa_supplicant.conf常用路徑)
|
|
初始化腳本
|
external/rkwifibt/scripts/(S36wifibt-init.sh、wifibt-init.sh等)
|
/etc/init.d/(S36wifibt-init.sh)
|
三、功能測(cè)試:驗(yàn)證Wi-Fi/BT是否正常工作
編譯燒錄后,通過(guò)命令行驗(yàn)證核心功能,確?;A(chǔ)功能正常再排查復(fù)雜問(wèn)題。
1. Wi-Fi測(cè)試(STA模式:連接路由器)
以Buildroot系統(tǒng)為例:
# 1. 加載Wi-Fi驅(qū)動(dòng)(正基模塊示例:bcmdhd.ko;Realtek模塊示例:RTL8723DS.ko)insmod /system/lib/modules/bcmdhd.ko# 2. 啟動(dòng)wlan0接口ifconfig wlan0 up# 3. 配置wpa_supplicant(連接路由器)# 編輯配置文件:/data/cfg/wpa_supplicant.confcat > /data/cfg/wpa_supplicant.conf << EOFctrl_interface=/var/run/wpa_supplicant # 控制接口路徑,默認(rèn)不建議修改ap_scan=1 # AP掃描模式update_config=1 # 允許wpa_cli配置保存到文件network={ssid="你的路由器SSID"# Wi-Fi名稱(chēng)psk="你的路由器密碼" # Wi-Fi密碼(8-63位)key_mgmt=WPA-PSK # 加密方式,不加密改為key_mgmt=NONE}EOF# 4. 啟動(dòng)wpa_supplicant并獲取IPwpa_supplicant -B -i wlan0 -c /data/cfg/wpa_supplicant.conf # -B后臺(tái)運(yùn)行# 使用dhcp客戶端獲取IP(二選一,不可同時(shí)啟用)dhcpcd wlan0 # 功能完整的DHCP客戶端(默認(rèn))# 或 udhcpc -i wlan0 # busybox精簡(jiǎn)DHCP客戶端# 5. 驗(yàn)證:ping路由器網(wǎng)關(guān)ping 192.168.1.1 -c 4 # -c指定ping次數(shù)
若需掃描周邊AP,可在wpa_supplicant進(jìn)程運(yùn)行的前提下,執(zhí)行wpa_cli -i wlan0 -p /var/run/wpa_supplicant scan和wpa_cli -i wlan0 -p /var/run/wpa_supplicant scan_results命令,掃描結(jié)果需與手機(jī)掃描的2.4G/5G AP個(gè)數(shù)(根據(jù)模塊支持頻段)及信號(hào)強(qiáng)度對(duì)比,正常信號(hào)強(qiáng)度范圍:好(-20~-50dBm)、可接受(-50~-70dBm)、差(-70~-90dBm)。
2. Wi-Fi AP模式(設(shè)備作為熱點(diǎn))
相關(guān)SDK集成softapDemo工具,可快速開(kāi)啟熱點(diǎn),不同模塊使用的接口不同:
?Realtek模組:使用p2p0作為AP接口,需在驅(qū)動(dòng)Makefile中添加EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE開(kāi)啟共存模式,自動(dòng)生成p2p0節(jié)點(diǎn)。
?正基/海華模組:使用wlan1作為AP接口,需通過(guò)iw phy0 interface add wlan1 type managed命令生成wlan1節(jié)點(diǎn)。
具體操作:
1. 編譯softapDemo(若SDK中無(wú)源碼,從指定地址下載到external目錄)源碼地址:https://github.com/rockchip-linux/softapServermake softap-dirclean && make softap2. 啟動(dòng)熱點(diǎn)(以正基模組為例,SSID為"RK-AP",無(wú)密碼)生成wlan1節(jié)點(diǎn)iw dev wlan1 del(若已存在)iw phy0 interface add wlan1 type managed啟動(dòng)熱點(diǎn)softapDemo RK-AP3. 驗(yàn)證:手機(jī)搜索"RK-AP"并連接,ping設(shè)備AP地址(默認(rèn)192.168.88.1)ping 192.168.88.1 -c 4
若需配置加密、修改IP地址或DNS,可修改wlan_accesspoint_start、creat_dnsmasq_file、create_hostapd_file函數(shù),例如在create_hostapd_file中添加wpa相關(guān)配置實(shí)現(xiàn)WPA-PSK加密,在creat_dnsmasq_file中調(diào)整dhcp-range配置IP地址池。
3.藍(lán)牙測(cè)試(經(jīng)典藍(lán)牙+ BLE)
(1)Realtek模塊(UART接口)
# 1. 執(zhí)行初始化腳本(SDK生成的bt_pcba_test或bt_init.sh)/usr/bin/bt_pcba_test# 腳本核心操作(手動(dòng)執(zhí)行等效命令):killall rtk_hciattach # 關(guān)閉現(xiàn)有rtk_hciattach進(jìn)程echo0 > /sys/class/rfkill/rfkill0/state # 下電echo0 > /proc/bluetooth/sleep/btwritesleep1echo1 > /sys/class/rfkill/rfkill0/state # 上電echo1 > /proc/bluetooth/sleep/btwritesleep1insmod /usr/lib/modules/hci_uart.ko # 加載UART藍(lán)牙驅(qū)動(dòng)rtk_hciattach -n -s 115200 /dev/ttyS4 rtk_h5 & # /dev/ttyS4為藍(lán)牙UART口,波特率115200# 2. 啟動(dòng)hci0接口并查看信息hciconfig hci0 uphciconfig -a # 正常應(yīng)顯示BD Address、版本信息等# 3. 掃描周邊藍(lán)牙設(shè)備hcitool scan
(2)正基/海華模塊
# 1. 執(zhí)行初始化腳本(bt_pcba_test或bt_init.sh)/usr/bin/bt_pcba_test# 腳本核心操作(手動(dòng)執(zhí)行等效命令):killall brcm_patchram_plus1 # 關(guān)閉現(xiàn)有進(jìn)程echo0 > /sys/class/rfkill/rfkill0/state # 下電echo0 > /proc/bluetooth/sleep/btwritesleep2echo1 > /sys/class/rfkill/rfkill0/state # 上電echo1 > /proc/bluetooth/sleep/btwritesleep2# 加載藍(lán)牙固件,/dev/ttyS4為藍(lán)牙UART口,波特率1500000brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/bcm43438a1.hcd /dev/ttyS4 &# 2. 啟動(dòng)hci0接口并掃描設(shè)備hciconfig hci0 uphcitool scan
需注意,hciconfig命令依賴BR2_PACKAGE_BLUEZ5_UTILS配置,需在Buildroot中開(kāi)啟并編譯;藍(lán)牙固件需與模塊型號(hào)匹配,例如AP6212A1對(duì)應(yīng)BCM43430A1.hcd、AP6236對(duì)應(yīng)BCM43430B0.hcd。
四、問(wèn)題排查:90%的問(wèn)題都在這里解決
調(diào)試中遇到的問(wèn)題,大多可通過(guò)“看日志→查硬件→核配置”三步定位,以下是高頻問(wèn)題及解決方案。
1. Wi-Fi識(shí)別不到(SDIO接口)
現(xiàn)象:dmesg中無(wú)mmc0: new high speed SDIO card或mmcx: new ultra high speed SDR104 SDIO card日志。
排查步驟:
1.測(cè)電壓:用萬(wàn)用表測(cè)量VBAT/VCC_WL(3.3V)、VDDIO/VCCO_SDIO(1.8V/3.3V,SDIO3.0必須1.8V)、WL_REG_ON(1.8V/3.3V)的電壓是否正常,是否符合硬件設(shè)計(jì)要求。
2.查時(shí)序:用示波器測(cè)量VBAT、VDDIO、WL_REG_ON的時(shí)序,確保符合模塊規(guī)格書(shū)要求,以正基模塊為例,需滿足VBAT達(dá)到90% VH后,VDDIO啟動(dòng),再觸發(fā)WL_REG_ON,且需等待2個(gè)睡眠周期(32.768K時(shí)鐘)。
3.核DTS配置:
?檢查WL_REG_ON是否配置錯(cuò)誤:用示波器觀察其波形,若一直為低則DTS配置異常;若硬件直接拉高WL_REG_ON可識(shí)別,也說(shuō)明DTS配置錯(cuò)誤。
?檢查sdio_pwrseq與wireless-wlan是否重復(fù)配置WL_REG_ON,需刪除其中一處配置。
1.查SDIO_CLK波形:若SDIO_CLK無(wú)波形,需檢查IO電源域配置是否正確、CLK腳是否誤加上拉電阻(可去掉測(cè)試),示波器需設(shè)置正確觸發(fā)模式抓取波形。
2.32.768K時(shí)鐘:若日志出現(xiàn)dhdsdio_htclk: HT Avail timeout(正基/海華模塊),需檢查32.768K時(shí)鐘是否正常,其頻率精度需±30ppm、占空比30%-70%、信號(hào)幅值400-1800mVpp。
2. Wi-Fi能識(shí)別但wlan0 up失敗
現(xiàn)象:dmesg有SDIO識(shí)別日志(如mmcx: new ultra high speed SDR104 SDIO card),但ifconfig wlan0 up報(bào)錯(cuò)或無(wú)wlan0節(jié)點(diǎn)。
排查步驟:
1.固件匹配性:正基/海華模塊需確認(rèn)固件文件是否存在且與型號(hào)匹配,例如AP6255對(duì)應(yīng)fw_bcm43455c0_ag.bin、nvram_ap6255.txt,若日志出現(xiàn)dhdsdio_download_firmware: dongle image file download failed,則為固件缺失或路徑錯(cuò)誤。
2.電源穩(wěn)定性:若日志出現(xiàn)RTW: ERROR sd_write8: FAIL!(-110)(Realtek模塊),需檢查VCC_WL/VBAT/VDDIO_SDIO電源供電是否不足或紋波過(guò)大,可增加電容濾波。
3.驅(qū)動(dòng)沖突:檢查是否同時(shí)加載多個(gè)Wi-Fi驅(qū)動(dòng)(如bcmdhd.ko和88xx.ko),需卸載多余驅(qū)動(dòng);同時(shí)確認(rèn)內(nèi)核配置的buildin和ko模式是否沖突,只能選擇一種。
4.驅(qū)動(dòng)加載時(shí)機(jī):若日志顯示驅(qū)動(dòng)在1秒內(nèi)加載,可能因SDIO/USB設(shè)備未枚舉完成導(dǎo)致異常,需調(diào)整驅(qū)動(dòng)加載時(shí)機(jī),確保設(shè)備枚舉后再加載。
3.藍(lán)牙初始化失?。?/span>UART接口)
現(xiàn)象:hciconfig -a無(wú)hci0節(jié)點(diǎn)。
排查步驟:
1.查RTS/CTS接線:
?正基/海華模塊:需4線連接(host tx→controller rx、host rx→controller tx、host rts→controller cts、host cts→controller rts)。
?Realtek模塊:COB芯片需將host cts接地;RTL8822C需4線連接;模組若已內(nèi)部將controller rts接地,host cts無(wú)需額外處理。
1.核驅(qū)動(dòng)與固件:
?Realtek模塊需確認(rèn)hci_uart.ko(UART)或rtk_btusb.ko(USB)是否正確編譯,固件文件是否放在對(duì)應(yīng)路徑(UART:/lib/firmware/rtlbt/,USB:/lib/firmware/)。
?正基/海華模塊需確認(rèn)brcm_patchram_plus1工具是否存在,固件文件(如bcm43438a1.hcd)是否與模塊匹配。
1.核UART配置:確認(rèn)藍(lán)牙使用的UART口在DTS中已正確配置,且pinctrl配置的TX/RX/CTS引腳與硬件一致。
4. Wi-Fi連接不穩(wěn)定/吞吐率低
現(xiàn)象:頻繁斷線、ping延遲大、iperf測(cè)試速率不達(dá)標(biāo)。
排查步驟:
1.RF指標(biāo)驗(yàn)證:先完成RF測(cè)試(發(fā)射功率、EVM、晶體頻偏、接收靈敏度)和天線OTA測(cè)試,確保指標(biāo)合格,例如802.11b模式下11Mbps速率的接收靈敏度需≥-78dBm。
?正基/英飛凌模塊:需替換為測(cè)試固件(如AP6236對(duì)應(yīng)fw_bcm43436b0_mfg.bin),執(zhí)行external/rkwifibt/wifi_ap6xxx_rftest.sh腳本進(jìn)入測(cè)試模式,參考Wi-Fi RF Test Commands for Linux-v03.pdf進(jìn)行測(cè)試。
?Realtek模塊:COB芯片需與相關(guān)方合作進(jìn)行RF校準(zhǔn),模組需驗(yàn)證出廠校準(zhǔn)數(shù)據(jù),參考Quick_Start_Guide_V6.txt(Wi-Fi)和MP tool user guide for linux20180319.pdf(藍(lán)牙)測(cè)試。
1.環(huán)境干擾排除:在屏蔽室或地下室(干擾?。y(cè)試,若數(shù)據(jù)波動(dòng)仍大,需檢查PCB走線(SDIO_CLK/CMD/DATA)是否異常、電容電感是否符合要求,可適當(dāng)降低&sdio節(jié)點(diǎn)的max-frequency(如改為10M),若降頻后正常,則需優(yōu)化硬件時(shí)序。
2.CPU/DDR性能:將CPU和DDR頻率拉滿,避免降頻導(dǎo)致性能不足:
# DDR定頻(以1560MHz為例)echouserspace > /sys/devices/platform/dmc/devfreq/dmc/governorecho1560000000 > /sys/devices/platform/dmc/devfreq/dmc/min_freq# CPU定頻(以1992MHz為例)echouserspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorecho1992000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
同時(shí)可將dw-mmc中斷綁定到其他CPU核心,例如echo 5 > /proc/irq/38/smp_affinity_list將中斷放到CPU2執(zhí)行。
五、資源獲?。合嚓P(guān)資料與工具路徑
1.開(kāi)發(fā)文檔路徑:相關(guān)技術(shù)文檔位于SDK的docs/目錄下,例如:
?PCIe配置參考:
docs/Common/PCIe/Rockchip_RK3399_Developer_Guide_PCIe_CN.pdf、docs/Common/PCIe/Rockchip_RK356X_Developer_Guide_PCIe_CN.pdf、docs/Common/PCIe/Rockchip_Developer_Guide_PCIe_CN.pdf。
?USB配置參考:
docs/Common/USB/Rockchip_Developer_Guide_USB_CN.pdf。
?RF測(cè)試參考:
docs/linux/wifibt/目錄下的Quick_Start_Guide_V6.txt(Realtek)、Wi-Fi RF Test Commands for Linux-v03.pdf(正基/英飛凌)、BT RF Test Commands for Linux-v05.pdf(藍(lán)牙)。
總結(jié)
RK平臺(tái)Wi-Fi/BT調(diào)試的核心是“配置精準(zhǔn)+日志分析+硬件驗(yàn)證”:先確保DTS與原理圖匹配、內(nèi)核配置正確,再通過(guò)dmesg、hciconfig、wpa_cli等工具查看日志定位軟件問(wèn)題,最后結(jié)合電壓測(cè)量、時(shí)序分析、RF測(cè)試排查硬件異常。遇到復(fù)雜問(wèn)題,可優(yōu)先參考SDK文檔或相關(guān)FTP資源,大幅提升調(diào)試效率。
希望本文能幫你少走彎路,順利搞定RK平臺(tái)Wi-Fi/BT開(kāi)發(fā)!如果有其他問(wèn)題,歡迎在評(píng)論區(qū)留言討論~

-
嵌入式
+關(guān)注
關(guān)注
5198文章
20449瀏覽量
334123 -
wi-fi
+關(guān)注
關(guān)注
15文章
2424瀏覽量
129576 -
調(diào)試
+關(guān)注
關(guān)注
7文章
646瀏覽量
35673 -
RK3588
+關(guān)注
關(guān)注
8文章
556瀏覽量
7333
發(fā)布評(píng)論請(qǐng)先 登錄
一文搞定RK平臺(tái)Wi-Fi/BT調(diào)試!從配置到問(wèn)題解決全攻略
評(píng)論