对国产板子有阴影这些软硬件开源的ARM开发板可以学习Linux驱动

对国产板子有阴?些软硬件开源ARM开发板可以学Linux驱动开

为了点亮一MIPI屏幕,我们除了要了MIPI DSI的工作原理之外,大前提要了解整MIPI DSI图显系统的组成,更需要清楚点亮一MIPI屏幕需要做哪些事情。

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比///

正文开始:

1. MIPI DSI图显系统组成

MIPI图显系统的硬件组成如下图表示:

图显处理器通DPI接口将像素数据传输MIPI DSI HostMIPI D-PHY作为显示屏DSI Host之间由物理媒介,将编码后的像素数据发送MIPI显示屏。

MIPI DSI显示屏而言,无MIPI信 转换的称之panel,内部有数据信 转换桥片的称之bridge

MIPI图显系统除了基本的像素数据信 外,为了使整个显示系统能够正常工作,还包含其他与显示屏相关的控制信 ,包括显示屏内IC配置、显示屏背光配置、显示屏的复位和上电配置。

对于点亮一MIPI屏幕而言,重中之重是要正确的配置显示屏参数,配置方式主要有如3种:

·I2CSPI等总线配置

·显示屏内部集成MCU完成配置

·MIPI DSI DCS初始化序列

PWM来实MIPI屏幕的背光控制,使GPIO完成显示屏的复位、上电的控制。

在设备树中定MIPI DSI图显系统的联结关系。

RK3399为例,其提供了两路MIPI DSI通道,分别是dsi@ff960000dsi1: dsi@ff968000,代表MIPI DSI host

2050 dsi: dsi@ff960000 {

2051 compatible = “rockchip,rk3399-mipi-dsi”;

2052 reg = ;

2083 dsi1: dsi@ff968000 {

2084 compatible = “rockchip,rk3399-mipi-dsi”;

2085 reg = ;

RK3399芯片使用SynopsyDPHY。控制器DPHY之间的关系如下图所示:

MIPI DSI设备树结点中有一个信息MIPI显示密切相关,那就是时钟信息。可以看出MIPI DSI需要三路时钟,分别是refpclkphy_cfg

2050 dsi: dsi@ff960000 {

2051 compatible = “rockchip,rk3399-mipi-dsi”;

2054 clocks = , ,

2055 ;

2056 clock-names = “ref”, “pclk”, “phy_cfg”;

pclkMIPI DSI hostAPB时钟,用于配置MIPI DSI host寄存器以及中断等。refphy_cfgMIPI DPHY所需时钟。这两路时钟MIPI DSI host提供。其中ref时钟用MIPI DPHYPLL产生主机侧的串行发送时钟。phy_cfg是在配MIPI DPHY时使用。

4知识体系搭建

MIPI DSI同图显控制vop之间在逻辑层面上的联结关系如下:

# MIPI DSI Host

dsi_in_vopb: endpoint@0 {

reg = ;

remote-endpoint = ;

};

dsi_in_vopl: endpoint@1 {

reg = ;

remote-endpoint = ;

};

# VOP

vopb_out_dsi: endpoint@1 {

reg = ;

remote-endpoint = ;

};

vopb_out_dsi1: endpoint@4 {

reg = ;

remote-endpoint = ;

};

?「后文所涉及到的代码部分,均基DRM架构实现」

?

2.关键数据结构

请注意以下几个关键的数据结构,后文MIPI DSI初始化以MIPI显示系统初始化均以它们为核心进行展开,包括各数据结构的例化工作和创建各数据结构之间的联结关系。

struct mipi_dsi_host

struct mipi_dsi_host {

struct device *dev;

const struct mipi_dsi_host_ops *ops;

struct list_head list;

};

该数据结构DRM MIPI DSI提供,用以描MIPI DSI Host,包Host的驱动设备Host提供的功能函(后文会介绍具体功)Host链表的设备注册、管理。

struct mipi_dsi_device

struct mipi_dsi_device {

struct mipi_dsi_host *host;

struct device dev;

char name[DSI_DEV_NAME_SIZE];

unsigned int channel;

unsigned int lanes;

enum mipi_dsi_pixel_format format;

unsigned long mode_flags;

};

该数据结构DRM MIPI DSI提供,用以描DSI设备信息,主要包DSI设备lane(4lane)、像素格(Host决定,RGB888RGB565)

struct mipi_dsi_host_ops

struct mipi_dsi_host_ops {

int (*attach)(struct mipi_dsi_host *host,

struct mipi_dsi_device *dsi);

int (*detach)(struct mipi_dsi_host *host,

struct mipi_dsi_device *dsi);

ssize_t (*transfer)(struct mipi_dsi_host *host,

const struct mipi_dsi_msg *msg);

};

该数据结构DRM MIPI DSI提供,用以描DSI Host所能提供的功能函数,包DSI Host和显示屏之间创建联结关系需要使用attach、通DSI Host配置显示屏transfer

3. MIPI DSI软件架构

DRM的图显系统中MIPI DSI子系统主要DSI COREPANEL CORE组成,二者内建连接关系后注册DRM CORE系统。

DRM架构下,提供了drm_mipi_dsi.cdrm_panel.c以及drm_bridge.c三个核心文件。用户MIPI DSI驱动以drm_mipi_dsi.c为核心进行代码编写,例RK3399MIPI驱动dw-mipi-dsi.c。各显示屏厂商的驱动代码基于后两者进行编写,例如较为广泛使用的panel-simple.c

4. MIPI图显系统初始化

从第一章内容来看,点MIPI DSI屏幕并能正常的显示图像,DRM架构下需完成如下初始化工作:

.MIPI DSI Host初始化

.MIPI DSI D-PHY初始化

.MIPI DSI屏幕初始化

.MIPI DSI各模块间的联结关系

为了实现以上初始化工作,我们需要在设备DTS文件中约定各种初始化参数,包括各个模块的功能参数以及各个模块之间的联结关系,在驱动代码中配置IP及外设硬件,并基DRM架构注册出各组件,从软件层面勾勒MIPI DSI的数据流路径。

4.1 MIPI DSI初始化

RK3399使用数据结构struct dw_mipi_dsiMIPI DSI设备,该数据结构也是整MIPI DSI图显系统的核心,囊括了系统中的各个组件。

struct dw_mipi_dsi {

struct drm_encoder encoder;

struct drm_connector connector;

struct drm_bridge *bridge;

struct device_node *client;

struct mipi_dsi_host dsi_host;

struct mipi_dphy dphy;

struct drm_panel *panel;

struct device *dev;

struct regmap *grf;

struct reset_control *rst;

struct regmap *regmap;

struct clk *pclk;

struct clk *h2p_clk;

int irq;

struct dw_mipi_dsi *master;

struct dw_mipi_dsi *slave;

struct mutex mutex;

bool prepared;

unsigned int id;

unsigned long mode_flags;

unsigned int lane_mbps; /* per lane */

u32 channel;

u32 lanes;

u32 format;

struct drm_display_mode mode;

const struct dw_mipi_dsi_plat_data *pdata;

};

DRM架构相关」

DRM KMS架构MIPI DSI图显系统也同样遵循其设定的组件规则MIPI HostDRM encoderD-PHYPANEL部分属DRM connector。在实际使用过程种你可能发现这样一个现象,就是电路板并没有连MIPI屏幕,但DRM connector的连接状态依然connected,这是因MIPI DSI无法真实的检测到物理连接关系,通过软件定DRM connectorencoder之间的连接关系,当一切都初始化成功的时候connector就处connected状态了。

struct drm_encoder encoder;

struct drm_connector connector;

struct drm_bridge *bridge;

struct drm_panel *panel;

MIPI DSI主体」

这里所说的主体主要包MIPI DSI HostD-PHYbridgepannel。不仅需要表MIPI DSI图显系统的关键组成模块,也需要定义彼此之间硬件与软件层面的连接关系。

struct mipi_dsi_host dsi_host;

struct mipi_dphy dphy;

struct drm_bridge *bridge;

struct drm_panel *panel;

MIPI DSI参数」

我们关心MIPI DSI参数主要包括物理硬件定义、时钟频率、复位控制等。而物理硬件定义又包lane数目、通道数lane速率等。

unsigned long mode_flags;

unsigned int lane_mbps; /* per lane */

u32 channel;

u32 lanes;

u32 format;

「显示参数」

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月25日
下一篇 2022年3月25日

相关推荐