解决RK3328 RealTek 8822CS检测不到WIFI模块问题

前言

在rk3328的Android9.0版本中采用新的wifi芯片realtek 8822cs时出现检测不到WIFI模块的问题,咨询rk之后扔未解决,经过3天的排查尝试终于找到问题的原因,现将问题原因及解决方案记录下来,以便通道中人能避免或者解决此问题。

Kernel: v4.4.179

Device: rk3328

Platform Version: Android 9.0

出现的问题

前期kernel的dts配置可以参考rockchip提供的wifi配置文档Rockchip_Introduction_Android9.0_WIFI_Configuration_CN.pdf

按照上面文档中描述,识别流程如下:

1

开机会对wifi模块上电,并自动进行扫描sdio操作。如果WIFI模块识别成功会在dmesg中抓到如下日志(注意前面的内容可能不同,但红框内是一样的):
1

问题就出在这里,始终抓不到这条日志,那也就意味着,模块并未被扫描到。

解决的过程

  1. 首先先排查dts和原理图能不能对应上,配置的对不对(经过详细对比,并没有错)
  2. 然后仔细阅读文档、网上搜索以及咨询rk都没找到原因。
  3. 猜测是不是供电问题, 导致这WIFI芯片根本就没起来,通过示波器测量WIFI引脚,但经过测量是有供电的,但又有一点怀疑是不是电压不够。基于这个怀疑,仔细阅读8822s的datasheet,发现一个可疑的地方。
    1
    1
    datasheet中写的是1.8V和3.3V根据SDIO协议定,SDIO协议又有3个,参考rk的另一个文档Rockchip_android7.1_wifi_配置明V1.6.pdf
    1
    也就是说SDIO3.0,是1.8V,SDIO是3.3V, 又看了一下8822cs的datasheet。
    1
    默认写的是1.8V, 也就是默认已经建议使用1.8V了。
    回去又看了一眼我们板子的原理图,硬件把它给成了3.3V, 并且不止这一个引脚,都给的3.3V, 而且把它给定死了。。。,这怎么搞?
    想通过手动写寄存器把电压改成1.8V, 但不可行,放弃。
    既然都是3.3V,理论上它也应该自己就切换到SDIO2.0啊,但它就是不行,你说气人不?陷入僵局,让硬件改板子把电压调成1.8V? 更不可行(重做板子要成本啊,而且这个芯片我们第一次用,都不知道能不能驱动起来,万一改了板还是驱动不起来,那就。。。。搞得人挺崩溃)

解决的方法

又重新查资料看看到底怎么回事?找到一个rk的Android7.0的SDIO的配置文档Rockchip SDMMC SDIO eMMC 开发指南 V1.0-20160630.pdf
1
最要命的就是这条其实写的也是太清楚,但最终确实靠它解决了。


将dts中的这条删除掉,一切OK了,自己切换到SDIO2.0了。


我觉得他应该再加一句,如果只使用SDIO2.0,不要加这句。因为我很早就看到这一句了,但未意识到它才是解决问题的关键。

反思

一个问题排查了挺长时间,结果解决它的最后只有一句话。同时也提醒自己,写文档的时候,尽量写清楚一点,哪怕多一句废话都成,但如果别人看不明白,会给不知道的人造成很大的麻烦。

转载请注明出处:http://www.wolfnx.com/2020/02/13/Rk3328-Android9.0-RealTek-8822CS

作者 : wolfnx
邮箱 : wolfnx@outlook.com
邮箱2 : lostnx@gmail.com

Click Me