Linux驱动工程师成长之路(4)

老大说了,下周新的手机要回来了,用的是400*800的屏,到时候就由我来调这个屏了。把屏的spec和背光的spec都给了我让我先看看。

以前分析了LCD(framebuffer)的驱动框架,但是对于背光还没有分析过,其底层到底是怎么工作都不知道。看了两天其间总是不能理解它是怎么工作的,到现在总算有了点感觉。

背光和LCD屏是两个独立的设备。背光也就是放在LCD屏后面的几个LED,LCD模组厂商将他们集成到一个块,从屏那一堆引出的管脚里面就有几个是led的,如果将这几个相应的管脚接上正负极那背光就亮了。如何来调节这个背光的亮度呢?通过pwm,也就是时而上电时而断电,上电的时间越多(占空比)也就是越亮。这很容易理解。为了帮助我们控制背光我们这里用了一个芯片RT9379B。从它的spec的 Typical Application Circuit可以看出 从它的EN管脚输入pwm,然后它的LED管脚也就相应的输出pwm去控制屏上的led。

疑惑一:

一开始我认为需要在EN端不断的输入pwm,LED端才相应不断的输出pwm,但是从代码控制上来看,代码总是在输出了几个设置背光的pulse之后就不再向EN输入pulse了。我当时就想不明白,为什么只输出几个pulse呢?死活想不通,去问了人,模模糊糊的知道了,原理在设置背光的时候只需要输入你想要设置的等级的pulse个数,比如你要设置8级背光,就输入8个pulse,10级就输出10个pulse。这样之后芯片也就知道你所想要的等级了,它就会自动去输出相应的pwm到屏上的led中。说得也是,如果不是这样还要你这个芯片干什么呢,我直接用io管脚模拟pwm不就得了。

疑惑二:

从代码控制上,背光越亮发送的pulse越少,从手机的实验结果也是这样。而我以前想当然的认为发送的pulse越多应该越亮。从spec上也没有读出来如果控制亮度。从spec的Brightness Control里面有一句话是“the detail operation of brightness dimming is showed in the figure 1”看了头天figure 1也都没看出来它表达个什么意思。后来和同事讨论一下终于明白它什么意思了。它的这个背光亮度分为32个等级,从那个时序图上可以看到脉冲1下面对应的就是31/32,脉冲2下面对就的就是30/31,这样对应起来也就懂了,呵呵。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwfpxp.html