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. Centos7/RHEL7 开启kdump

    Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核, 该内核会将此时 ...

  2. Python 中文(大写)数字转阿拉伯数字(转)

    # constants for chinese_to_arabic CN_NUM = { '〇' : 0, '一' : 1, '二' : 2, '三' : 3, '四' : 4, '五' : 5, ' ...

  3. 【PostgreSQL】安装出现microsoft vc++ runtime installer

    1.找到下载的目录 2.新建一个文本文档 3.在文本文档上输入postgresql-11.1-1-windows-x64.exe --install_runtimes 0 4.修改文本文档后缀为.ba ...

  4. 【NPOI】通过NPOI从内存流中创建EXCEL

    一言不合就开始帖代码 XSSFWorkbook workbook = new XSSFWorkbook(); //创建工作簿 XSSFSheet sheet = (XSSFSheet)workbook ...

  5. 关于Android studio 设置点击打不开的解决

    今天早上觉得字体太小了想改下字体发现设置点不开,后来发现是打了汉化包的bug,后来换了一个汉化包就能打开了.

  6. 201771010126 王燕《面向对象程序设计(Java)》第七周实验总结

    实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: private--私有域或私有方法:只能在定义它的类中使用 public--公 ...

  7. Codechef August Challenge 2018 : Interactive Matrix

    传送门 首先整个矩阵可以被分为很多小矩阵,小矩阵内所有行的单调性是一样的,所有列的单调性是一样的. 考虑如何在这样一个小矩阵中找出答案.我的策略是每次取四个角中最大值和最小值的点,这样可以每次删掉一行 ...

  8. [LeetCode] Serialize and Deserialize N-ary Tree N叉搜索树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  9. java反射机制的简单使用

    java 反射机制 反射机制简介 参考地址 什么是反射机制 反射机制指程序在运行时能够获取自身的信息.在java中只要给定类的名字,就可以通过反射机制获得类的所有信息 反射机制的优缺点 首先了解一下动 ...

  10. SyntaxError: invalid character in identifier(Python)

    在写博客时直接将博客上的代码复制运行后发现错误SyntaxError: invalid character in identifier,我以为是l(小L)写成了1,改了还是不行. 上网查了下,发现原来 ...