• 正文
    • 硬件原理
    • IOMUX配置
    • 設(shè)備節(jié)點(diǎn)添加
    • 編譯測(cè)試
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-開發(fā)板適配之LCD

02/17 08:55
669
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

這一節(jié)我們主要介紹內(nèi)核階段LCD的調(diào)試,通過(guò)這節(jié)內(nèi)容的掌握,我們就可以輕松適配滿足自己分辨率需求的屏幕了。

硬件原理

NXPi.MX6ULL EVK板的LCD相關(guān)引腳跟ELF?1開發(fā)板使用的是同一組LCD引腳。i.MX6ULL只有一組LCD引腳,只不過(guò)EVK板用的是RGB888模式,ELF?1開發(fā)板使用的是RGB565模式。

上圖紅框中是LCD顯示相關(guān)的引腳,對(duì)于LCD_DATA0-LCD_DATA15、LCD_HSYNC、LCD_VSYNC、LCD_DE、LCD_PCLK這些引腳,NXP EVK和ELF?1開發(fā)板使用的是同一組,我們不需要修改,只需要注釋掉LCD_DATA16-LCD_DATA23這幾個(gè)引腳的配置。PWM_BLT背光調(diào)節(jié)引腳,使用的是N17,PAD NAME為GPIO1_IO08(實(shí)際上跟NXP EVK使用的也是同一個(gè)背光調(diào)節(jié)引腳)。LCD_PWREN引腳是LCD電源控制引腳,是由SN74HC595D擴(kuò)展芯片擴(kuò)展出來(lái)的引腳。

IOMUX配置

確定引腳之后,我們開始配置。打開設(shè)備樹arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,在iomuxc節(jié)點(diǎn)下可以看到關(guān)于lcd data引腳 IOMUX配置的子節(jié)點(diǎn):pinctrl_lcdif_dat,注釋掉LCD_DATA16-LCD_DATA23這幾個(gè)引腳的配置:

此節(jié)點(diǎn)下面有l(wèi)cd控制相關(guān)引腳的配置節(jié)點(diǎn)pinctrl_lcdif_ctrl,我們不做更改:

PWM_BLT引腳PAD NAME是GPIO1_IO08,需要將此引腳復(fù)用成為PWM功能,在iomuxc節(jié)點(diǎn)中已經(jīng)存在了此引腳的PWM功能配置:

LCD_PWREN引腳,需要拉高,來(lái)開啟LCD電源,該引腳需要通過(guò)配置SN74HC595D設(shè)備控制該引腳高低。SN74HC595D芯片是通過(guò)SPI擴(kuò)展IO資源的芯片。本方案使用SHIFT_SDI(GPIO5_IO10)、SHIFT_NOE (GPIO5_IO8)、SHIFT_STCP(GPIO5_IO7)、SHIFT_SHCP(GPIO5_IO11)四個(gè)引腳的GPIO功能模擬SPI與SN74HC595D芯片通信,擴(kuò)展出QA-QH共8路GPIO資源,其中QH就是用于控制LCD電源使能的LCD_PWREN引腳。

ELF?1開發(fā)板跟NXP EVK板使用的是同一方案,所以,在內(nèi)核中已經(jīng)存在該芯片的驅(qū)動(dòng)并且在設(shè)備樹中已經(jīng)存在了關(guān)于該芯片的配置節(jié)點(diǎn):

IOMUX的配置節(jié)點(diǎn)在iomux_snvs:

我們現(xiàn)在只需要保證QH引腳輸出為高就可以了,在上圖的SN74HC595D節(jié)點(diǎn)的registers-default屬性是配置默認(rèn)擴(kuò)展后的IO輸出電平的。這里設(shè)置的0xaf,QH對(duì)應(yīng)0xaf最高位為1,保證了LCD_PWREN默認(rèn)為高電平

設(shè)備節(jié)點(diǎn)添加

設(shè)備樹中已經(jīng)存在lcdif節(jié)點(diǎn):

注釋掉display0節(jié)點(diǎn):

在根節(jié)點(diǎn)下添加display0節(jié)點(diǎn):

因?yàn)镋LF?1開發(fā)板出廠默認(rèn)的屏幕分辨率為1024x600,所以需要修改屏幕參數(shù):

clock-frequency = <51200000>;

hactive = <1024>;

vactive = <600>;

hfront-porch = <160>;

hback-porch = <160>;

hsync-len = <1>;

vback-porch = <23>;

vfront-porch = <12>;

vsync-len = <1>;

ELF?1開發(fā)板 LCD接口沒(méi)有引出復(fù)位引腳,我們注釋掉關(guān)于lcdif_reset引腳的配置&pinctrl_lcdif_ctrl。

其中bus-width屬性是指數(shù)據(jù)總線的寬度,硬件電路上我們使用的是LCD_DATA0-LCD_DATA15共16根數(shù)據(jù)線,所以bus-width應(yīng)改為16;bits-per-pixel表示每個(gè)像素占用的bit位,我們使用的是RGB565模式,即16個(gè)bit位,所以這里是16。Clock-frequencey屬性設(shè)置的是像素時(shí)鐘頻率。Hactive和vactive是屏的像素分辨率,緊接著的6行是屏體的一些參數(shù)。再下面的四行hsync-active到pixelclk-active,設(shè)置的是行場(chǎng)信號(hào)、DE信號(hào)、時(shí)鐘信號(hào)的極性。

如果使用1024x600的LCD屏,除了修改上面的屏幕參數(shù)以外還需要修改bus-width參數(shù):

display0: display {

????????bits-per-pixel = <16>;

????????bus-width = <16>;

然后開始背光PWM調(diào)節(jié)信號(hào)的節(jié)點(diǎn)添加,實(shí)際已存在的PWM1節(jié)點(diǎn)和backlight節(jié)點(diǎn),就是用于LCD背光調(diào)節(jié),這里不作修改:

&pwm1 {

?????????pinctrl-names = “default”;

?????????pinctrl-0 = <&pinctrl_pwm1>;

?????????status = “okay”

};

?

backlight {

???????compatible = “pwm-backlight”;

???????pwms = <&pwm1 0 5000000>;

???????brightness-levels = <0 4 8 16 32 64 128 255>;

???????default-brightness-level = <6>;

???????status = “okay”;

};

pwm1的節(jié)點(diǎn)跟前面章節(jié)介紹的pwm2功能一樣,backlight設(shè)備節(jié)點(diǎn)引用的pwm1功能。Compatible用于跟pwm背光調(diào)節(jié)驅(qū)動(dòng)匹配,pwms屬性用于設(shè)置所引用的pwm和其最大輸出頻率。Brightness-levels設(shè)置不同的亮度等級(jí)。Default-brightness-level設(shè)置默認(rèn)的亮度等級(jí)。

編譯測(cè)試

編譯設(shè)備樹并拷貝到開發(fā)板:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$?make dtbs

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

進(jìn)行sync操作后斷電,接上1024x600分辨率的LCD屏,重啟開發(fā)板,看到顯示正常畫面。

相關(guān)推薦