第一个驱动的小过程 [LCD] --转载

作者:YiLi Xie(yili.xie@gmail.com)
日期:2010/04/07

欢迎转载,请注明出处

 

    首先要感谢程大胖给咱这次机会入门驱动,领导交待的任务嘛,有压力才有动力~~再次感谢公司可爱的同事们,对咱初始化过程的一堆幼稚问题总是耐心的给予解答,谢谢谢谢啦~~

     在此之前总是对驱动报着一种畏惧之心,不说别的,就是因为那电路图看不懂。。。在加上上学的时候数字电路课翘得太多,实验更是没做过,想想现在连做个网线的水晶头都不会。。往事不堪回首阿 - -! 闲话就不多说了,写这篇文章的目的是想那些很多和我一样,在驱动方面是空白的同志们能找到一个出发点,如何在最短的时间内入手驱动~~呵呵,自己也算是总结一下,不过毕竟是粗浅之言,还请高手路过多指教~~

 

     任务 : 板子boot起来以后一天时间内点亮屏;

     MPU : MSM7627

     平台 : android

     IC    : RM68040

 

     当对你要做的事情完全陌生的时候,最大的障碍就是你不知道要完成这项工作你必须做什么。在我调这个屏之前我在驱动上的基础知识就是老宋那本书的前4章,那真是如履薄冰心里一点底都没有啊。。。在网上一顿海搜以后,我当时是这么想的,让一个一屏亮起来就是让一个硬件工作起来,那么了解这个硬件肯定是必须的,肯定要知道什么样的条件下它才能工作起来,而且这个屏幕肯定需要MCU来控制,那MCU如何来控制它呢?所以你就必须了解这块MCU芯片,所以就从了解这些硬件开始。

     那么如何了解这些硬件知识呢,那就是芯片的datasheet了~~ 芯片的datasheet一般都是又臭又长,说出来被人笑话,我当时看这些datasheet那是正儿八经从头到尾一字不那啊。。。后面总结了下个人觉得芯片资料里面最重要的就是pin脚,时序,寄存器~~ 

     第一个看的是Driver IC的datasheet,看完pin脚的描述以后就对着原理图,看它都连了哪些线,而这些线都是做什么用的,具体到LCD驱动,看完datasheet以后你就大致知道,要让这个硬件工作起来需要完成什么样的工作了。具体到我这块屏,就是首先必须使用SPI来发命令初始化,然后其他HSYNC VSYNC MARGIN PCLK之类的信号正确的话应该就能显示图象了。于是呼又是网上一阵海搜,了解了SPI是一个啥东西,它就是有个特定时序的串行总线罢了~~

     这个时候不必着急,可能有些概念你还只是停留在概念上,很飘渺,不知道具体是一个什么东西,怎么回事,没关系能google.com理解下来的就理解,理解不了的就放着,等以后看完代码就会形象起来了,关于如何寻找自己应该看的那部分代码我待会再说~~ 

      了解完LCD之后下一步就是了解MCU如何来控制这块屏了,拿出主芯片的datasheet,很容易就找到关于LCDC,MDP(图象处理器)之类的东西。结合着datasheet再加上google.com你很容易就知道了解这些控制器是如何控制这块屏的。可能细节上你还不了解,不过最起码你能将这么一个过程串起来,就是从MDP到LCDC到LCD他们之间的一个流程,data flow之类的,然后带着这么一个过程去看代码是很有裨益的~~

      到这里你对硬件以及原理图已经有了一个基本的理解,下一步就是对着代码看实现的过程,让在datasheet上碰到的一些生疏的概念都具体起来。我的环境是linux,就说说我如何去寻找我需要的代码。

      在linux环境下,makefile是编译的灵魂,所以你必须对kernel的编译机制有一个了解,这样你才能比较准确地找到你需要的代码,linux kernel的编译说穿了就是根据Kconfig确定你需要编译进去的模块。对kernel的编译了解以后,你很容易就根据config文件在driver/video里面找到你需要的代码。

      找到你需要的代码以后,你现在的任务就是看懂它了,以前从来没有看过linux内核的代码,那么从什么地方开始下手呢?最简单的你就会想到你的驱动是如何被调用的呢?所以简单地分为两点,一个就是你要弄明白你的驱动是如何被kernel使用的,另外一个就是你的驱动是如何和硬件打交道的。对于第一个问题你需要简单了解linux kernel启动的过程(如果有时间的话最好是把startkernel()这个函数仔细阅读一遍),根据startkernel()你基本就知道了,device和driver是如何被使用的。然后第二个问题你就必须对驱动本身的框架有所了解了,在这里我们就必须对FB有所了解,稍微了解以后你去看代码会比较方便。要想知道驱动是如何控制硬件的,那你的着眼点应该是数据流的流向,然后对寄存器的配置。对数据流的流向集中在几个比较重要的数据结构上,一定要弄明白,你才知道在框架的什么地方去配置你的寄存器~~~

      到具体的调试硬件,需要掌握两个工具的使用,万用表测量电压是否正常,示波器测量产生的波形是否正确~~可惜咱现在示波器还是不太会用- -!这个调试过程应该是比较痛苦的,具体就不说了,调试的时候自然就知道了~~

      稍微总结下一个硬件要工作起来需要的工作~~

      1、供电正常      2、时钟正常  3、寄存器配置正确(初始化)

      基本就是这些了,呵呵,粗略讲了下解决这个驱动的过程,希望对从没做过驱动的人有所帮助~~ 事后想想,驱动不是想象中高深,只要静下心来,硬着头皮看datasheet和代码,多google.com,应该都是没有问题的~~

posted on 2018-08-15 13:10  lucelu  阅读(72)  评论(0编辑  收藏  举报

导航