天嵌 ARM开发社区

 找回密码
 注册
查看: 3938|回复: 2

【嵌入式分享】如何在TQ335X开发板上进行LCD渠道移植(1)

[复制链接]
freewing 发表于 2014-11-26 10:06:05 | 显示全部楼层 |阅读模式

    TQ335X开发板已经推出超过1年了,专业工业级开发板受到广大用户的肯定与支持。天嵌将在官网分享部分技术优秀用户分享的使用心得,使以后的用户能更方便更高效地进行嵌入式开发。下面,是优秀博主girlkoo编写的关于如何在TQ335X开发板上进行LCD渠道移植的心得。

  TI 335X处理器的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,如果我们想进行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. 匹配内核驱动的关键词是:"ti,tilcdc,panel",可以通过这个关键字找到相应的驱动。  
  • 2. 管脚配置在节点lcd_pins_s0内  
  • 3. panel-info中可以配置LCD的硬件信息,如LCD的分辨率等  
  • 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"有相关的记载,该文件中有形象的描述,具体如下:

  • +----------+-------------------------------------+----------+-------+  
  • |          |        ↑                            |          |       |  
  • |          |        |vback_porch                 |          |       |  
  • |          |        ↓                            |          |       |  
  • +----------#######################################----------+-------+  
  • |          #        ↑                            #          |       |  
  • |          #        |                            #          |       |  
  • |  hback   #        |                            #  hfront  | hsync |  
  • |   porch  #        |       hactive              #  porch   |  len  |  
  • |<-------->#<-------+--------------------------->#<-------->|<----->|  
  • |          #        |                            #          |       |  
  • |          #        |vactive                     #          |       |  
  • |          #        |                            #          |       |  
  • |          #        ↓                            #          |       |  
  • +----------#######################################----------+-------+  
  • |          |        ↑                            |          |       |  
  • |          |        |vfront_porch                |          |       |  
  • |          |        ↓                            |          |       |  
  • +----------+-------------------------------------+----------+-------+  
  • |          |        ↑                            |          |       |  
  • |          |        |vsync_len                   |          |       |  
  • |          |        ↓                            |          |       |  
  • +----------+-------------------------------------+----------+-------+  

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

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

  • panel {  
  •     compatible = "ti,tilcdc,panel";  
  •     status = "okay";  
  •     pinctrl-names = "default";  
  •     pinctrl-0 = <&lcd_pins_s0>;  
  •     panel-info {  
  •         ac-bias           = <255>;  
  •         ac-bias-intrpt    = <0>;  
  •         dma-burst-sz      = <16>;  
  •         bpp               = <32>;  
  •         fdd               = <0x80>;  
  •         sync-edge         = <0>;  
  •         sync-ctrl         = <1>;  
  •         raster-order      = <0>;  
  •         fifo-th           = <0>;  
  •     };  
  •   
  •     display-timings {  
  •         800x480p62 {  
  •             clock-frequency = <30000000>;  
  •             hactive = <800>;  
  •             vactive = <480>;  
  •             hfront-porch = <214>;  
  •             hback-porch = <40>;  
  •             hsync-len = <4>;  
  •             vback-porch = <20>;  
  •             vfront-porch = <23>;  
  •             vsync-len = <4>;  
  •             hsync-active = <0>;  
  •             vsync-active = <0>;  
  •         };  
  •     };  
  • };  

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


  (3)backlight节点分析及配置


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

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

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

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

  最后修改后的DTS相关部分如下:

  • backlight {  
  •     compatible = "pwm-backlight";  
  •     pwms = <&ecap2 0 50000 0>;  
  •     brightness-levels = <0 51 53 56 62 75 101 152 255>;  
  •     default-brightness-level = <8>;  
  • };  
  •   
  • &epwmss2 {  
  •     status = "okay";  
  •   
  •     ecap2: ecap@48304100 {  
  •         status = "okay";  
  •         pinctrl-names = "default";  
  •         pinctrl-0 = <&ecap2_pins>;  
  •     };  
  • };  
  •   
  • ecap2_pins: backlight_pins {  
  •     pinctrl-single,pins = <  
  •         0x19c MUX_MODE4 /* MCASP0_AHCLKR.eCAP2_in_PWM2_out MODE4 */  
  •     >;  
  • };  

  这样就完成了背光功能的DTS配置。


  (4)配置内核驱动

  由于evm开发板的代码是使用ATAGS方式启动的,没有配置pwm-backlight和基于TI LCD控制器的通用panel驱动,需要通过menuconfig开启相应的配置项。通过DTS中的compatible属性可以找到pwm-backlight驱动是在drivers/video/backlight/pwm-bl.c中实现的,而panel驱动则是在drivers/gpu/drm/tilcdc/tilcdc_panel.c中实现的,阅读相应目录下的Makefile和Kconfig就可以确定出如何配置menuconfig。Makefile和Kconfig的分析过程很简单,我就不多写了,下面是通过menuconfig开启相应功能的步骤。

  Step1. 执行menuconfig指令:

  • make ARCH=arm menuconfig  

  Step2. 开启通用pwm-backlight驱动和基于TI LCD控制器的通用panel驱动,配置内容如下:

  • Graphics support  --->  
  •    
  • Pulse-Width Modulation (PWM) Support  --->  
  •         <*>   ECAP PWM support  
  •         <*>   EHRPWM PWM support  
  •     -*- Backlight & LCD device support  --->  
  •         <*>     Generic PWM based Backlight Driver  
  • Graphics support  --->         
  •     Direct Rendering Manager  --->  
  •         <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->  
  •         <*> DRM Support for TI LCDC Display Controller  

  

   (5)编译DTB和内核


  执行DTB编译指令:

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- tq335x.dtb  

  执行内核编译指令:

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8  

相关产品:

TQ_AM335X嵌入式工业级开发板:

http://www.embedsky.com/Index.php?s=/Product/show/id/49.html


xjtuwyq 发表于 2015-4-1 15:12:44 | 显示全部楼层
在andriod系统中没有找到am335x-evm.dts文件,是什么情况
lwswl 发表于 2015-4-12 06:13:30 | 显示全部楼层
很好。。我需要。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-20 21:57 , Processed in 1.046868 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表