0x00 环境说明:

所使用的开发板为锐尔威视的插针版A33_Vstar

屏幕是买的第三方的KD050FWFPA011-C009A,其中LCD驱动IC为ILI9806E,所使用的接口为RGB666

0x01 修改系统配置文件:

笔者所使用的A33开发板的系统配置文件路径问:

/root/a33_linux/dragonboard/tools/pack/chips/sun8iw5p1/configs/vstar/sys_config.fex

打开该文件,搜索 [disp_init] ,修改[disp_init]配置如下:

[disp_init]
disp_init_enable         = 1
disp_mode                = 0

screen0_output_type      = 1
screen0_output_mode      = 2

screen1_output_type      = 0
screen1_output_mode      = 4

fb0_format               = 9
fb0_pixel_sequence       = 1
fb0_scaler_mode_enable   = 0
fb0_width                = 0
fb0_height               = 0

fb1_format               = 10
fb1_pixel_sequence       = 0
fb1_scaler_mode_enable   = 0
fb1_width                = 0
fb1_height               = 0

lcd0_backlight           = 255
lcd1_backlight           = 255

lcd0_bright              = 50
lcd0_contrast            = 50
lcd0_saturation          = 57
lcd0_hue                 = 50

lcd1_bright              = 50
lcd1_contrast            = 50
lcd1_saturation          = 57
lcd1_hue                 = 50

修改[lcd0_para]配置如下:

lcd_used            = 1

lcd_driver_name     = "default_lcd"
lcd_if              = 0
lcd_x               = 480
lcd_y               = 854
lcd_width           =
lcd_height          =
lcd_dclk_freq       = 33
lcd_pwm_used        = 1
lcd_pwm_ch          = 0
lcd_pwm_freq        = 50000
lcd_pwm_pol         = 1
lcd_hbp             = 50
lcd_ht              = 640
lcd_hfp            = 100
lcd_hspw            = 10
lcd_vbp             = 16
lcd_vt              = 1254
lcd_vfp          = 20
lcd_vspw            = 4
lcd_lvds_if         = 0
lcd_lvds_colordepth = 0
lcd_lvds_mode       = 0
lcd_frm             = 1
lcd_io_phase        = 0x0100
lcd_gamma_en        = 0
lcd_bright_curve_en = 0
lcd_cmap_en         = 0

deu_mode            = 0
lcdgamma4iep        = 22
smart_color        = 90

lcd_bl_en           =
lcd_power           =
lcd_gpio_0          =port:PH04<1><0><default><1>
lcd_gpio_1          =port:PH05<1><0><default><1>
lcd_gpio_2          =port:PH06<1><0><default><1>
lcd_gpio_3          =port:PH07<1><0><default><1>

lcdd0                    = port:PD02<2><0><default><default>
lcdd1                    = port:PD03<2><0><default><default>
lcdd2                    = port:PD04<2><0><default><default>
lcdd3                    = port:PD05<2><0><default><default>
lcdd4                    = port:PD06<2><0><default><default>
lcdd5                    = port:PD07<2><0><default><default>
lcdd6                    =
lcdd7                    =
lcdd8                    = port:PD10<2><0><default><default>
lcdd9                    = port:PD11<2><0><default><default>
lcdd10                   = port:PD12<2><0><default><default>
lcdd11                   = port:PD13<2><0><default><default>
lcdd12                   = port:PD14<2><0><default><default>
lcdd13                   = port:PD15<2><0><default><default>
lcdd14                   =
lcdd15                   =
lcdd16                   = port:PD18<2><0><default><default>
lcdd17                   = port:PD19<2><0><default><default>
lcdd18                   = port:PD20<2><0><default><default>
lcdd19                   = port:PD21<2><0><default><default>
lcdd20                   = port:PD22<2><0><default><default>
lcdd21                   = port:PD23<2><0><default><default>
lcdd22                   =
lcdd23                   =
lcdclk                   = port:PD24<2><0><default><default>
lcdde                    = port:PD25<2><0><default><default>
lcdhsync                 = port:PD26<2><0><default><default>
lcdvsync                 = port:PD27<2><0><default><default>

修改完毕之后保存退出

0x02 修改LCD驱动代码:

uboot中默认的LCD驱动初始化文件路径为:

/root/a33_linux/dragonboard/brandy/u-boot-2011.09/drivers/video_sunxi/sunxi_v2/de_bsp/lcd/panels/default_panel.c

首先添加头文件包含:

#include  "default_panel.h"

修改 LCD_panel_init 函数:

static void LCD_panel_init(u32 sel)
{
     LCD_KD050FW_init();
     return;
}

在前面添加 LCD_KD050FW_init 函数的定义:

static void LCD_KD050FW_init(void)
{
     RST(1);
     sunxi_lcd_delay_ms(1);
     RST(0);
     sunxi_lcd_delay_ms(10);
     RST(1);
     sunxi_lcd_delay_ms(200);

//***************************************************************//LCD SETING
     write_cmd(0xFF);        // Change to Page 1 CMD
     write_data(0xFF);
     write_data(0x98);
     write_data(0x06);
     write_data(0x04);
     write_data(0x01);
     
     write_cmd(0x08); //Output    SDA
     write_data(0x10);

write_cmd(0x20);//set DE/VSYNC mode   
     write_data(0x00);

write_cmd(0x21); //DE = 1 Active
     write_data(0x01);
     
     write_cmd(0x30);//Resolution setting 480 X 854
     write_data(0x01);
     
     write_cmd(0x31); //Inversion setting 2-dot
     write_data(0x00);
     
     write_cmd(0x40); //BT  AVDD,AVDD
     write_data(0x16); //
     
     write_cmd(0x41);  
     write_data(0x33);//22 
     
     write_cmd(0x42);       
     write_data(0x03); //VGL=DDVDH+VCIP -DDVDL,VGH=2DDVDL-VCIP
     
     write_cmd(0x43);      
     write_data(0x09); //SET VGH clamp level
     
     write_cmd(0x44);      
     write_data(0x06); //SET VGL clamp level
     
     write_cmd(0x50); //VREG1
     write_data(0x88);
     
     write_cmd(0x51); //VREG2
     write_data(0x88);
     
     write_cmd(0x52); //Flicker MSB
     write_data(0x00);
     
     write_cmd(0x53); //Flicker LSB
     write_data(0x44); //VCOM

write_cmd(0x55); // //Flicker             
     write_data(0x49);

write_cmd(0x60);      
     write_data(0x07);
     
     write_cmd(0x61);       
     write_data(0x00);
     
     write_cmd(0x62);     
     write_data(0x07);
     
     write_cmd(0x63);     
     write_data(0x00);
     //++++++++++++++++++ Gamma Setting ++++++++++++++++++//
     write_cmd(0xA0);  //Positive Gamma
     write_data(0x00);
     write_cmd(0xA1);        //
     write_data(0x09);
     write_cmd(0xA2);        //
     write_data(0x11);
     write_cmd(0xA3);        //
     write_data(0x0B);
     write_cmd(0xA4);        //
     write_data(0x05);
     write_cmd(0xA5);        //
     write_data(0x08);
     write_cmd(0xA6);        //
     write_data(0x06);
     write_cmd(0xA7);        //
     write_data(0x04);
     write_cmd(0xA8);        //
     write_data(0x09);
     write_cmd(0xA9);        //
     write_data(0x0C);
     write_cmd(0xAA);        //
     write_data(0x15);
     write_cmd(0xAB);        //
     write_data(0x08);
     write_cmd(0xAC);        //
     write_data(0x0F);
     write_cmd(0xAD);        //
     write_data(0x12);
     write_cmd(0xAE);        //
     write_data(0x09);
     write_cmd(0xAF);        //
     write_data(0x00);
      ///==============Nagitive
     write_cmd(0xC0);        //Negative Gamma
     write_data(0x00);
     write_cmd(0xC1);        //
     write_data(0x09);
     write_cmd(0xC2);        //
     write_data(0x10);
     write_cmd(0xC3);        //
     write_data(0x0C);
     write_cmd(0xC4);        //
     write_data(0x05);
     write_cmd(0xC5);        //
     write_data(0x08);
     write_cmd(0xC6);        //
     write_data(0x06);
     write_cmd(0xC7);        //
     write_data(0x04);
     write_cmd(0xC8);        //
     write_data(0x08);
     write_cmd(0xC9);        //
     write_data(0x0C);
     write_cmd(0xCA);        //
     write_data(0x14);
     write_cmd(0xCB);        //
     write_data(0x08);
     write_cmd(0xCC);        //
     write_data(0x0F);
     write_cmd(0xCD);        //
     write_data(0x11);
     write_cmd(0xCE);        //
     write_data(0x09);
     write_cmd(0xCF);        //
     write_data(0x00);
     
     write_cmd(0xFF); // Change to Page 6 CMD for GIP timing  
     write_data(0xFF);
     write_data(0x98);
     write_data(0x06);
     write_data(0x04);
     write_data(0x06);

write_cmd(0x00);        //
     write_data(0x20);
     write_cmd(0x01);        //
     write_data(0x0A);
     write_cmd(0x02);        //
     write_data(0x00);
     write_cmd(0x03);        //
     write_data(0x00);
     write_cmd(0x04);        //
     write_data(0x01);
     write_cmd(0x05);        //
     write_data(0x01);
     write_cmd(0x06);        //
     write_data(0x98);
     write_cmd(0x07);        //
     write_data(0x06);
     write_cmd(0x08);        //
     write_data(0x01);
     write_cmd(0x09);        //
     write_data(0x80);
     write_cmd(0x0A);        //
     write_data(0x00);
     write_cmd(0x0B);        //
     write_data(0x00);
     write_cmd(0x0C);        //
     write_data(0x01);
     write_cmd(0x0D);        //
     write_data(0x01);
     write_cmd(0x0E);        //
     write_data(0x05);
     write_cmd(0x0F);        //
     write_data(0x00);

write_cmd(0x10);        //
     write_data(0xF0);
     write_cmd(0x11);        //
     write_data(0xF4);
     write_cmd(0x12);        //
     write_data(0x01);
     write_cmd(0x13);        //
     write_data(0x00);
     write_cmd(0x14);        //
     write_data(0x00);
     write_cmd(0x15);        //
     write_data(0xC0);
     write_cmd(0x16);        //
     write_data(0x08);
     write_cmd(0x17);        //
     write_data(0x00);
     write_cmd(0x18);        //
     write_data(0x00);
     write_cmd(0x19);        //
     write_data(0x00);
     write_cmd(0x1A);        //
     write_data(0x00);
     write_cmd(0x1B);        //
     write_data(0x00);
     write_cmd(0x1C);        //
     write_data(0x00);
     write_cmd(0x1D);        //
     write_data(0x00);

write_cmd(0x20);        //
     write_data(0x01);
     write_cmd(0x21);        //
     write_data(0x23);
     write_cmd(0x22);        //
     write_data(0x45);
     write_cmd(0x23);        //
     write_data(0x67);
     write_cmd(0x24);        //
     write_data(0x01);
     write_cmd(0x25);        //
     write_data(0x23);
     write_cmd(0x26);        //
     write_data(0x45);
     write_cmd(0x27);        //
     write_data(0x67);

write_cmd(0x30);        //
     write_data(0x11);
     write_cmd(0x31);        //
     write_data(0x11);
     write_cmd(0x32);        //
     write_data(0x00);
     write_cmd(0x33);        //
     write_data(0xEE);
     write_cmd(0x34);        //
     write_data(0xFF);
     write_cmd(0x35);        //
     write_data(0xBB);
     write_cmd(0x36);        //
     write_data(0xAA);
     write_cmd(0x37);        //
     write_data(0xDD);
     write_cmd(0x38);        //
     write_data(0xCC);
     write_cmd(0x39);        //
     write_data(0x66);
     write_cmd(0x3A);        //
     write_data(0x77);
     write_cmd(0x3B);        //
     write_data(0x22);
     write_cmd(0x3C);        //
     write_data(0x22);
     write_cmd(0x3D);        //
     write_data(0x22);
     write_cmd(0x3E);        //
     write_data(0x22);
     write_cmd(0x3F);        //
     write_data(0x22);
     write_cmd(0x40);        //
     write_data(0x22);

write_cmd(0xFF);// Change to Page 7 CMD for GIP timing  
     write_data(0xFF);
     write_data(0x98);
     write_data(0x06);
     write_data(0x04);
     write_data(0x07);

write_cmd(0x17);      
     write_data(0x22);
     
     write_cmd(0x02);       
     write_data(0x77);

write_cmd(0x26);       
     write_data(0xB2);

write_cmd(0xFF); // Change to Page 0 CMD for Normal command
     write_data(0xFF);
     write_data(0x98);
     write_data(0x06);
     write_data(0x04);
     write_data(0x00);

write_cmd(0x3A);     
     write_data(0x60);

write_cmd(0x11);
     sunxi_lcd_delay_ms(120);
     write_cmd(0x29);
     sunxi_lcd_delay_ms(25);

}

在前面添加一些相关函数的实现:

#define SCLB(x)    sunxi_lcd_gpio_set_value(0, 0, x)
#define SDI(x)    sunxi_lcd_gpio_set_value(0, 1, x)
#define RST(x)    sunxi_lcd_gpio_set_value(0, 2, x)
#define CSB(x)    sunxi_lcd_gpio_set_value(0, 3, x)

static void write_cmd(unsigned char cmd)
{
     unsigned char i;
     CSB(0);
     SCLB(0);
     SDI(0);
     SCLB(1);
     for(i=0;i<8;i++){
         SCLB(0);  
         if(cmd & 0x80)
             SDI(1);
         else
             SDI(0);
         SCLB(1);
         cmd = cmd << 1;
     }
     CSB(1);   
}

void write_data(unsigned char data)
{
     unsigned char i;
     CSB(0);
     SCLB(0);
     SDI(1);
     SCLB(1);
     for(i=0;i<8;i++){
         SCLB(0);  
         if(data & 0x80)
             SDI(1);
         else
             SDI(0);
         SCLB(1);
         data = data << 1;
     }
     CSB(1);   
}

保存退出之后重新编译uboot

0x03 重新编译uboot:

切换到uboot目录下:

cd  ~/a33_linux/dragonboard/brandy/u-boot-2011.09/

重新编译uboot:

make  distclean

make  sun8iw5p1_config

make  -j8

编译成功之后重新打包烧录到板子即可验证

全志A33移植LCD驱动(ILI9806E)的更多相关文章

  1. 全志A33 linux led驱动编程(附实测参考代码)

    开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 开发平台 * 芯灵思Sinl ...

  2. 高通LCD驱动调试

    本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...

  3. LCD驱动移植在在mini2440(linux2.6.29)和FS4412(linux3.14.78)上实现对比(deep dive)

    1.Linux帧缓冲子系统 帧缓冲(FrameBuffer)是Linux为显示设备提供的一个接口,用户可以将帧缓冲看成是显示内存的一种映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作 ...

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

    TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示.下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路. (1)初步分析 由 ...

  5. 移植ok6410 LCD驱动

    1.本次移植过程选择 linux-2.6.28 lcd驱动为参考移植到 linux-2.6.34 ok6410 开发板上. 2.移植过程 主要以给内核增加驱动的思想,在/driver/video/ 下 ...

  6. TQ2440平台上LCD驱动的移植

    参考: http://liu1227787871.blog.163.com/blog/static/205363197201242393031250/ http://blog.csdn.net/cum ...

  7. Linux的LCD驱动分析及移植

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 LCD驱动分析 LCD屏的驱动总体上分成两块,一块是GUI ...

  8. sc7731 Android 5.1 LCD驱动简明笔记之一

    基于展讯sc7731 - Android 5.1 代码分析浏览.将屏蔽细节,把握整体,并且不涉及其他设备和LCD的交互. 以下对sc7731 lcd大体流程进行简要说明. 第一,lcd 的两个阶段 1 ...

  9. Android系统移植与驱动开发----第一章

    第一章 Android系统移植与驱动开发 Android源代码定制完全属于自己的嵌入式系统,但是支持的设备不多,所以要移植,而在移植的过程中使用的不得不提的是驱动开发. Android系统构架主要包括 ...

随机推荐

  1. .net core2.x - 关于仓储(Repository)

    概要:在搭建框架,顺手说下写下,关于Repository,可能你理解了,可能你还不理解,可能与不可能不是重点,重点是感兴趣就看看吧. 1.仓储(Repository)是什么? 看下翻译:仓库; 贮藏室 ...

  2. Burnside引理与Polya定理 学习笔记

    原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...

  3. 【Vue】-- 数据双向绑定的原理 --Object.defineProperty()

    Object.defineProperty()方法被许多现代前端框架(如Vue.js,React.js)用于数据双向绑定的实现,当我们在框架Model层设置data时,框架将会通过Object.def ...

  4. 2018.我的NOIP补全计划

    code: efzoi.tk @ shleodai noip2011 D1 选择客栈 这道题是一道大水题,冷静分析一会就会发现我们需要维护最后一个不合法点和前缀和. 维护最后一个不合法点只要边扫描边维 ...

  5. 最优装载—dp

    最优装载—dp 动态规划 一 问题描述 二 问题分析 三 代码实现 package dp_Loading; import java.io.BufferedWriter; import java.io. ...

  6. python下的并发编程

    阅读目录 一 背景知识 二 python并发编程之多进程 三 python并发编程之多线程 四 python并发编程之协程 五 python并发编程之IO模型 六 补充:paramiko模块 七 作业 ...

  7. golang 框架 之 CHI

    1,特性 golang 的 http框架已经有很多,究其原因:go 的net/http 已经做了大部分工作,封装一个框架的工作量,没有那么的大. 不过呢,林子大了鸟也就多了,部分框架的代码质量实在不敢 ...

  8. myeclipse 无法启动Tomcat(程序未设置断点)This kind of launch is configured to open the Debug perspective ...

    myeclipse 中在新建一个项目之后想要运行一下,可是却提示This kind of launch is configured to open the Debug perspective,下面是我 ...

  9. mysql字符集校对

    常用的两种 utf8_general_ci 按照普通的字母顺序,而且不区分大小写(比如:a B c D)utf8_bin 按照二进制排序(比如:A排在a前面,B D a c) ci是 case ins ...

  10. c语言的二进制表示的是什么码

    int -1 的二进制是 1111 1111 1111 1111 1111 1111 1111 1111 int -2 的二进制是 1111 1111 1111 1111 1111 1111 1111 ...