飛凌小課堂丨基于IMX6X系列3.0.35內(nèi)核的LCD移植

原創(chuàng) 2020-03-05 16:49:00 imx6x linux LCD移植

本文主要使用平臺(tái)是 imx6x 系列, linux3.0.35 操作系統(tǒng)。參考用戶資料是OKMX6Q-C、OKMX6DL-C (Linux)用戶資料-2018.11.28。

我們?cè)谡{(diào)試LCD屏幕是否能夠在開發(fā)板上使用的時(shí)候,首先應(yīng)該判斷屏幕硬件上使用的線序是否能夠和開發(fā)板上的硬件線序一致;硬件上能夠接到開發(fā)板上才能夠談后邊的軟件調(diào)試。接著硬件接好后判斷LCD屏幕是否被點(diǎn)亮,如果屏幕不能夠點(diǎn)亮,先要檢查一下PWM背光控制;屏幕能夠被點(diǎn)亮了,我們才能夠調(diào)試顯示,也就是我們這篇文章的主要目的。

下面我們以調(diào)試10.4吋LCD屏幕顯示為例,簡(jiǎn)單說(shuō)一下LCD調(diào)試時(shí)軟件需要做的主要修改。

1、關(guān)于uboot部分的修改

關(guān)于UBOOT部分的修改,主要的作用是能夠正常顯示開機(jī)logo,以及將內(nèi)核需要的參數(shù)信息傳遞給內(nèi)核。UBOOT修改主要涉及到以下兩個(gè)文件:

? 修改uboot-2009-08/include/configs/mx6q_sabresd.h中的顯示參數(shù),如下面兩張圖片的紅色方框部分

 

 

? 修改board/freescale/mx6q_sabresd/mx6q_sabresd.c文件系統(tǒng),添加LCD顯示的參數(shù):紅色部分為添加項(xiàng)。

static struct fb_videomode displays[] = {

{

.name = "AT104-WVGA",

.refresh = 60,

.xres = 800,

.yres = 600,

.pixclock = 25000,

.left_margin = 210,

.right_margin = 40,

.upper_margin = 23,

.lower_margin = 3,

.hsync_len = 6,

.vsync_len =2,

.sync = FB_SYNC_CLK_LAT_FALL,

.vmode = FB_VMODE_NONINTERLACED,

.flag = 0,

.mode = FB_VIDEOMODE_LCD,

},、

 

2、內(nèi)核相關(guān)部分修改

內(nèi)核部分的LCD配置,就是LCD屏幕系統(tǒng)啟動(dòng)后的正常顯示。主要修改一個(gè)文件就可以了。

修改linux-3.0.35/drivers/video/mxc/mxc_lcdif.c文件,在以下結(jié)構(gòu)體中添加紅色部分,紅色部分的參數(shù)我們介意看到和UBOOT中的參數(shù)是一致的。

static struct fb_videomode lcdif_modedb[] = {

       ………………….

        /* 800x480 @ 60 Hz , pixel clk @ 33.3MHz */

        "AT070-WVGA", 60, 800, 480, 30030, 210, 46, 22, 23, 10, 10,

        FB_SYNC_CLK_LAT_FALL,

        FB_VMODE_NONINTERLACED,

        0,},

        …………………………………….

        {

        "AT104-WVGA", 60, 800, 600, 25000, 210,40, 23, 3, 6, 2,

        FB_SYNC_CLK_LAT_FALL,

        FB_VMODE_NONINTERLACED,

        0,},

};

特別強(qiáng)調(diào):

AT104-WVGA這個(gè)名字需要在UBOOT中的設(shè)置以及內(nèi)核中的設(shè)置保持一致,名稱沒(méi)有限制,唯一要求是UBOOT和內(nèi)核中一定要一致。

LCD顯示部分我們經(jīng)常涉及到的修改,主要是以上提到的部分,修改完成后將重新編譯生成的鏡像燒寫到開發(fā)板中,接上10.4吋LCD屏就可以看到,屏幕能夠正常顯示了。

3、相關(guān)參數(shù)理解

對(duì)于涉及到的LCD參數(shù)值的設(shè)置,可能有些客戶不太了解,下面小編簡(jiǎn)單說(shuō)下自己的理解:

首先看一下在內(nèi)核的include/linux/fb.h文件中關(guān)于fb_videomode的定義:

 

以上定義的參數(shù)和UBOOT中也是對(duì)應(yīng)的。這些值是由LCD廠家提供的屏體手冊(cè)來(lái)確定的。

接著我們以10.4吋為例看一下10.4吋屏的屏體手冊(cè)中的參數(shù)

 

其中圖中紅色方框的28指的是vertical的Blanking典型值,紅色方框中的256指的是Horizontal的Blanking的典型值。

下面有個(gè)框圖展示了這些參數(shù)的關(guān)系:

 

通過(guò)以上示意圖我們可以了解到,在10.4吋屏的屏體手冊(cè)中

Left_margin+right_margin+hsync_len=256

Upper_margin+lower_margin+vsync_len=28

我們?cè)谠O(shè)置left_margin,right_margin,hsync_len三個(gè)值得時(shí)候保證他們的和是256即可,在upper_margin,lower_margin,vsync_len三個(gè)值得時(shí)候保證他們的和是28即可。

有些LCD手冊(cè)中會(huì)直接給出這6個(gè)參數(shù)的值,那么就可以根據(jù)硬件手冊(cè)給出的值直接設(shè)置,調(diào)試的時(shí)候微調(diào)即可。

 pxclock參數(shù)的確定方法:

dotclock=1/dotclock,其中dotclock可以選取手冊(cè)中的典型值40MHz,那么計(jì)算出pixclock=25000皮秒

實(shí)際刷新頻率=40000000Hz÷((Left_margin+right_margin+hsync_len+xres)*(Upper_margin+lower_margin+vsync_len+yres))≈60Hz

我們將修改后的鏡像燒寫到開發(fā)板之后,通過(guò)fbset命令可以看到屏幕設(shè)置的實(shí)際參數(shù)如下圖:

 

手冊(cè)上提供的這些參考值,可以根據(jù)實(shí)際的使用情況微調(diào)。

簡(jiǎn)單的一個(gè)表,明確一下fb_videomode的各個(gè)成員的意義:

名稱

手冊(cè)簡(jiǎn)稱

中文名

意義

name

No

名字

液晶屏名字(可選)

refresh

No

刷新頻率

刷新頻率(通常為60Hz)

xres

No

行寬

每行的像素個(gè)數(shù)

yres

No

屏幕高度

屏幕的行數(shù)

pixclock

No

像素時(shí)鐘

每個(gè)像素時(shí)鐘周期的長(zhǎng)度,單位是皮秒(10的負(fù)12次方分之1秒)

left_margin

HBP (Horizontal Back Porch)

水平后沿

在每行或每列的象素?cái)?shù)據(jù)開始輸出時(shí)要插入的象素時(shí)鐘周期數(shù)

right_margin

HFP (Horizontal Front Porch )

水平前沿

在每行或每列的象素結(jié)束到LCD 行時(shí)鐘輸出脈沖之間的象素時(shí)鐘數(shù)

upper_margin

VBP (Vertical Back Porch)

垂直后沿

在垂直同步周期之后幀開頭時(shí)的無(wú)效行數(shù)

lower_margin

VFP (Vertical Front Porch)

垂直前沿

本幀數(shù)據(jù)輸出結(jié)束到下一幀垂直同步周期開始之前的無(wú)效行數(shù)

hsync_len

HPW (HSYNC plus width)

行同步脈寬

單位:像素時(shí)鐘周期

也有手冊(cè)簡(jiǎn)稱為HWH(HSYNC width)

vsync_len

VPW (VSYNC width)

垂直同步脈寬

單位:顯示一行的時(shí)間th

也有手冊(cè)簡(jiǎn)稱為VWH(VSYNC width)

sync

No

同步極性設(shè)置

可以根據(jù)需要設(shè)置FB_SYNC_HOR_HIGH_ACT(水平同步高電平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高電平有效)

vmode

No

No

在內(nèi)核中的大多數(shù)示例都直接置為FB_VMODE_NONINTERLACED。interlaced的意思是交錯(cuò)[隔行]掃描,電視中使用2:1的交錯(cuò)率, 即每幀分兩場(chǎng),垂直掃描兩次,一場(chǎng)掃描奇數(shù)行,另一場(chǎng)掃描偶數(shù)行。很顯然LCD目前不是這種模式。

本篇只是給初學(xué)者起到一個(gè)拋磚引玉的作用,很多參數(shù)沒(méi)有細(xì)研究,在此不做過(guò)多解釋。LCD方面的驅(qū)動(dòng)以及支持很博大精深,有興趣的粉絲可以自己研究研究,大家也可以登錄飛凌官方技術(shù)論壇了解更多相關(guān)內(nèi)容。


相關(guān)產(chǎn)品 >

  • FETMX6Q-C核心板

    i.MX6Q核心板板層出不窮,要如何選擇?飛凌解讀i.mx6Q芯片強(qiáng)性能為您推薦四核A9架構(gòu)的i.MX6Q產(chǎn)品精選,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工業(yè)級(jí)核心板,歡迎采購(gòu)。  i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構(gòu)的i.MX6Q四核處理器設(shè)計(jì),核心板小尺寸核心板搭配獨(dú)特的薄款連接器,讓設(shè)計(jì)隨心所欲!

    了解詳情
    FETMX6Q-C核心板
  • OKMX6Q-C開發(fā)板

    雙千兆飛凌嵌入式iMX6Q開發(fā)板,板對(duì)板連接器,纖薄之際,次底板支持iMX6Q和iMX6DL核心板。i.MX6Q開發(fā)板與i.MX6DL開發(fā)板資源豐富,原理圖、PCB、軟件資源、硬件資源下載,技術(shù)支持等。歡迎選購(gòu)

    了解詳情
    OKMX6Q-C開發(fā)板
  • FETMX6Q-S核心板

    NXP iMX6Quad系列具有四個(gè)內(nèi)核,運(yùn)行頻率達(dá)1.2 GHz,帶有1 MB L2緩存和64位DDR3或2通道、32位LPDDR2支持。飛凌提供商業(yè)級(jí)iMX6Q核心板,工業(yè)級(jí)iMX6Q核心板,兼容一同底板。具有抗震,抗氧化,抗干擾,更快速升級(jí)產(chǎn)品等優(yōu)勢(shì)。保定飛凌嵌入式專注imx6,imx6開發(fā)板,飛思卡爾imx6等ARM嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計(jì)和生產(chǎn),是imx6,imx6開發(fā)板,飛思卡爾imx6提供者,imx6系列產(chǎn)品現(xiàn)已暢銷全國(guó),歡迎咨詢!
    了解詳情
    FETMX6Q-S核心板
  • OKMX6Q-S3開發(fā)板

    飛凌嵌入式提供iMX6Q開發(fā)板,iMX6解決方案,iMX6Q核心板,i.MX6Q開發(fā)板解決方案。iMX6Q穩(wěn)定、快速、性價(jià)比高,歡迎選購(gòu) NXP iMX6系列芯片全支持,升級(jí)簡(jiǎn)配無(wú)憂替換。 了解詳情
    OKMX6Q-S3開發(fā)板

推薦閱讀 換一批 換一批