前言
在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
按照上面文档中描述,识别流程如下:
开机会对wifi模块上电,并自动进行扫描sdio操作。如果WIFI模块识别成功会在dmesg中抓到如下日志(注意前面的内容可能不同,但红框内是一样的):
问题就出在这里,始终抓不到这条日志,那也就意味着,模块并未被扫描到。
解决的过程
- 首先先排查dts和原理图能不能对应上,配置的对不对(经过详细对比,并没有错)
- 然后仔细阅读文档、网上搜索以及咨询rk都没找到原因。
- 猜测是不是供电问题, 导致这WIFI芯片根本就没起来,通过示波器测量WIFI引脚,但经过测量是有供电的,但又有一点怀疑是不是电压不够。基于这个怀疑,仔细阅读8822s的datasheet,发现一个可疑的地方。
datasheet中写的是1.8V和3.3V根据SDIO协议定,SDIO协议又有3个,参考rk的另一个文档Rockchip_android7.1_wifi_配置明V1.6.pdf。
也就是说SDIO3.0,是1.8V,SDIO是3.3V, 又看了一下8822cs的datasheet。
默认写的是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
最要命的就是这条其实写的也是太清楚,但最终确实靠它解决了。
将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