飛淩小課堂丨基于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系列芯片全支持,升級簡配無憂替換。 了解詳情