HI3556V200 Linux+Liteos雙系統學習(7)----Liteos端對接RGB888 OLED螢幕

Stoneshen1211發表於2020-11-15


參考文件:
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部分,正常的話,就會在螢幕上顯示出對應的圖片。

相關文章