飛凌小課堂丨基于IMX6X系列3.0.35內(nèi)核的LCD移植
本文主要使用平臺是 imx6x 系列, linux3.0.35 操作系統(tǒng)。參考用戶資料是OKMX6Q-C、OKMX6DL-C (Linux)用戶資料-2018.11.28。
我們在調(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屏幕顯示為例,簡單說一下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)啟動后的正常顯示。主要修改一個(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è)置保持一致,名稱沒有限制,唯一要求是UBOOT和內(nèi)核中一定要一致。
LCD顯示部分我們經(jīng)常涉及到的修改,主要是以上提到的部分,修改完成后將重新編譯生成的鏡像燒寫到開發(fā)板中,接上10.4吋LCD屏就可以看到,屏幕能夠正常顯示了。
3、相關(guān)參數(shù)理解
對于涉及到的LCD參數(shù)值的設(shè)置,可能有些客戶不太了解,下面小編簡單說下自己的理解:
首先看一下在內(nèi)核的include/linux/fb.h文件中關(guān)于fb_videomode的定義:
以上定義的參數(shù)和UBOOT中也是對應(yīng)的。這些值是由LCD廠家提供的屏體手冊來確定的。
接著我們以10.4吋為例看一下10.4吋屏的屏體手冊中的參數(shù)
其中圖中紅色方框的28指的是vertical的Blanking典型值,紅色方框中的256指的是Horizontal的Blanking的典型值。
下面有個(gè)框圖展示了這些參數(shù)的關(guān)系:
通過以上示意圖我們可以了解到,在10.4吋屏的屏體手冊中
Left_margin+right_margin+hsync_len=256
Upper_margin+lower_margin+vsync_len=28
我們在設(shè)置left_margin,right_margin,hsync_len三個(gè)值得時(shí)候保證他們的和是256即可,在upper_margin,lower_margin,vsync_len三個(gè)值得時(shí)候保證他們的和是28即可。
有些LCD手冊中會直接給出這6個(gè)參數(shù)的值,那么就可以根據(jù)硬件手冊給出的值直接設(shè)置,調(diào)試的時(shí)候微調(diào)即可。
pxclock參數(shù)的確定方法:
dotclock=1/dotclock,其中dotclock可以選取手冊中的典型值40MHz,那么計(jì)算出pixclock=25000皮秒
實(shí)際刷新頻率=40000000Hz÷((Left_margin+right_margin+hsync_len+xres)*(Upper_margin+lower_margin+vsync_len+yres))≈60Hz
我們將修改后的鏡像燒寫到開發(fā)板之后,通過fbset命令可以看到屏幕設(shè)置的實(shí)際參數(shù)如下圖:
手冊上提供的這些參考值,可以根據(jù)實(shí)際的使用情況微調(diào)。
簡單的一個(gè)表,明確一下fb_videomode的各個(gè)成員的意義:
名稱 |
手冊簡稱 |
中文名 |
意義 |
name |
No |
名字 |
液晶屏名字(可選) |
refresh |
No |
刷新頻率 |
刷新頻率(通常為60Hz) |
xres |
No |
行寬 |
每行的像素個(gè)數(shù) |
yres |
No |
屏幕高度 |
屏幕的行數(shù) |
pixclock |
No |
像素時(shí)鐘 |
每個(gè)像素時(shí)鐘周期的長度,單位是皮秒(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í)的無效行數(shù) |
lower_margin |
VFP (Vertical Front Porch) |
垂直前沿 |
本幀數(shù)據(jù)輸出結(jié)束到下一幀垂直同步周期開始之前的無效行數(shù) |
hsync_len |
HPW (HSYNC plus width) |
行同步脈寬 |
單位:像素時(shí)鐘周期 也有手冊簡稱為HWH(HSYNC width) |
vsync_len |
VPW (VSYNC width) |
垂直同步脈寬 |
單位:顯示一行的時(shí)間th 也有手冊簡稱為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ò)率, 即每幀分兩場,垂直掃描兩次,一場掃描奇數(shù)行,另一場掃描偶數(shù)行。很顯然LCD目前不是這種模式。 |
本篇只是給初學(xué)者起到一個(gè)拋磚引玉的作用,很多參數(shù)沒有細(xì)研究,在此不做過多解釋。LCD方面的驅(qū)動以及支持很博大精深,有興趣的粉絲可以自己研究研究,大家也可以登錄飛凌官方技術(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è)級核心板,歡迎采購。 i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構(gòu)的i.MX6Q四核處理器設(shè)計(jì),核心板小尺寸核心板搭配獨(dú)特的薄款連接器,讓設(shè)計(jì)隨心所欲!
了解詳情 -
OKMX6Q-C開發(fā)板
雙千兆飛凌嵌入式iMX6Q開發(fā)板,板對板連接器,纖薄之際,次底板支持iMX6Q和iMX6DL核心板。i.MX6Q開發(fā)板與i.MX6DL開發(fā)板資源豐富,原理圖、PCB、軟件資源、硬件資源下載,技術(shù)支持等。歡迎選購
了解詳情 -
FETMX6Q-S核心板
NXP iMX6Quad系列具有四個(gè)內(nèi)核,運(yùn)行頻率達(dá)1.2 GHz,帶有1 MB L2緩存和64位DDR3或2通道、32位LPDDR2支持。飛凌提供商業(yè)級iMX6Q核心板,工業(yè)級iMX6Q核心板,兼容一同底板。具有抗震,抗氧化,抗干擾,更快速升級產(chǎn)品等優(yōu)勢。保定飛凌嵌入式專注imx6,imx6開發(fā)板,飛思卡爾imx6等ARM嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計(jì)和生產(chǎn),是imx6,imx6開發(fā)板,飛思卡爾imx6提供者,imx6系列產(chǎn)品現(xiàn)已暢銷全國,歡迎咨詢!
了解詳情 -
OKMX6Q-S3開發(fā)板
飛凌嵌入式提供iMX6Q開發(fā)板,iMX6解決方案,iMX6Q核心板,i.MX6Q開發(fā)板解決方案。iMX6Q穩(wěn)定、快速、性價(jià)比高,歡迎選購 NXP iMX6系列芯片全支持,升級簡配無憂替換。 了解詳情