全志平台ap6476 wifi模组调试(3)调试&异常处理
1. 前言
前面两篇主要是环境搭建和驱动修改之类的;
这篇主要是具体的调试遇到的一些问题
2.网口wlan0能注册上但无法up起来
系统启动时bcmdhd驱动成功被加载,wlan0和p2p0网口均能成功注册上,但把wlan0网口up起来或打开wifi均是失败。
[ 64.296458] Dongle Host Driver, version 1.28.23.3 (r)
[ 64.296465] Compiled in drivers/net/wireless/bcmdhd on Jul 3 2013 at 15:07:20
[ 64.311787] wl_android_wifi_on in
[ 64.315518] dhd_customer_gpio_wlan_ctrl: callc customer specific GPIO to remove WLAN RESET
[ 64.324760] [ap6xxx]: succeed to set gpio ap6xxx_wl_regon to 1 !
[ 64.430680] [ap6xxx]: sdio wifi power state: on
[ 64.435739] =========== WLAN going back to live ========
[ 64.441753] sdio_reset_comm():
[ 64.445181] [mmc]: sdc1 set ios: clk 50000000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 64.457550] [mmc]: sdc1 set ios: clk 50000000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS (SDR25) dt B
[ 64.468912] [mmc]: sdc1 set ios: clk 150000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 64.534760] [mmc]: sdc1 set ios: clk 150000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 64.546516] [mmc]: sdc1 set ios: clk 150000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 64.558867] [mmc]: sdc1 set ios: clk 150000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 64.569244] [mmc]: sdc1 set ios: clk 50000000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 64.634274] [mmc]: sdc1 set ios: clk 50000000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 64.646225] dhd_bus_devreset: == WLAN ON ==
[ 64.654486] dhd_bus_devreset called when dongle is not in reset
[ 64.661273] Will call dhd_bus_start instead
[ 64.666320] bcmsdh_config_hw_oob_intr: Enter
[ 64.671677] dhd_bus_select_firmware_name_by_chip: firmware_path=/system/vendor/modules/fw_bcm40181a2.bin
[ 64.682821] Final fw_path=/system/vendor/modules/fw_bcm40181a2.bin
[ 64.689987] Final nv_path=/system/vendor/modules/nvram_ap6476.txt
[ 65.724009] [mmc]: wait r1 rdy 1000 ms timeout
[ 65.728974] sdioh_request_packet[mmc]: wait r1 rdy 1000 ms timeout
[ 66.727500] sdioh_request_bytebcmsdh_sdmmc: Failed to Write byte F1:@0x1000a=00, Err: -5
[ 67.734011] [mmc]: wait r1 rdy 1000 ms timeout
[ 67.738971] sdioh_request_bytebcmsdh_sdmmc: Failed to Write byte F1:@0x1000a=00, Err: -5
[ 68.744002] [mmc]: wait r1 rdy 1000 ms timeout
[ 68.748969] sdioh_request_bytebcmsdh_sdmmc: Failed to Write byte F1:@0x1000a=00, Err: -5
问题分析:
1、驱动代码的问题?
出错log是sdio数据的读写超时,wifi得不到数据,像是sdio I/O电压不对或wifi模组的sdio数据线与主控相连走线不记引起。
2、模组电源和wifi的使能脚的问题?
用万用表量了模组是已经有1.8V的电压,在wifi打开时wifi的使能脚也被拉高至1.8V,应该就不是电源问题。
3、SDIO I/O电压问题?
由于ap6476仅支持1.8V的I/O电压,现在是把VCC-PG的电压调成1.8V,以便达到mmc1和uart2的I/O电压是1.8V,实测SDIO I/O为1.8V。
结论如下:
做了以上排查后仍找不出原因,初步的定位是硬件问题,但不知具体问题出在哪,之前调试遇到过网口能up起来,但是没扫到任何的ap,这是由于实现使用的晶振频率和配置的晶振频率不一致,用万用表量模组的30脚TCXO_IN电压,是有0.6V电压,代表晶振已经在工作。
后来用示波器确认晶振的clk是否为26MHz,却发现clk的波特不’干净’,像似两个晶振源叠在一起。
再量主控的24MHz晶振源的clk波形,很稳定,就开始检测电路是否有问题,最终发现是有两个晶振源在给模组提供26MHz的时钟,一个有源的26MHz晶振源和一个振荡电路源,clk导致sdio通讯异常了。
解决办法:
ap6476需要有源的晶振源,把振荡电路源去掉,wifi就可以正常跑起来
3. 休眠唤醒后wifi无法工作
问题:打开wifi连接上ap,系统进入休眠,唤醒后wifi扫描列表只显示原已连接过的ap
[ 299.752967] [DISP]>>disp_resume call<<
[ 299.763071] sun6i-rtc sun6i-rtc: sun6i_rtc_gettime
[ 299.763087] sun6i-rtc sun6i-rtc: read time 2013-7-13 10:8:7
[ 299.763268] [mmc]: *** sw_mci_update_clk(L234): update clock timeout, fatal error!!!
[ 299.763301] [mmc]: smc 1 resume
[ 299.763446] [audio codec]:resume start
[ 299.763465] [audio codec]:resume end
[ 299.763692] [rfkill]: rfkill set power 0
[ 299.763712] [ap6xxx]: succeed to set gpio ap6xxx_bt_regon to 1 !
[ 299.783329] gpu:open gpu power!
[ 299.803167] PM: resume of devices complete after 60.901 msecs
[ 299.803375] PM: resume devices took 0.070 seconds
[ 300.267266] [pm]aw_pm_end!
[ 300.270277] PM: Finishing wakeup.
[ 300.273984] Restarting tasks ... done.
[ 300.286721] sunxi cpufreq resume ok
[ 300.290672] suspend: exit suspend, ret = 0 (2013-07-13 10:08:07.527585625 UTC)
[ 300.293376] request_suspend_state: wakeup (3->0) at 300280427822 (2013-07-13 10:08:07.530289083 UTC)
[ 300.309042] [HDMI]Hdmi_late_resume
[ 300.309379] [DISP WRN] file:drivers/video/sun6i/disp/de_bsp/de/disp_layer.c,line:363: all layer resource used!
[ 300.310713] bcmsdh_sdmmc: Failed to Write byte F1:@0x1000e=10, Err: -123
[ 300.311737] bcmsdh_sdmmc: Failed to Write byte F1:@0x1000e=10, Err: -123
[ 300.312753] bcmsdh_sdmmc: Failed to Write byte F1:@0x1000e=10, Err: -123
[ 300.312768] dhdsdio_htclk: HT Avail request error: -35
[ 300.312810] sdioh_request_packet: TX FAILED e9ae83c0[0], addr=0x08000, pkt_len=128, ERR=-123
[ 300.312868] bcmsdh_sdmmc: Failed to Write byte F0:@0x00006=02, Err: -123
[ 300.312891] bcmsdh_sdmmc: Failed to Write byte F1:@0x1000d=02, Err: -123
[ 300.313909] bcmsdh_sdmmc: Failed to Write byte F1:@0x1000d=02, Err: -123
[ 300.314933] bcmsdh_sdmmc: Failed to Write byte F1:@0x1000d=02, Err: -123
问题分析:
这是个极难复现的问题,有时测试上一两天均没发现,由出错的log看,是数据通讯失败,mmc向wifi端发送cmd无响应,错误代码123是no media的意思,wifi设备不存了?
估计是wifi的firmware跑挂了,从而无法响应mmc的cmd,这与wifi驱动无多大关系,主要是firmware的影响。
问题解决:
更新broadcom firmware解决
4.wifi高级选项中的”永不”和”仅限充电”不生效
问题:
wifi高级选项中选择”永不”,系统进入待机30分钟后,通过RTC把系统唤醒然后把wifi关闭系统再进入休眠;wifi高级选项中选择”仅限充电”,在系统待机时没充电的话,也会在系统待机30分钟后,通过RTC把系统唤醒后把wifi关闭系统再进入休眠,这两个选项是为了让系统更省电。
但现在问题选择上”永不”或”仅限充电”均是没能wifi关闭的。
问题分析:
1、android代码实现的是通过RTC把系统唤醒,现在发现是系统没被唤醒进而导致wifi没被关闭。
2、RTC唤醒是通过RTC_WAKEUP向系统注册一个唤醒定时器,在指定的时间后把系统唤醒,但AW的平台为避免被一些应用程序通过RTC不定时唤醒系统导致功耗增大,不支持RTC_WAKEUP命令,因而系统无法被唤醒。
问题解决:
把WifiService.java mReceiver广播接收变量和WifiStateMachine.java DriverStartedState类中RTC_WAKEUP改成AW平台新增加的RTC唤醒休眠系统的RTC_SHUTDOWN_WAKEUP即可。
5.休眠唤醒后wifi报扫描异常
问题:
在wifi打开连接上ap并在高级选项中选择wifi的休眠策略是”永不”,蓝牙打开连接上蓝牙耳机的情况下,系统进入休眠1小时左右,通过蓝牙耳机听歌把系统唤醒,然后手动把屏幕点亮,发现wifi驱动会报扫描异常。
[28571.137136] CFG80211-ERROR) wl_scan_timeout : timer expired
[28571.143838] CFG80211-ERROR) wl_escan_handler : WLC_E_STATUS_TIMEOUT : scan_request[eea62000]
[28571.154033] CFG80211-ERROR) wl_escan_handler : escan_on[1], reason[0xffffffff]
[28571.173293] CFG80211-ERROR) wl_escan_handler : escan is not ready ndev ee83d800 wl->escan_on 1 drv_status 0x0
[28581.137165] CFG80211-ERROR) wl_scan_timeout : timer expired
[28581.143847] CFG80211-ERROR) wl_escan_handler : WLC_E_STATUS_TIMEOUT : scan_request[ee9cf600]
[28581.154309] CFG80211-ERROR) wl_escan_handler : escan_on[1], reason[0xffffffff]
问题分析:
wifi的扫描更新请求得不到回应或回应超时,估计是wifi的状态,跟了一把驱动代码,觉得还是跟wifi firmware相关。
问题解决:
更新broadcom firmware解决
- 分享
- 举报
-
浏览量:8339次2021-01-20 17:16:00
-
浏览量:6208次2021-01-15 17:26:20
-
浏览量:6922次2021-01-22 15:28:47
-
浏览量:7122次2021-01-16 14:52:44
-
浏览量:8353次2021-01-20 17:04:49
-
浏览量:6912次2020-11-26 17:02:47
-
浏览量:2230次2022-07-09 08:47:55
-
浏览量:10272次2020-11-26 15:59:29
-
浏览量:4235次2020-09-23 19:01:05
-
浏览量:8407次2020-11-26 14:22:19
-
浏览量:10142次2021-01-22 16:07:20
-
浏览量:11313次2020-12-16 19:13:45
-
浏览量:10989次2020-12-16 18:56:54
-
浏览量:1942次2020-12-30 16:54:40
-
浏览量:5193次2021-07-09 15:23:33
-
浏览量:7963次2021-01-08 15:04:53
-
浏览量:6504次2021-01-08 15:16:17
-
浏览量:6185次2021-04-20 16:37:57
-
浏览量:5568次2021-04-12 16:15:46
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
free-jdx
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明