LCD驱动的学习
简介:
LCD是基于液晶的。
LCD(liquid crystal display)按驱动方式分类可以分为静态驱动,简单矩阵驱动,主动矩阵驱动。其中,简单矩阵又可以分为扭转向列型(TN)和超转向列型(STN),而主动矩阵驱动则以TFT(用的最多)为主。
TN型液晶驱动:是LCD中最基本的,他只能将入射光旋转90度,视角只有30度。
STN型驱动液晶:可以讲入射光旋转180度至270度,也改善了视角。
TFT解决了上述两种液晶屏的缺陷,属于比较常用的。
一块lcd屏显示图像不但需要lcd驱动器,还需要lcd控制器。很多主芯片cpu继承了lcd控制器。其显示原理为:作为帧同步信号的vsync,每发出一个脉冲,就意味着一幅图像开始传输。作为行同步信号的hsync,每发出一个信号,代表新的一行图像资料开始发送。图像为从左向右,从上向下显示。
一个完整的时序图如下:
下面是lcd的技术参数:
1. 可视面积
2. 可视角度
3. 点距
4. 色彩度
5. 对比值
6. 亮度值
7. 响应时间
显存:
Framebuffer(帧缓冲)从本质上讲是图形设备的硬件抽象。对开发者而言,framebuffer是一块显示缓存,往显示缓存中陷入特定格式的数据就意味着向屏幕中输出内容。通过不断地向framebuffer中写数据,显示控制器就自动的从framebuffer中读数据并显示出来。
在嵌入式一般没有专门的芯片做显存,一般是从内存中分一部分做显存。Framebuffer其实就是显存。
帧缓冲设备对应的设备文件是/dev/fb*,如果系统中有多个显示卡,linux下还可支持多个帧缓冲设备,最多可达32个。帧缓冲设备的主设备号为29,次设备号是0到31.
下面是使用帧缓冲设备文件的演示。
帧缓冲设备编程:
整个编程的系统架构如下:
可以看出,我们实现帧缓冲设备主要需要完成两个任务:
1. 实现一个fb_info结构体,这其中包括可变参数,固定参数,操作列表等。
2. 使用register_frambuffer注册一个帧缓冲设备。
Fb_info
register_frambuffer
寻找lcd驱动对应的设备:
在lcd驱动的init函数中,主要是初始化一个平台驱动。
平台驱动的结构体如下,其匹配的参数为“s3c2410-lcd”,可以查询同样名称为s3c2410-lcd的平台设备。
下面可以看到,确实能查到这个设备,资源有两个,一个是寄存器起始地址,另一个是中断号。
通过mach-s3c2440.c文件,这个设备被上报给内核。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步