linux驱动开发之LCD的驱动配置

一、linux内核中是将内存的某一块(驱动分配的)映射到用户空间,这样用户空间的图片以及视频数据就不需要从内存空间切换,就可以直接写入到内存中。其中申请的这块内存称为DMA内存,即直接内存访问,外设和内存直接传输数据而不需要CPU参与。
存放在DMA内存的数据,每满一帧就可以自动写入到硬件(LCD屏)中。所以我们也称LCD屏为帧缓冲设备, 即一块内存。
总结是:操作一块LCD设备,就是操作一块内存,这块内存也称作显存。

二、framebuffer子系统的框架
这里写图片描述
这里,主要关注是fbmen.c核心层和LCD控制器层!
这里写图片描述
主要开发dev.platform_data(包括LCD屏的参数)。
应用层
————————————————
fb通用层:知道映射,但是不知道如何分配显存
1,负责和用户交互
2,实现显存的映射
代码在drivers/video/fbmem.c
————————————————-
drivers/video/s3c-fb.c
lcd控制器层:知道分配显存,但是不知道如何映射
1,初始化lcd控制器
2,实现显存的分配

三、LCD接口电路
这里写图片描述
背光引脚:LXpwmTOUTO,这个引脚接到LCD屏的背光开关上,如果要LCD屏亮起来,提供一个高电平即可。
控制引脚:
LVSYNC表示垂直(帧)同步信号
LHSYCN表示水平同步信号
LVCLK表示像素时钟
LVDEN表示像素使能

四、看SOC的LCD接口时序图:
这里写图片描述
最后面的HOZVAL+1表示有效的图像数据
这里写图片描述
垂直输入时序图表(AT070TN92_LCD)
这里写图片描述
水平输入时序图表(AT070TN92_LCD)
这里写图片描述
分别对比上面两个时序图中的垂直同步信号VSYNC与VS,发现时序刚好相反,所以一般是改变VSYNC中的极性。
LCD屏的驱动移植——时序

在路径下root@ubuntu:~/s5pv210/kernel/linux-3.0.8/Documentation/fb#
vim framebuffer.tet
里面有驱动相关的命名
这里写图片描述
总结以上时序图,得出soc中LCD、LCD屏芯片手册、驱动三者时序配置对应关系:

             soc                lcd屏                                驱动
垂直方向    
            VSPW                tvpw       1<y<20 y=10          vsync_len
            VBPD                tvb-tvpw    23-tvpw  13         upper_margin
            LINVAL              tvd         480                 yres
            VFPD                tvfp        22                  lower_margin

水平方向
            HSPW                thpw        1<x<40  x=20        hsync_len
            HBPD                thb-thpw    46-thpw  26         left_margin
            HOZVAL              thd         800                 xres
            HFPD                thfp        210                 right_margin

五、移植的时候主要是设定自定义数据

    arch/arm/mach-s5pv210/mach-smdkv210.c
    根据参数修改如下
        static struct s3c_fb_pd_win smdkv210_fb_win0 = {
            .win_mode = {
                .left_margin    = 26,
                .right_margin   = 210,
                .upper_margin   = 13,
                .lower_margin   = 22,
                .hsync_len  = 20,
                .vsync_len  = 10,
                .xres       = 800,
                .yres       = 480,
            },
            .max_bpp    = 32,
            .default_bpp    = 16, // 和应用有关
        };

六、确保fb通用层和lcd控制器层的驱动已经存在:

         make menuconfig
            Device Drivers  --->
                Graphics support  ---> 
                     <*> Support for frame buffer devices  --->// fbmem.c(核心层)
                            <*>   Samsung S3C framebuffer support  // s3c-fb.c

                     Console display driver support  --->
                        <*> Framebuffer Console support //将图片加载到显存中去显示

                    [*] Bootup logo  --->//启动logo,可以判断是否配置成功
                        [*]   Standard black and white Linux logo (NEW)
                        [*]   Standard 16-color Linux logo (NEW) 
                        [*]   Standard 224-color Linux logo (NEW)//表示的是一张图片

七、开启背光:
路径:/home/ubuntu/s5pv210/kernel/linux-3.0.8/arch/arm/mach-s5pv210
vim mach-smdkv210.c
添加:

smdkv210_machine_init(void)
            |
            gpio_request(S5PV210_GPD0(0), "gpd0");
            gpio_direction_output(S5PV210_GPD0(0),1);
            gpio_free(S5PV210_GPD0(0));

这里写图片描述
然后编译内核:make zImage -j2
更新内核: cp -raf arch/arm/boot/zImage /tftpboot
这里写图片描述
重启开发板,设置地址set serverip 192.168.7.115
save
set bootcmd tftp 0x40008000 zImage \; bootm 0x40008000
save
设置挂载根文件系统:set bootargs root=/dev/nfs nfsroot=192.168.7.115:/opt/rootfs init=/Linuxrc console=ttySAC0,115200 ip=192.168.7.175
save
设置开发板ip:set ipaddr 192.168.7.175
save
具体设置流程可以参考我写的: linux驱动开发之交叉开发环境搭建详细流程(http://blog.csdn.net/weixin_37787043/article/details/79146888
重启开发板,可以看到有企鹅的logo
附录:S5PV210数据手册及原理图(链接:https://pan.baidu.com/s/1pNhz2iB 密码:ptct)

发布了97 篇原创文章 · 获赞 135 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/weixin_37787043/article/details/79247248