站長網(wǎng)站提交職業(yè)技能培訓(xùn)平臺(tái)
調(diào)試前
WiFi常見的通信接口:PCIE、SDIO、USB。
BT?常見的通信接口: UART、SDIO、USB。
模組廠商提供:
(1)固件(用來控制模組硬件行為);
(2)模組驅(qū)動(dòng)源碼(SDK 一般會(huì)提供常用的 WiFi 模組驅(qū)動(dòng)源碼,沒有的需要找模組廠商)。
WiFi 模組識(shí)別流程
SDIO 接口
開機(jī)時(shí)kernel MMC框架會(huì)去識(shí)別SDIO 卡,首先會(huì)去解析dts里面的sdio_pwrseq節(jié)點(diǎn)的reset-gpios屬性配
置的GPIO,也就是WL_REG_ON然后拉高它,并通過SDIO_CLK/CMD/DATA發(fā)初始化指令給模塊。
首先SDIO_CLK會(huì)以400/300/200K的低頻給WiFi模塊發(fā)命令,獲取WiFi SDIO基本的信息。比如SDIO2.0(CLK最大50M)還是3.0 (CLK最大208M)、支持4線還是1線等信息,然后根據(jù)支持的規(guī)格提高SDIO_CLK頻率到相應(yīng)的高頻50M/150M,到這一步初始化基本完成。
# 注意 mmc0: 0的數(shù)字是不固定的,也可能是0/1/2; ff4a0000:表示控制器的地址,不同平臺(tái)也是不一樣的
# 解析dts的mmc-pwrseq節(jié)點(diǎn),獲取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接口
這兩個(gè)接口識(shí)別過程比較復(fù)雜,當(dāng)識(shí)別完成后,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)
調(diào)試思路
拿到模組后,總體調(diào)試思路如下:
(1)硬件檢查:確認(rèn)模組供電、接口(SDIO/USB/PCIe)、時(shí)鐘信號(hào)、天線連接正常。
(2)設(shè)備樹/內(nèi)核配置:驗(yàn)證接口控制器、GPIO、 復(fù)位/中斷引腳配置正確。
(3)驅(qū)動(dòng)加載與固件:確保驅(qū)動(dòng)匹配模組,固件正確加載(/lib/firmware/)。
(4)模組識(shí)別狀態(tài):調(diào)試 PCIE /USB 接口 WiFi 模組時(shí),首先還要 lspci/lsusb 確認(rèn) PCIE 是否識(shí)別到模塊。
(5)連接與網(wǎng)絡(luò)驗(yàn)證:?AP 掃描網(wǎng)絡(luò)、wpa_supplicant連接網(wǎng)絡(luò)。
藍(lán)牙總體思路類似,DTS 配置更簡單,使用什么通信接口就配置什么接口,比如 UART,那 DTS 只需配置 UART 即可。
排查思路
重要:務(wù)必先看log,根據(jù)log的異常進(jìn)行排查!!!
WiFi/BT大概分為3類問題:
(1)SDIO/USB/PCIE設(shè)備識(shí)別不到;
(2)識(shí)別到SDIO卡,但firmware加載失敗;
(3)性能問題,連不上/掃描個(gè)數(shù)少/概率斷開等等;
具體步驟以及更多排查手段可以參考各 soc 廠商的開發(fā)文檔。
歡迎關(guān)注“嵌入式分享”,持續(xù)更新!