背景介绍
我来分享分享Android驱动开发遇到的那些离谱的事情:龙迅LT8912B - MIPI转HDMI 之 调了两个月
怎么个事儿呢?我使用的CPU是广和通的SC806,平台是高通的msm8909. 芯片默认MIPI输出是好的,项目需要使用21.5寸的显示屏,很显然MIPI不能用了,所以就需要转成HDMI输出。事儿就是这么个事儿,接下来就说说我遇到的窝囊事儿。
BUG
这是个硬件BUG,最后发现是SC806控制LT8912B的IIC线接反了。
初识问题
msm8909平台,是基于Android7.1.2的。内核里面默认没有LT8912B的驱动。所以驱动文件是GIthub找的。对照龙迅提供的寄存器配置文件,发现寄存器没有可以直接使用,这样驱动就搞定了。作为一个驱动开发工程师,我自认为配置个设备树什么的还不在话下。所以,一切都搞定之后,开机上电,然后屏不亮。嗯,好的,应该的,毕竟第一次嘛。
于是我抓了LOG,发现满屏的LOG显示:
i2c-msm-v2 78b6000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:0 tx:2) mode:FIFO slv_addr:0x48 MSTR_STS:0x011363c8 OPER:0x00000090
调试过程
-
IIC不通首先想到的肯定是线路有问题嘛,所以,先简单凉了一下从顶板到地板LT8912B之间的线路通断。按照进度条来看,当然是,所有的线路是通的。好吧,那么下一步;
-
既然硬件没有问题,那就很自然的怀疑到软件身上了,于是在两个周以内我尝试了三板driver驱动:
- Github xxxShao(某shao)的驱动,具体名字没记住,哈哈哈;
- Google Android 8 原生的Lt8912B驱动;
- 我自己写的驱动
对的,事情如你看到的,以上都没有用。
-
于是,中间的一个月我被拉去干别的项目了(此处省略一万字)
-
(十年后)回来第一件事,量IIC的波形。重点来了, 我用示波器量了十来次波形,为什么要量这么多次?
发现问题
从波形来看,IIC状态是正常的,有数据发送SDA,有SCL波形,但是就是没有数据接收,难道这里也没有问题了?等等,我刚刚chanel几是CLK来着?我再量一遍,淦,这个SDA长得怎么那么想SCL?
所以事情明了了,就是SDA和SCK接反了。改过来之后,屏就OK了。
总结
测试:我们应该对研发有基本的信任!
硬件:硬件没问题了,软件先试试。出问题后……,啊,屏不亮,我先看看硬件问题,软件你先搞别的。
软件:测试手法问题吧,硬件接反了吧,我的软件不可能有问题。 |