HI3556V200 Linux+Liteos双系统学习(7)----Liteos端对接RGB888 OLED显示屏


参考文档:
1.屏幕对接使用指南.pdf

HI3556V200这块板子附带一款索尼的ECX336 OLED屏幕,屏幕分辨率为640X400,RGB888接口。比较感兴趣,所以按照文档对接一番,中间爬了不少的坑,特此记录下。

1 硬件确认

板端与屏幕硬件一般需要四种连线,各执行不同的功能,这个要根据具体屏幕和硬件来确认,如下图:(来自海思文档)
控制命令传输接口(对应图中 SPI OR I2C)
图像数据传输接口(对应图中 HSYNC VSYNC CLK DATA0~DATAN DE)
背光控制(对应图中 BACKLIGHT)
硬件复位接口(对应图中 RESET)
在这里插入图片描述

1.1通信接口(SPI or I2C)确认

显示屏一般是通过SPI或者I2C方式和设备通信的,这台设备的显示屏是部署在Liteos端的,ECX336这块屏幕是通过SPI2和设备通信的,因此需要确认Liteos端的SPI2是否被打开了。

在Liteos控制端,输入ls /dev ,如果有SPI2的字段说明Liteos端已经打开了SPI2。如果没有,则需要配置Liteos的内核打开SPI2,另外需要注意在Linux端的dts设备树中对应disable SPI2,防止冲突。

1.2硬件管脚确认

简单对比一下硬件管脚是否正确,在Liteos端配置好LCD的管脚复用功能以及SPI功能之后,最好先对管脚进行简单通信来确定整个硬件通路是否正常。
比如根据屏幕的Datasheet,对LCD的SPI管脚发送某个指令查看是否有回应,或者是否有收到。
在前期对整个硬件部分最好做好验证工作,不然后面有问题,查一大堆软件方面,最终却发现硬件有问题,那就酸爽了…

2 软件配置

2.1 使能SPI管脚

在Liteos端初始化时候,使能SPI功能,以及配置SPI对应管脚。
大致代码如下:

spi_dev_init
static void spi2_pin_mux(void)
{
	himm(0x114F0050, 0x5f4);
    himm(0x114F0054, 0x5f4);
.......
}

2.2 配置屏幕数据管脚复用

根据硬件原理图,找到屏幕对应的HSYNC VSYNC CLK DATA0~DATAN DE等管脚,在Liteos端进行管脚复用。

部分代码截图如下:
在这里插入图片描述

2.3 配置屏幕背光及Reset管脚复用

根据硬件原理图,复用对应的管脚。

2.4 屏幕驱动初始化

一般屏幕在上电后会有对应的初始化过程,设备通过SPI或者I2C向屏幕发送对应的控制指令,用于向屏幕发送比如显示帧率,分辨率等配置信息。

屏幕的datasheet上或者原厂会有对应的配置方式,可直接进行配置。

2.5 配置VO相关

2.5.1 配置时序类型

配置时序类型为user时序,并配置屏幕的输出是那种类型。
在这里插入图片描述

2.5.2 配置User时序

在User时序结构体VO_SYNC_INFO_S 的像素区域相关的参数需要配置。我们可以根据datasheet上屏幕对应的分辨率相关的参数,将其填入《RGB_MIPI屏幕时钟时序计算器.xlsx》中,如下:
在这里插入图片描述
并将其填入结构体中:
在这里插入图片描述

2.5.3 其它配置项

VO输出时钟,是否反相,分频比等信息也要进行配置。
在这里插入图片描述

3 图片显示

在前面配置了显示屏相关的参数后,可以调用HI_MAPI_DISP_SetAttrEx函数进一步设置视频显示设备的图像效果,然后进一步调用HI_MAPI_DISP_Start/HI_MAPI_DISP_SetWindowAttr/HI_MAPI_DISP_SetWindowAttrEx/HI_MAPI_DISP_StartWindow来配置属性,使能VO显示部分。

然后,我们可以将一张图片转换为YUV 格式,然后调用HI_MAPI_DISP_SendFrame函数送到VO部分,正常的话,就会在屏幕上显示出对应的图片。

猜你喜欢

转载自blog.csdn.net/u011003120/article/details/105595926