飛凌小課堂丨基于IMX6X系列3.0.35內核的LCD移植
本文主要使用平臺是 imx6x 系列, linux3.0.35 操作系統。參考用戶資料是OKMX6Q-C、OKMX6DL-C (Linux)用戶資料-2018.11.28。
我們在調試LCD屏幕是否能夠在開發板上使用的時候,首先應該判斷屏幕硬件上使用的線序是否能夠和開發板上的硬件線序一致;硬件上能夠接到開發板上才能夠談后邊的軟件調試。接著硬件接好后判斷LCD屏幕是否被點亮,如果屏幕不能夠點亮,先要檢查一下PWM背光控制;屏幕能夠被點亮了,我們才能夠調試顯示,也就是我們這篇文章的主要目的。
下面我們以調試10.4吋LCD屏幕顯示為例,簡單說一下LCD調試時軟件需要做的主要修改。
1、關于uboot部分的修改
關于UBOOT部分的修改,主要的作用是能夠正常顯示開機logo,以及將內核需要的參數信息傳遞給內核。UBOOT修改主要涉及到以下兩個文件:
? 修改uboot-2009-08/include/configs/mx6q_sabresd.h中的顯示參數,如下面兩張圖片的紅色方框部分
? 修改board/freescale/mx6q_sabresd/mx6q_sabresd.c文件系統,添加LCD顯示的參數:紅色部分為添加項。
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、內核相關部分修改
內核部分的LCD配置,就是LCD屏幕系統啟動后的正常顯示。主要修改一個文件就可以了。
修改linux-3.0.35/drivers/video/mxc/mxc_lcdif.c文件,在以下結構體中添加紅色部分,紅色部分的參數我們介意看到和UBOOT中的參數是一致的。
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,},
};
特別強調:
AT104-WVGA這個名字需要在UBOOT中的設置以及內核中的設置保持一致,名稱沒有限制,唯一要求是UBOOT和內核中一定要一致。
LCD顯示部分我們經常涉及到的修改,主要是以上提到的部分,修改完成后將重新編譯生成的鏡像燒寫到開發板中,接上10.4吋LCD屏就可以看到,屏幕能夠正常顯示了。
3、相關參數理解
對于涉及到的LCD參數值的設置,可能有些客戶不太了解,下面小編簡單說下自己的理解:
首先看一下在內核的include/linux/fb.h文件中關于fb_videomode的定義:
以上定義的參數和UBOOT中也是對應的。這些值是由LCD廠家提供的屏體手冊來確定的。
接著我們以10.4吋為例看一下10.4吋屏的屏體手冊中的參數
其中圖中紅色方框的28指的是vertical的Blanking典型值,紅色方框中的256指的是Horizontal的Blanking的典型值。
下面有個框圖展示了這些參數的關系:
通過以上示意圖我們可以了解到,在10.4吋屏的屏體手冊中
Left_margin+right_margin+hsync_len=256
Upper_margin+lower_margin+vsync_len=28
我們在設置left_margin,right_margin,hsync_len三個值得時候保證他們的和是256即可,在upper_margin,lower_margin,vsync_len三個值得時候保證他們的和是28即可。
有些LCD手冊中會直接給出這6個參數的值,那么就可以根據硬件手冊給出的值直接設置,調試的時候微調即可。
pxclock參數的確定方法:
dotclock=1/dotclock,其中dotclock可以選取手冊中的典型值40MHz,那么計算出pixclock=25000皮秒
實際刷新頻率=40000000Hz÷((Left_margin+right_margin+hsync_len+xres)*(Upper_margin+lower_margin+vsync_len+yres))≈60Hz
我們將修改后的鏡像燒寫到開發板之后,通過fbset命令可以看到屏幕設置的實際參數如下圖:
手冊上提供的這些參考值,可以根據實際的使用情況微調。
簡單的一個表,明確一下fb_videomode的各個成員的意義:
名稱 |
手冊簡稱 |
中文名 |
意義 |
name |
No |
名字 |
液晶屏名字(可選) |
refresh |
No |
刷新頻率 |
刷新頻率(通常為60Hz) |
xres |
No |
行寬 |
每行的像素個數 |
yres |
No |
屏幕高度 |
屏幕的行數 |
pixclock |
No |
像素時鐘 |
每個像素時鐘周期的長度,單位是皮秒(10的負12次方分之1秒) |
left_margin |
HBP (Horizontal Back Porch) |
水平后沿 |
在每行或每列的象素數據開始輸出時要插入的象素時鐘周期數 |
right_margin |
HFP (Horizontal Front Porch ) |
水平前沿 |
在每行或每列的象素結束到LCD 行時鐘輸出脈沖之間的象素時鐘數 |
upper_margin |
VBP (Vertical Back Porch) |
垂直后沿 |
在垂直同步周期之后幀開頭時的無效行數 |
lower_margin |
VFP (Vertical Front Porch) |
垂直前沿 |
本幀數據輸出結束到下一幀垂直同步周期開始之前的無效行數 |
hsync_len |
HPW (HSYNC plus width) |
行同步脈寬 |
單位:像素時鐘周期 也有手冊簡稱為HWH(HSYNC width) |
vsync_len |
VPW (VSYNC width) |
垂直同步脈寬 |
單位:顯示一行的時間th 也有手冊簡稱為VWH(VSYNC width) |
sync |
No |
同步極性設置 |
可以根據需要設置FB_SYNC_HOR_HIGH_ACT(水平同步高電平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高電平有效) |
vmode |
No |
No |
在內核中的大多數示例都直接置為FB_VMODE_NONINTERLACED。interlaced的意思是交錯[隔行]掃描,電視中使用2:1的交錯率, 即每幀分兩場,垂直掃描兩次,一場掃描奇數行,另一場掃描偶數行。很顯然LCD目前不是這種模式。 |
本篇只是給初學者起到一個拋磚引玉的作用,很多參數沒有細研究,在此不做過多解釋。LCD方面的驅動以及支持很博大精深,有興趣的粉絲可以自己研究研究,大家也可以登錄飛凌官方技術論壇了解更多相關內容。
相關產品 >
-
FETMX6Q-C核心板
i.MX6Q核心板板層出不窮,要如何選擇?飛凌解讀i.mx6Q芯片強性能為您推薦四核A9架構的i.MX6Q產品精選,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工業級核心板,歡迎采購。 i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構的i.MX6Q四核處理器設計,核心板小尺寸核心板搭配獨特的薄款連接器,讓設計隨心所欲!
了解詳情 -
OKMX6Q-C開發板
雙千兆飛凌嵌入式iMX6Q開發板,板對板連接器,纖薄之際,次底板支持iMX6Q和iMX6DL核心板。i.MX6Q開發板與i.MX6DL開發板資源豐富,原理圖、PCB、軟件資源、硬件資源下載,技術支持等。歡迎選購
了解詳情 -
FETMX6Q-S核心板
NXP iMX6Quad系列具有四個內核,運行頻率達1.2 GHz,帶有1 MB L2緩存和64位DDR3或2通道、32位LPDDR2支持。飛凌提供商業級iMX6Q核心板,工業級iMX6Q核心板,兼容一同底板。具有抗震,抗氧化,抗干擾,更快速升級產品等優勢。保定飛凌嵌入式專注imx6,imx6開發板,飛思卡爾imx6等ARM嵌入式核心控制系統研發、設計和生產,是imx6,imx6開發板,飛思卡爾imx6提供者,imx6系列產品現已暢銷全國,歡迎咨詢!
了解詳情 -
OKMX6Q-S3開發板
飛凌嵌入式提供iMX6Q開發板,iMX6解決方案,iMX6Q核心板,i.MX6Q開發板解決方案。iMX6Q穩定、快速、性價比高,歡迎選購 NXP iMX6系列芯片全支持,升級簡配無憂替換。 了解詳情