赞
踩
LCD之MIPI接口
(因本人之局限性,内容仅供参考。错误之处,敬请指出。谢谢!)linux
说到mipi接口,它不仅是一个简简单单的一个接口。而是一个两层概念的叠加:物理传输系统结构(物理层面) 和 MIPI DSI 驱动框架(软件层面)。
注意:“物理传输系统结构(物理层面) 和 MIPI DSI 驱动框架(软件层面)” 这两个名词,是本人本身定义的。感受可以表达我心里的想法。web
首先讲述一下 “物理传输系统结构(物理层面)”,它是一种什么概念。如图:缓存
这幅图描述的正是“物理传输系统结构(物理层面)”。
该物理层面大体分为三层:
->1.PHY Layer 物理层,通常使用 C-PHY,D-PHY,M-PHY。它们被设计的传输速率为:100Mbits/s,500Mbits/s,1000Mbits/s。(像RK3399-firefly使用的是D-PHY)
->2.中间层,该层涉及到两个协议:DSI-2(LCD) 和CSI(camera)。 MIPI DSI 驱动就和这层有着莫大的关系。
->3.应用层。框架
那“MIPI DSI 驱动框架(软件层面)”又是怎么回事呢?这涉及到linux内核如何实现 该MIPI接口的LCD驱动。
该驱动较为复杂,这里不进行详细讲解。
MIPI DSI 之 LCD 驱动 使用的是 DSI/DRM驱动框架。
DRM 由如下 4部分组成:
->1.KMS (kernel mode setting) : 改变分辨率 和 位深。
->2.DRI (direct rendering infrastructure) : 直接访问硬件接口。
->3.GEM (graphics execution manager) : 内存管理。
->4.DRM (driver in kernel side) : 访问硬件。
其中KMS模块又由如下几部分组成:
–>1.framebuffer (画布)
–>2.CRTC (将plane 和 framebuffer数据进行配,画画)
–>3.Encoder
–>4.Connector
–>5.Plane
–>6.Drm device
KMS模块的工做原理以下:
咱们以RK3399的内核对KMS模块作简单的分析:
(1)Framebuffer 画布(图像数据缓存区)相关的三个文件以下:
1.Drivers/gpu/drm/drm_fb_helper.c 内核开发者封装的 DRM fb 标准接口。
2.Drivers/gpu/drm/rockchip/rockchip_drm_fb.c rockchiop根据上面的内核接口,封装的专门针对本身芯片的 DRM fb 接口。
3.Drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c rockchip 根据上面的本身封装的DRM fb接口 实现 rockchip本身的framebuffer 配置 函数。不过它也是给别人提供接口函数。(好比:rockchip_drm_fbdev_init()会被drivers/gpu/drm/rockchip/rockchip_drm_drv.c调用。)
(2)CRTC 主要用于显示控制,如:display timing,resolution配置。Rockchip中的vop 就是根据CRTC 来进一步封装实现出来的。
和CRTC 相关的文件是:
Drivers/gpu/drm/rockchip/rockchip_drm_vop.c
这个文件主要是根据内核开发者提供的函数接口,rockchip进一步封装,实现的CRTC. 它是rockchip实现 VOP 的基础。
(3)Encoder 他是将CRTC/VOP 处理后的图像数据转换成合适的格式。好比转换成HDMI须要的TMDS格式的信息,或则MIPI须要的格式信息。而后再将转换后的信息发送给connector.
Encoder 被rockchip实现位一个 platfrom总线驱动(rockchip-dp).它的主要文件是:
Drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
(4)Connector 表明具体的外部接口,如edp,hdmi,mipi等。用于传输信号给外部硬件显示设备,探测外部显示设备接入。Connector 中各类外部接口对应的驱动文件以下:
(1)Rockchip_lvds.c LVDS 接口。
(2)Analogix_dp-rockchip.c EDP 接口。
(3)Cdn-dp-core.c
(4)Dw-mipi-dsi.c MIPI接口
(5)Dw-hdmi-rockchip.c HDMI接口
咱们的connector模块使用的是 dw-mipi-dsi.c 也就是mipi接口。
注意:
Encoder 和 connector 两个模块有些内容是重叠再一块儿的,因此很难清晰的划分开来。
(5)Planes 一个plane表明一个image layer(图层),咱们最终显示在显示器上的是由一个或多个plane重叠组合而成。
通常planes有三种类型:
1.DRM_PLANE_TYPE_PRIMARY :必定要有,用于显示背景或者图像内容。
2.DRM_PLANE_TYPE_OVERLAY : 用于显示overlay.
3.DRM_PLANE_TYPE_CURSOR : 用与显示鼠标。
Plane 对应的结构体是: struct drm_plane_funcs .
该结构体的初始化在vop_plane_init()在rockchip_drm_vop.c 中建立注册。
(6)Drm device 处理用户空间的请求。在代码中由struct drm_drivern 表示执行。
在 rockchip_drm_bind() drivers/gpu/drm/rockchip/rockchip_drm_drv.c 中建立注册。ide
(内容源自理解,仅供参考)svg
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。