瑞芯微RK3399嵌入式ARM开发板屏幕配置方法

作者: urbetter201706
上传时间为: 2017-10-13 08:46 AM
2017-10-13
阅读:

       RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数、浮点、内存等作了大幅优化,在整体性能、功耗及核心面积三个方面都具革命性提升。 RK3399的GPU采用四核ARM新一代高端图像处理器Mali-T860,集成更多带宽压缩技术:如智能迭加、ASTC、本地像素存储等,还支持更多的图形和计算接口,总体性能比上一代提升45%。

请参考 drivers/video/rockchip/screen/lcd_LD089WU1_mipi.c

包含头文件:#include "../transmitter/mipi_dsi.h"

#define SCREEN_TYPE SCREEN_MIPI 定义屏幕类型为 MIPI,SCREEN_TYPE 如果不设为

SCREEN_MIPI,MIPI 的相关驱动不会执行。

#define MIPI_DSI_LANE 4 //定义 LANE 个数

MIPI_DSI_LANE 是 LCD 的 DATA LANE 数,现在大多数分辨率稍高点的一般是 4 个 LANE 的,所

以默认可以不用设置,必须和硬件相匹配。

#define MIPI_DSI_HS_CLK 1000*1000000 //DSI_HS_CLK

MIPI_DSI_HS_CLK 是各个 LANE 传输时的速率(ddr 双边沿),最小值 80Mbps,最大 1Gbps,默

认是 1Gbps,这个也基本上不用改,除非板子布线有问题,跑不了 1Gbps 的。

如果 MIPI 屏幕本身需要初始化,要定义 RK_SCREEN_INIT

#define RK_SCREEN_INIT 1

并实现下面两个函数:

int rk_lcd_init(void) {

u8 dcs[16] = {0};

if(dsi_is_active() != 1)

return -1;

/*below is changeable*/

msleep(50);

dsi_enable_hs_clk(1);

dcs[0] = LPDT;

dcs[1] = dcs_exit_sleep_mode;

dsi_send_dcs_packet(dcs, 2);

msleep(1);

dcs[0] = LPDT;

dcs[1] = dcs_set_display_on;

dsi_send_dcs_packet(dcs, 2);

msleep(10);

dsi_enable_video_mode(1);

}

int rk_lcd_standby(u8 enable) {

u8 dcs[16] = {0};

if(dsi_is_active() != 1)

return -1;

if(enable) {

/*below is changeable*/

dcs[0] = LPDT;

dcs[1] = dcs_set_display_off;

dsi_send_dcs_packet(dcs, 2);

msleep(1);

dcs[0] = LPDT;

dcs[1] = dcs_enter_sleep_mode;

dsi_send_dcs_packet(dcs, 2);

msleep(1);

} else {

/*below is changeable*/

rk_lcd_init();

}

说明:

1、dsi_is_active()用来判断 DSI 是否已经处于工作状态了,如果是返回 1,如果不是返回 0,

如果出错返回-1。

2、dcs[0] = LPDT;

dcs[1] = dcs_enter_sleep_mode;

dsi_send_dcs_packet(dcs, 2);

屏的初始化是通过 DSI 来传送数据的,根据需要封装了 dsi_send_dcs_packet 这个接口。对

于 dcs[]数组,第一个成员为写的模式,第二个成员为 DCS 命令,后面的成员为 DCS 命令的参数。

上 面 两 句 用 来 发 送 , dcs_exit_sleep_mode 这 个 命 令 , 这 些 DCS 命 令 是 在

drivers/video/rockchip/transmitter/mipi_dsi.h 定义的,具体的含义请参考 MIPI DCS 的规范。

当然屏自定义的命令也可以通过该接口发送。

  

相关经验
全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示