Jarvis's Blog

白帽子、全栈、IoT安全专家、嵌入式系统专家

给NanoPi Neo Air WiFi模块更换为AP6234记录

NanoPi Neo Air是友善之臂推出的一款超小型创客板,只有40×40大小,且带有一个AP6212(BCM43430A0)wifi模块,由于这款产品十分小巧,所以还是挺受欢迎的,但可惜的是AP6212使用的芯片是BCM43430A0芯片,只支持2.4G频段,而且不支持Monitor模式,所以在使用中有诸多限制,于是笔者就想,既然AMPAK生产的系列模块大部分是pin to pin兼容的,我能不能自己直接把模块吹下来更换呢?

说干就干吧,我选择了AP6234这个模块,使用的芯片是BCM43340B0,支持2.4G和5G频段,40MHz带宽,且原生就支持抓包,感觉挺合适的。更换过程并没有什么阻碍,直接吹下来换上新的即可,换好如图:

然后我们开机,看看是否新的WLAN模块就能正常工作。然而,看上去显然不行ifconfig看不到新的interface,iw dev命令也看不到无线interface,真奇怪,难道焊废了,先看看日志再说:

dmesg | grep brcmfmac

日志是这样的:

...
[    9.506758] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43340-sdio for chip BCM43340/2
[    9.508450] brcmfmac mmc2:0001:1: Direct firmware load for brcm/brcmfmac43340-sdio.bin failed with error -2
[    9.508489] brcmfmac mmc2:0001:1: Falling back to syfs fallback for: brcm/brcmfmac43340-sdio.bin
[   11.325715] brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50
...

错误是这个:

Direct firmware load for brcm/brcmfmac43340-sdio.bin failed with error -2

哦,貌似是没有固件,看来原生的系统没有43340的固件,所以加载失败了,这样的话,我们去下载一个吧,我在这里找到了一份固件:

https://github.com/Asus-T100/firmware/tree/master/brcm

直接把brcmfmac43340-sdio.bin和brcmfmac43340-sdio.txt放到/lib/firmware/brcm即可,但是要注意一下,nanoPi Neo Air的晶振由于之前使用的是AP6212,晶振用的是26M的,但是AP6234的nvram里使用的是默认的37.4M晶振,所以nvram里面的xtalfreq那里得改成xtalfreq=26000才行。

到这里为止,如果用的frendlyELEC官方的固件(下载地址:
http://download.friendlyarm.com/nanopineoair )的话,重启应该就已经可以使用了。

但是后来想用armbian系统,用的mainline 4.19的内核,刷了armbian以后当我把固件放好之后,发现wifi模块还是不能正常工作。这次的日志是:

...
[    9.525618] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43340-sdio for chip BCM43340/2
[    9.767944] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43340-sdio for chip BCM43340/2
[    9.768199] brcmfmac mmc2:0001:1: Direct firmware load for brcm/brcmfmac43340-sdio.clm_blob failed with error -2
[    9.768221] brcmfmac mmc2:0001:1: Falling back to syfs fallback for: brcm/brcmfmac43340-sdio.clm_blob
[   10.384512] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-11), device may have limited channels available
[   10.386943] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43340/2 wl0: Oct 23 2017 06:52:26 version 6.49.22 (r674454) FWID 01-a9f55b00
[   20.520615] brcmfmac: brcmf_sdio_dpc: failed backplane access over SDIO, halting operation
[   20.856493] brcmfmac: brcmf_sdio_dpc: failed backplane access over SDIO, halting operation
[   21.192457] brcmfmac: brcmf_sdio_dpc: failed backplane access over SDIO, halting operation
[   21.528372] brcmfmac: brcmf_sdio_dpc: failed backplane access over SDIO, halting operation
[   21.865554] brcmfmac: brcmf_sdio_dpc: failed backplane access over SDIO, halting operation
...

奇怪,怎么就突然failed backplane access了呢,看到这一句貌似是固件已经加载成功了:brcmf_c_preinit_dcmds: Firmware: BCM43340/2 wl0: Oct 23 2017 06:52:26 version 6.49.22 (r674454) FWID 01-a9f55b00,成功读到了固件版本号,但是好像10秒钟之后,芯片就down了。

我以为是nvram的问题,所以又找了几个nvram试了一下,后来又尝试了另一个AP6234的nvram:

https://github.com/geekboxzone/mmallow_external_wlan_loader/blob/geekbox/firmware/nvram_AP6234.txt

这次的日志变成这样了:

...
[    9.521659] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43340/2 wl0: Oct 23 2017 08:41:23 version 6.10.190.70 (r674464) FWID 01-98d71006
[   39.433716] brcmfmac: brcmf_sdio_kso_control: max tries: rd_val=0x0 err=0
[   39.433900] brcmfmac: brcmf_sdio_txfail: sdio error, abort command and terminate frame
[   39.434023] brcmfmac: brcmf_sdio_txfail: sdio error, abort command and terminate frame
[   39.434134] brcmfmac: brcmf_sdio_txfail: sdio error, abort command and terminate frame
[   39.434214] brcmfmac: brcmf_sdio_dpc: failed backplane access over SDIO, halting operation
[   39.434227] brcmfmac: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/status -110
...

这次虽错误不一样了,但是wifi模块还是不能正常运行,后来网上找了半天,出现这个错误貌似是因为nvram里面的这一句引起的:

# Enable OOB interrupt: level trigger
muxenab=0x10

貌似是因为linux的驱动没有使用oob驱动,如果enable了oob就会导致芯片down,所以得注释掉这一句。然而注释掉以后还是没什么卵用,错误和之前的nvram一个样。真是有点坑爹,暂时不知道哪里的问题。由于frendlyELEC用的是自己修改过的内核:
https://github.com/friendlyarm/linux现在还没搞明白frendlyELEC自己修改过的内核和mainline的内核有什么区别,打算以后有空再仔细研究一下。

问题原因已经找到,解决方案大家移步新文章即可:《NanoPi Neo Air使用AP6234模块在armbian系统中异常原因分析

各类液晶显示器面板技术特点整理

上一篇

P106-100改显示接口翻车后记——之NVIDIA显卡vBIOS分析

下一篇
评论
发表评论 说点什么
还没有评论
5691
0

    浙公网安备 33011002014706号