0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Bootloader中LCD硬件初始化和軟件驅(qū)動(dòng)程序設(shè)計(jì)

m3eY_edn_china ? 來源:未知 ? 作者:鄧佳佳 ? 2018-03-07 14:05 ? 次閱讀

前言

Android系統(tǒng)在正常啟動(dòng)中,刷屏功能一般在內(nèi)核中執(zhí)行,而Bootloader的任務(wù)應(yīng)該是執(zhí)行硬件初始化,并盡快跳轉(zhuǎn)到Linux內(nèi)核。在Bootloader啟動(dòng)過程中使能一個(gè)顯示驅(qū)動(dòng),實(shí)現(xiàn)刷屏功能,并不違背這一目標(biāo)。本文通過對(duì)Bootloader的原理分析和嵌入式芯片C6310中LCD控制器的研究,設(shè)計(jì)了Bootloader中LCD硬件初始化和軟件驅(qū)動(dòng)程序。該設(shè)計(jì)完善了Bootloader的擴(kuò)展功能,加快了手機(jī)動(dòng)畫的實(shí)現(xiàn),改善了客戶的使用體驗(yàn)。

Android自2011年以來實(shí)現(xiàn)了計(jì)算機(jī)誕生以來最快速度的用戶群體增長(zhǎng),目前Android以每天85萬新激活數(shù)的速度快速征服世界,在世界范圍內(nèi)成為占有率最高的智能手機(jī)操作系統(tǒng)。根據(jù)賽諾的調(diào)研報(bào)告,Android系統(tǒng)在中國(guó)的市場(chǎng)份額高達(dá)74.7%。然而很多硬件制造商在舊設(shè)備的升級(jí)問題上動(dòng)作緩慢。Android 4.0的配置要求比起之前的Android系統(tǒng)有較大的提高,導(dǎo)致很多廠商在中低端市場(chǎng)的新機(jī)型和主推機(jī)型都無法達(dá)到最低配置要求。根據(jù)市場(chǎng)的需求,低端Android手機(jī)存在著巨大商機(jī)。在低價(jià)格的情況下,如何實(shí)現(xiàn)高配置的要求,成為手機(jī)開發(fā)商研究的重點(diǎn)。

對(duì)于Android系統(tǒng),Bootloader是基于特定平臺(tái)來實(shí)現(xiàn)的。Booloader是否解鎖關(guān)系到各方的利益,解鎖Bootloader將會(huì)給用戶帶來很大的好處,Android用戶將能夠自行根據(jù)需要刷寫固件,去掉可能導(dǎo)致扣費(fèi)的運(yùn)營(yíng)商服務(wù),得到更加多樣的Android體驗(yàn)。因此,本文根據(jù)定制的實(shí)際平臺(tái),提出了一種面向客戶需求的實(shí)現(xiàn)Bootloader擴(kuò)展功能的設(shè)計(jì)方案。

1 Bootloador的基本原理及功能介紹

Bootloader(系統(tǒng)啟動(dòng)加載器),其實(shí)就是在系統(tǒng)啟動(dòng)之前運(yùn)行的一段程序。Bootloader的作用是對(duì)硬件設(shè)備初始化,建立內(nèi)存空間映像圖,從而把系統(tǒng)的軟件環(huán)境帶到一個(gè)合適的狀態(tài)。這樣,系統(tǒng)在調(diào)用內(nèi)核時(shí)就準(zhǔn)備好真正的環(huán)境,最終引導(dǎo)系統(tǒng)正常啟動(dòng)。對(duì)于Android系統(tǒng),通常并沒有PC機(jī)那樣的周件程序BIOS,因此Bootloader必須完成整個(gè)系統(tǒng)的加載任務(wù)。而且對(duì)于嵌入式系統(tǒng),其硬件的差別也是很大的,在操作系統(tǒng)啟動(dòng)之前,必須完成這些硬件的初始化工作,這就導(dǎo)致嵌入式系統(tǒng)Bootloader的功能和具體實(shí)現(xiàn)都比PC系統(tǒng)復(fù)雜得多。

LK(Linux Kernel)是小內(nèi)核小操作系統(tǒng),是AndroidBootloader的核心。在高通代碼中,Android Bootloader位于bootable\bootloader\1k目錄下,Bootloader的功能性設(shè)計(jì)主要在app\aboot.c下,aboot_init函數(shù)是LK的功能入口點(diǎn)。aboot_init的執(zhí)行過程如下:

①設(shè)置NAND/EMMC讀取信息頁面大小;

②讀取按健信息。判斷是正常開機(jī)、進(jìn)入fastboot,還是進(jìn)入recovery模式;

③從NAND中加載內(nèi)核;

④啟動(dòng)內(nèi)核。實(shí)現(xiàn)刷屏功能可以在讀取按鍵之前,所以Bootloader擴(kuò)展功能的設(shè)計(jì)流程如圖1所示。

2 LCD控制器及外圍設(shè)備連接

2.1 LCD控制器介紹

LCD控制器是Android手機(jī)開發(fā)項(xiàng)目中C6310芯片的必備模塊,它負(fù)責(zé)將需要顯示的數(shù)據(jù),如操作界面、圖像等送給LCD顯示設(shè)備。在手機(jī)的應(yīng)用中,LCD顯示設(shè)備主要有以下幾類:被動(dòng)顯示模式STN屏、主動(dòng)顯示模式TFT屏,以及主動(dòng)模式OLED屏。根據(jù)顯示顏色不同,又可以分為單色屏和彩色屏。LCD控制器不直接和LCD顯示屏相連,而是和LCD驅(qū)動(dòng)器相連,這樣簡(jiǎn)化了接口信號(hào)數(shù)量和顯示控制過程。LCD控制器時(shí)序由控制信號(hào)和圖像數(shù)據(jù)兩部分組成,其中控制信號(hào)包括VCLK、HSYNC、VSYNC,分別為像素時(shí)鐘信號(hào)、行同步信號(hào)、幀同步信號(hào)。作為幀同步信號(hào)的VSYNC,每發(fā)出一個(gè)脈沖,都意味著新的一屏圖像數(shù)據(jù)開始發(fā)送。而作為行同步信號(hào)的HSYNC,每發(fā)出一個(gè)脈沖,都意味著新的一行圖像資料開始發(fā)送。在幀同步以及行同步的頭尾都必須保留回掃時(shí)間。這樣的時(shí)序安排起源于CRT顯示器電子槍偏轉(zhuǎn)所需的時(shí)間,但后來成為實(shí)際上的工業(yè)標(biāo)準(zhǔn),因此TFT屏也包含了回掃時(shí)間。

C6310芯片內(nèi)部集成了一個(gè)LCD控制器,通常配置寄存器來控制其工作,命令和圖像數(shù)據(jù)的傳輸由LCD主控制器自動(dòng)完成。C6310的LCD控制器采用并行或串行接口工作時(shí),最多支持3層圖像合并(L1、L2、L3),L4層用作命令存儲(chǔ)空間。命令存儲(chǔ)空間中一個(gè)命令有20位,占用32位空間。第一個(gè)0~17位對(duì)應(yīng)LCD_CMD寄存器中0~17位;第19位用作命令、數(shù)據(jù)切換位。

2.2LCD控制器和LCD驅(qū)動(dòng)囂的硬件連接

ILI9481是一個(gè)單芯片TFT液晶顯示驅(qū)動(dòng)器,通常LCD控制器和LCD驅(qū)動(dòng)器之間有并口、串口、RGB三種接口。采用RGB接口時(shí),控制信息(行同步、場(chǎng)同步等)由主控制器發(fā)送;采用并口、串口時(shí),控制信息包含在發(fā)送的圖像數(shù)據(jù)中,該項(xiàng)目采用的是C6310 LCD控制器和ILI9481驅(qū)動(dòng)器,它們采用并口連接,圖2描述了LCD主控制器和ILI9481的連接。

驅(qū)動(dòng)中針對(duì)硬件的操作主要為主控制器寄存器的配置,命令和圖像的傳輸由LCD主控制器完成。

3 LCD控制器操作流程設(shè)計(jì)

C6310采用L3層作為背景層、L4為命令層。當(dāng)緩沖區(qū)的圖像數(shù)據(jù)準(zhǔn)備好以后,通過B_LCD_BmpOntoScreen16Bpp_ILI9481()函數(shù)啟動(dòng)LCD控制器,并將圖像數(shù)據(jù)搬移到LCD驅(qū)動(dòng)器。B_LCD_BmlpOntoScreen16Bpp_ILI9481()啟動(dòng)控制器后,啟動(dòng)一個(gè)等待隊(duì)列,等待圖像數(shù)據(jù)傳輸完畢。

圖像搬移過程中會(huì)產(chǎn)生中斷,這里用到L4_EOF、L3_EOF、和L1_EOF中斷,其中L4_EOF為命令傳輸完成中斷,L3_EOF和L1_EOF分別為L(zhǎng)3層和L1層數(shù)據(jù)傳輸完成中斷。首先,C6310_LCDC向LCD驅(qū)動(dòng)器發(fā)送一組數(shù)據(jù),命令發(fā)送完畢后產(chǎn)生L4_EOF中斷。然后,C6310_LCDC向LCD驅(qū)動(dòng)器發(fā)送圖像數(shù)據(jù),發(fā)送完畢后產(chǎn)生L3_EOF和L1_EOF中斷。

在LCD進(jìn)行數(shù)據(jù)顯示前,首先要對(duì)LCD控制器的相關(guān)寄存器進(jìn)行正確的設(shè)置。表1是C6310中的主要寄存器及其說明。

連接16位RGB并行接口屏,其寄存器的操作流程如下;

①將命令index和命令數(shù)據(jù)寫入存儲(chǔ)器,如果命令是16位,則每一個(gè)字對(duì)應(yīng)15:0是命令。如果命令為8位,則每一個(gè)字對(duì)應(yīng)7:0是命令,通過每一個(gè)字中的第17位、WR_RD和第16位A0控制命令屬性,如果該命令是最后一個(gè)命令,命令的第19位設(shè)置為1。

②配置LCD寄存器。配置第4層的起始地址為命令存儲(chǔ)地址,配置LCD_PCONF控制讀寫時(shí)序,配置LCD_L1_SIZE的屏幕大小,配置LCD_PCONF控制讀寫時(shí)序,配置LCD_LCONF控制每層的開關(guān)和透明覆蓋使能等。

③使能LCD控制位LCD_SEL,LCD控制器自動(dòng)讀取存儲(chǔ)器中數(shù)據(jù)傳輸?shù)浇涌凇?/p>

④等待L1_SOF中斷產(chǎn)生后,可以寫下一幀所需要的命令和修改其他層起始地址等。

⑤等待BOF中斷可以配置下一幀的LCD_CTRL寄存器或者每一層起始地址。

⑥如果連接的是并口或者串口LCD屏,在圖像數(shù)據(jù)寫入存儲(chǔ)器的同時(shí)將命令寫到第4層圖像對(duì)應(yīng)地址,LCD控制器會(huì)自動(dòng)讀取這些命令輸出。LCD控制器操作流程如圖3所示。

從流程圖可以看出,當(dāng)EOF中斷產(chǎn)生之后,就可以配置LCD控制器下一幀數(shù)據(jù)的起始地址。此時(shí),這些配置不會(huì)在當(dāng)前幀起效,而是在下一幀起效,如果需要當(dāng)前命令發(fā)送完畢之后發(fā)送圖像數(shù)據(jù),L4_WINTH需配置為大于實(shí)際命令發(fā)送個(gè)數(shù)。本驅(qū)動(dòng)為了讓LCD控制器傳送一幀圖像后停止工作,當(dāng)L4_EOF中斷到來后,配置下一幀發(fā)送的命令為0x30003。

4LCD驅(qū)動(dòng)程序設(shè)計(jì)
LCD驅(qū)動(dòng)程序開發(fā)過程中,主要需要實(shí)現(xiàn)的是底層驅(qū)動(dòng)程序,底層驅(qū)動(dòng)大體分為兩個(gè)部分:硬件初始化部分和實(shí)現(xiàn)splash_screen函數(shù)。
4.1 硬件初始化實(shí)現(xiàn)
硬件初始化部分主要由display_init函數(shù)來實(shí)現(xiàn),主要包括初始化LCD控制器、初始化LCD處理器、Frame-buffer設(shè)備的配置等工作,主要實(shí)現(xiàn)的函數(shù)如下:

fb_config首先使能I2S寫函數(shù),對(duì)ILI9481進(jìn)行復(fù)位操作,fbcon_setup函數(shù)記錄了LCD屏幕參數(shù),包括屏幕分辨率、時(shí)序參數(shù)、像素比特?cái)?shù)(bpp)等參數(shù),B_LCD_Init_ILI9481函數(shù)肩負(fù)著向framebuffer驅(qū)動(dòng)程序傳遞數(shù)據(jù)的任務(wù)。初始化LCD控制器的寄存器主要是對(duì)LCD的PCD、ARM_INYEN、PBUS_WIDTH、OUT_BPP、LCD_TYPE等寄存器進(jìn)行配置。LCD控制寄存器主要是對(duì)屏幕參數(shù)、ARM中斷使能、并口LCD中片選信號(hào)極性、LCD屏類型、時(shí)序特性進(jìn)行配置。主要寄存器如下:

PCD,配置像素時(shí)鐘分屏。

ARM_INTEN,配置ARM中斷使能信號(hào)。當(dāng)信號(hào)為0時(shí),達(dá)到中斷產(chǎn)生條件后,不產(chǎn)生送到ARM的中斷信號(hào);當(dāng)信號(hào)為1時(shí),達(dá)到中斷產(chǎn)生條件后,產(chǎn)生送到ARM的中斷。

PBUS_WIDTH,輸出數(shù)據(jù)線位寬,當(dāng)配置為并口顯示屏?xí)r有效。

OUT_BPP,配置BPP位寬。

LCD_TYPE,配置LCD屏類型選擇。00為普通RGB接口TFT顯示屏,01為Sharp接口TFT顯示屏,10為并口LCD顯示屏,11為串口LCD顯示屏。

4.2 讀取圖像信息

splash_screen函數(shù)主要是定義圖像的地址,通過framebuffer對(duì)圖像進(jìn)行顯示。這里將顯示的圖像放在了U盤文件中,當(dāng)LK啟動(dòng)時(shí),直接從SDRAM中讀取圖像信息,并定義bmp圖像的地

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • lcd
    lcd
    +關(guān)注

    關(guān)注

    34

    文章

    4389

    瀏覽量

    166771
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    233

    瀏覽量

    45477

原文標(biāo)題:做硬件9年了,心好累,當(dāng)初應(yīng)該做軟件!

文章出處:【微信號(hào):edn-china,微信公眾號(hào):EDN電子技術(shù)設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    視頻引擎初始化失敗怎么回事

    視頻引擎初始化失敗是一個(gè)常見的技術(shù)問題,它可能由多種原因引起,包括軟件沖突、硬件問題、驅(qū)動(dòng)程序問題、系統(tǒng)設(shè)置錯(cuò)誤等。要解決這個(gè)問題,需要對(duì)可能的原因進(jìn)行詳細(xì)的分析和診斷。 1.
    的頭像 發(fā)表于 09-18 18:18 ?601次閱讀

    Linux設(shè)備驅(qū)動(dòng)程序分類有哪些

    Linux設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的通信和控制。Linux設(shè)備驅(qū)動(dòng)程序的分類繁多,可以根據(jù)不同的標(biāo)準(zhǔn)進(jìn)行分類。 按
    的頭像 發(fā)表于 08-30 15:11 ?334次閱讀

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    在Linux系統(tǒng),驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。
    的頭像 發(fā)表于 08-30 15:02 ?298次閱讀

    linux驅(qū)動(dòng)程序主要有哪些功能

    Linux驅(qū)動(dòng)程序是操作系統(tǒng)與硬件設(shè)備之間進(jìn)行通信的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的數(shù)據(jù)交換和控制。Linux驅(qū)動(dòng)程序的主要功能包括以下幾個(gè)方面: 設(shè)備識(shí)別與
    的頭像 發(fā)表于 08-30 14:47 ?231次閱讀

    Keil變量不被初始化方法

    有些時(shí)候在我們的應(yīng)用過程要求變量有連續(xù)性,或者現(xiàn)場(chǎng)保留,例如Bootloader跳轉(zhuǎn),某種原因的復(fù)位過程我們有些關(guān)鍵變量不能被初始化,在不同的編譯環(huán)境下有不同的設(shè)置,本文就這個(gè)操作
    的頭像 發(fā)表于 08-30 11:47 ?373次閱讀
    Keil<b class='flag-5'>中</b>變量不被<b class='flag-5'>初始化</b>方法

    bootloader開多線程做引導(dǎo)程序,跳app初始化后直接進(jìn)hardfualt,為什么?

    過是沒有什么問題的,在做IAP跳app時(shí)發(fā)現(xiàn)多線程iap跳多線程app一跳進(jìn)去做完初始化就進(jìn)hardfault,然后單任務(wù)IAP跳多線程APP時(shí)程序跳進(jìn)去都能正常執(zhí)行這個(gè)有大神了解嗎,有想要源碼研究的我就貼出來。
    發(fā)表于 04-18 06:07

    MCU單片機(jī)GPIO初始化該按什么順序配置?為什么初始化時(shí)有電平跳變?

    GPIO初始化時(shí)有時(shí)鐘配置、模式配置、輸出配置、復(fù)用配置,那么在編寫初始化代碼時(shí),到底該按什么順序執(zhí)行呢?如果順序不當(dāng)那初始化過程可能會(huì)出現(xiàn)短暫的電平跳變。
    的頭像 發(fā)表于 02-22 11:07 ?1346次閱讀
    MCU單片機(jī)GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時(shí)有電平跳變?

    如何在PSOC 6初始化QSPI?

    *cfg,uint32_t hz) 我查看了 \" MTB CAT1 外圍設(shè)備驅(qū)動(dòng)程序的文檔。\"初始化不會(huì)那么復(fù)雜,對(duì)吧? 我的配置有什么問題? 在此先感謝。
    發(fā)表于 01-26 07:48

    串口初始化一般是初始化哪些內(nèi)容

    串口初始化是指在使用串口進(jìn)行數(shù)據(jù)通信之前,對(duì)串口進(jìn)行一系列的設(shè)置和配置,以確保串口能夠正常工作。串口初始化的內(nèi)容主要包括以下幾個(gè)方面: 串口硬件設(shè)置:首先,需要確定要使用的串口是哪一個(gè),通常計(jì)算機(jī)
    的頭像 發(fā)表于 01-04 09:39 ?2921次閱讀

    labview運(yùn)行后如何初始化

    需要?jiǎng)?chuàng)建一個(gè)新的項(xiàng)目。在開始菜單打開LabVIEW軟件,選擇"新建項(xiàng)目",然后選擇一個(gè)適合的文件夾來保存項(xiàng)目文件。在項(xiàng)目窗口中,可以添加各種不同的文件、VI(Virtual Instrument虛擬儀器)及其他資源。 確定程序
    的頭像 發(fā)表于 12-28 17:24 ?2334次閱讀

    自動(dòng)初始化機(jī)制原理詳解

    自動(dòng)初始化機(jī)制是指初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過宏定義的方式進(jìn)行申明,就會(huì)在系統(tǒng)啟動(dòng)過程中被執(zhí)行。這篇文章就來探索一下其中的奧秘, 簡(jiǎn)單理解其原理!
    的頭像 發(fā)表于 12-16 09:33 ?929次閱讀
    自動(dòng)<b class='flag-5'>初始化</b>機(jī)制原理詳解

    linux驅(qū)動(dòng)程序的主要流程和功能

    介紹Linux驅(qū)動(dòng)程序的主要流程和功能。 一、驅(qū)動(dòng)程序的加載和初始化 Linux系統(tǒng)在啟動(dòng)過程,會(huì)自動(dòng)加載已安裝的設(shè)備驅(qū)動(dòng)程序。加載
    的頭像 發(fā)表于 12-08 14:56 ?2085次閱讀

    AD7091r-4軟件初始化失敗怎么處理?

    沒有設(shè)定為默認(rèn)值 使用RESET引腳執(zhí)行硬件初始化后,寄存器會(huì)被重置為默認(rèn)值 使用 RESET 針硬件初始化后, 登記冊(cè)將被重置為默認(rèn)值 軟件
    發(fā)表于 12-01 06:31

    實(shí)戰(zhàn)經(jīng)驗(yàn) | Keil、IAR、CubeIDE 變量不被初始化方法

    要求變量有連續(xù)性,或者現(xiàn)場(chǎng)保留,例如 Bootloader 跳轉(zhuǎn),某種原因的復(fù)位過程我們有些關(guān)鍵變量不能被初始化,在不同的編譯環(huán)境下有不同的設(shè)置,本文就這個(gè)操作做總結(jié),分別介紹使用 Keil
    的頭像 發(fā)表于 11-24 18:05 ?3554次閱讀

    MSP430F5529硬件IIC驅(qū)動(dòng)OLED(初始化使用的寄存器)

    MSP430F5529硬件IIC驅(qū)動(dòng)OLED(初始化使用的寄存器)
    發(fā)表于 11-24 16:36 ?1次下載