微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AM335x(TQ335x)学习笔记——LCD驱动移植

AM335x(TQ335x)学习笔记——LCD驱动移植

时间:11-28 来源:互联网 点击:
TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示。下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路。

(1)初步分析

由于TQ335x使用的芯片是AM335x,故仍然可以参考am335x-evm.dts。当然,am335x-evmsk.dts、am335x-beagbone.dts都可以。本文以am335x-evm.dts为例。大体上浏览下DTS文件,可以发现两个醒目的节点:一个是panel,一个是backlight。接下来我们逐个分析。

(2)panel节点信息分析及配置

从panel节点可以获得如下信息:

  1. 1.匹配内核驱动的关键词是:"ti,tilcdc,panel",可以通过这个关键字找到相应的驱动。
  2. 2.管脚配置在节点lcd_pins_s0内
  3. 3.panel-info中可以配置LCD的硬件信息,如LCD的分辨率等
  4. 4.display-times中记录了LCD刷屏的相关时序。

其中,panel-info和display-times需要去LCD手册中查找,管脚配置需要根据AM335x的芯片手册、数据手册及TQ335x的原理图确定,驱动则需要去内核的driver目录下查找。下面,我一一解决上述几个问题:
首先是设置panel-info和display-times。我的TQ335x是用的我调试TQ210时使用的触摸屏,型号是TN92,这个屏是800*480的分辨率,因此,panel-info与evm开发板的配置是相同的,可以不做任何修改。但是,不同屏幕的display-times一般是不相同的,因此,需要查阅触摸屏的手册来确认display-times。

TN92的水平扫描时序如下表:

垂直扫描时序如下图:

但是,如果对LCD各参数不怎么熟悉的话,很难建立这两个表与DTS中display-times的关系,这时应该去查阅一下linux内核的文档和芯片手册。在内核文档:”Documentation/devicetree/bindings/video/display-timing.txt"有相关的记载,该文件中有形象的描述,具体如下:

  1. +----------+-------------------------------------+----------+-------+
  2. ||↑|||
  3. |||vback_porch|||
  4. ||↓|||
  5. +----------#######################################----------+-------+
  6. |#↑#||
  7. |#|#||
  8. |hback#|#hfront|hsync|
  9. |porch#|hactive#porch|len|
  10. |<-------->#<-------+--------------------------->#<-------->|<----->|
  11. |#|#||
  12. |#|vactive#||
  13. |#|#||
  14. |#↓#||
  15. +----------#######################################----------+-------+
  16. ||↑|||
  17. |||vfront_porch|||
  18. ||↓|||
  19. +----------+-------------------------------------+----------+-------+
  20. ||↑|||
  21. |||vsync_len|||
  22. ||↓|||
  23. +----------+-------------------------------------+----------+-------+

AM335x的技术参考手册中可以找到相关的寄存器解释,如下:

综合这三份资料,很容易确定下LCD的屏的时序参数的范围(需要强调的是,上述参数不一定精确,还需要使用图片实机测下效果),经过多次实验,最终确定下了LCD的时序参数,详情如下:

  1. panel{
  2. compatible="ti,tilcdc,panel";
  3. status="okay";
  4. pinctrl-names="default";
  5. pinctrl-0=<&lcd_pins_s0>;
  6. panel-info{
  7. ac-bias=<255>;
  8. ac-bias-intrpt=<0>;
  9. dma-burst-sz=<16>;
  10. bpp=<32>;
  11. fdd=<0x80>;
  12. sync-edge=<0>;
  13. sync-ctrl=<1>;
  14. raster-order=<0>;
  15. fifo-th=<0>;
  16. };
  17. display-timings{
  18. 800x480p62{
  19. clock-frequency=<30000000>;
  20. hactive=<800>;
  21. vactive=<480>;
  22. hfront-porch=<214>;
  23. hback-porch=<40>;
  24. hsync-len=<4>;
  25. vback-porch=<20>;
  26. vfront-porch=<23>;
  27. vsync-len=<4>;
  28. hsync-active=<0>;
  29. vsync-active=<0>;
  30. };
  31. };
  32. };

时序确定下来之后需要关注的就是管脚配置,由于am335x集成了LCD控制,该控制器与LCD的连接方式是通过GPIO管脚复用实现的,而evm开发板与TQ335x的LCD都接在了同一个LCD控制器上,因此,直接使用原有的管脚配置即可。这一点也可以通过阅读TQ335x的原理图确认,这里我就不再分析了。

(3)backlight节点分析及配置

从backlight节点中可以获得如下信息:

  1. 1.匹配内核驱动的关键词是"pwm-backlight"。
  2. 2.使用的ECAP0进行PWM输出。
  3. 3.有8个亮度等级。
  4. 4.默认的亮度等级是8,也就是最亮。

了解以上信息后需要查阅TQ335x手册,弄清楚backlight控制管脚是如何连接的。通过分析TQ335x的原理图可知,TQ335x的背光控制也是使用PWM方式控制,且该引脚接到AM335x的ECAP2_IN_PWM2_OUT管脚上,而evm开发板是接在ECAP0_IN_PWM0_OUT管脚上的,因此,需要修改DTS配置才能正常使用TQ335x的背光功能。思路是将DTS中的背光配置由EACP0改为EACP2,下面是修改的步骤:

  1. Step1.将backlight节点中&eacp0改为&eacp2。
  2. Step2.将&epwmss0改为&epwmss2,并将该节点内的ecap0:ecap@48304100改成ecap0:ecap@48304100,然后将该节点中的&ecap0_pins改成&ecap2_pins。
  3. Step3.将ecap0_pins节点改名为ecap2_pins,然后将pinctrl-single,pins内的内

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top