LCD之MIPI接口

																		LCD之MIPI接口

(因本人之局限性,内容仅供参考。错误之处,敬请指出。谢谢!)

说到mipi接口,它不只是一个简简单单的一个接口。而是一个两层概念的叠加:物理传输系统结构(物理层面) 和 MIPI DSI 驱动框架(软件层面)。
注意:“物理传输系统结构(物理层面) 和 MIPI DSI 驱动框架(软件层面)” 这两个名词,是本人自己定义的。感觉能够表达我内心的想法。

首先讲述一下 “物理传输系统结构(物理层面)”,它是一种什么概念。如图:

在这里插入图片描述
这幅图描述的正是“物理传输系统结构(物理层面)”。
该物理层面大致分为三层:
->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 中创建注册。

(内容源自理解,仅供参考)

鸣谢:
https://blog.csdn.net/kris_fei/article/details/79046380?utm_source=blogxgwz0

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值