LCD/HDMI OUT调试经验(7)------I2C与显示问题总结

本篇文章将列举入职以来调试各种项目中遇到的I2C与显示的问题并给出解决方案,大多数比较难找到原因的问题不太会碰到,但是也可以借此对I2C与显示了解更深入。

关于解决方案只是提供错误原因和代码与配置的修改,具体更细致的原因请各位自己根据具体情况了解清楚。

 

一、I2C调试问题

(1)I2C不通

a.检查上电

当你配置好设备树并且添加驱动上电,运行驱动发现I2C读写失败后,首先应该先量配置的引脚的电是否都有,自己量时需要对照位号图和原理图确定位置,这里教一下如何确定机器引脚位置:

6ad0b9dd30e94ce18fdc93c01df05a84.png

以这VCC 3v3的引脚为例,首先找到原理图需要测量的引脚,并找到与之直接连接的电阻或者可测量点,如上图的2k电阻R0734,接下来打开位号图,搜索R0734:

3750ccd7d23b4697bf71852aeb96be9c.png

再缩小查看电阻大概位置:

7a2f14dceff340b2b4dddd781ab3115d.png

在机器上找到这个位置的电阻测量即可,如果电压正常那可以去测量其他引脚。第一次测量可以让硬件帮着一起定位。

另外,对一些上电时序要求高的芯片需要严格按照数据手册来配置时序,否则也会导致I2C不通。

 

b.检查I2C地址

在设备树中找到配置的I2C地址:

b1466b1b1b18495d9dec07c758d0d8f3.png

 或者在驱动中加入打I2C地址的log信息:

f32a2b70e8e546b9b386dd2c0a60a5bf.png

 也可以找到原理图的I2C的SDA线量开机信号,并根据SCL信号判断地址是否正确,这里给出其中一副I2C地址波形图:

3f502be5923c482d8407ba5c20f3a9a3.png

 请先掌握I2C协议再来读I2C波形,具体的起始位读写位停止位就不再这里赘述。

 

c.检查I2C的qupv

在BP的权限文件中将芯片所用的I2C两个GPIO配置成I2C并且其他参数根据项目需求配置;在设备树中去掉其他引用这两个脚的节点或者内容,比如在Linux中搜索"tlmm 34"或者"gpio34"等,避免其他驱动占用;另外,在驱动中可以添加循环来拉高拉低SDA与SCL看是否这两个脚可控,在开机时量波形进行检查。这里不再给出具体示例,结合提交记录以及之前讲述内容可以自己尝试。

I2C完全不通的情况我只遇到过这几种情况,如遇其余情况请自己总结。

 

(2)I2C通,但有个别读写错误

这类问题常常是I2C信号有干扰造成,而我总结下来干扰分为主动干扰与被动干扰,被动干扰是其余芯片的I2C通信时对你所调试的I2C有干扰,有时也是因为I2C的布线太长导致信号变弱,这些都是硬件上的问题需要配合硬件一起解决。主动干扰即自己造成的干扰,一般是I2C读写速率太高和驱动能力太低,我们通常默认读写速率为400Khz,驱动能力为2,但调试出现问题时可以尝试降低速录,提高驱动能力:

比如在845平台的设备树文件sdm845-qupv3.dtsi中找到自己需要配置的se组添加以下内容改变速率为100Khz:

201386a7f82042a7a23508891cbde72f.png

 注意这里的status不需要修改为ok,驱动会解析到这里。

在pinctrl文件中修改I2C的驱动能力:

7b0b84e7bb814dbbb367ab03818bae3a.png

 驱动能力最大为16,这里我改成了6。

以上是我调试I2C遇到的主要问题,其他的一些比较偏,比较怪的问题一般不会遇到,请调试时自己多尝试与理解。

 

二、显示问题

(1)模块端的判断

在I2C通了之后有时候也不一定能正常显示,但是I2C一通芯片的寄存器已经可以正常读写数据了(即初始化以及OK),只是输入MIPI信号或者输出的显示信号有问题。首先还是量信号定位问题,在模块端先量MIPI信号是否发出,请自行在原理图上找到MIPI信号测量点用示波器测量,或者找硬件同事帮忙,一般MIPI信号是这样的:

2a902d360bbc418996cc1ef7fae2d029.png

 因为没存图所以用了比较密集的MIPI信号图片,放大MIPI信号其实可以看到比较规律的波形,可以自己试试量一下调出画面的模块的MIPI信号看看。

.如果模块没有出来MIPI信号,说明你屏幕配置得有问题,需要定位到BP和AP选择显示屏幕的配置文件,比如在BP的panel文件中是否加了xml文件,在MDPPlatformLib.c文件中逻辑代码是否加对了,通过串口看打印出来的log以及resolution是不是你配置的分辨率;在AP的sde设备树文件中是否加了你配置的屏幕以及default是否选择正确,这些在之前的配置LCD与9211的时候介绍过,这里也不介绍了。

 

(2)转换芯片前的判断

在转换芯片之前,即芯片的MIPI输入端测量MIPI信号,如果没有信号说明从模块端到芯片端的电路有问题,请找硬件帮忙解决。

 

(3)转换芯片后的判断

如果在模块段与芯片输入端都有MIPI信号的输入,而芯片输出端没有信号,这就需要配合供应商一起解决了,一般龙迅的芯片都会有自测模式,即只需要给芯片上电就能显示一些画面来保证芯片内部是正常工作的。

04f598faff2e4cb390d73910600f37bb.png

 在9211驱动中有这样一个函数,它在这分两步走:正常模式和自测模式,如果定义了VIDER_PATTERN这个宏就会进入自测模式,这时候你可以加这个宏判断芯片是否正常运作;一般打开后如果正常,会显示一些条纹画面,如下图:

e8c93eb224b648758d77611aca22c80f.png

 如果没有显示请联系供应商一起解决。

如果有显示,可以把转换芯片的串口接出来,看一下芯片的运行状态,将log信息打出来与供应商一起分析解决即可。

 

三、DP调试

最后简答介绍一下DP的调试,DP全称为display port,接口线的一端为USB接口另一端为HDMI接口,这方面调试过一次而且我调的比较简单,就简单说一下配置:

根据高通官网文档,在sde设备树中添加aux的gpio控制:

d08063afe49e43a7877130393001d45e.png

 在pinctrl中添加对应脚的节点:

9446f5bf9a964da183b8489bae54e83e.png

 另外如果其他pinctrl如果有占用也需要去掉。

最后如果根据高通文档这样调试还是显示不出来,查看log寻找原因发现会报错,但是这边不影响显示所以把报错去掉即可,找到dp_aux.c的文件去掉以下内容:

5015282dd074403db817f3daf67a5cb4.png

 这样编译运行后即可显示,因为调试经验不多且没遇到其他问题,所以这方面请各位自行总结。

 

四、总结

本篇文章主要是介绍I2C调试的一些问题以及I2C通后仍然不显示的问题,其实不光是显示类的芯片,在所有需要用到I2C的芯片中都可以参考这些总结,显示方面的问题一般与供应商一起解决后就差不多了,最后的DP也是简单介绍了一下,因为调试经验不多所以只说了操作步骤,最后还是需要大家自己独立完成各种调试任务。

 

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值