哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

m3eY_edn_china ? 來源:未知 ? 作者:鄧佳佳 ? 2018-03-07 14:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

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

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

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

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

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

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

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

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

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

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

2.1 LCD控制器介紹

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PCD,配置像素時鐘分屏。

ARM_INTEN,配置ARM中斷使能信號。當(dāng)信號為0時,達(dá)到中斷產(chǎn)生條件后,不產(chǎn)生送到ARM的中斷信號;當(dāng)信號為1時,達(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對圖像進(jìn)行顯示。這里將顯示的圖像放在了U盤文件中,當(dāng)LK啟動時,直接從SDRAM中讀取圖像信息,并定義bmp圖像的地

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

    關(guān)注

    36

    文章

    4630

    瀏覽量

    177892
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    245

    瀏覽量

    48282

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    SDIO 初始化卡在帶有 IW610 模塊的定制板上,初始化SDIO接口時,程序會陷入循環(huán),為什么?

    BLE。 我將預(yù)處理器部分的宏更新為: wifi_iw610_board_murata_2ll_m2 當(dāng)嘗試初始化 SDIO 接口時,程序會得到陷入循環(huán). 我附上了它掛起的代碼部分的屏幕截圖。 誰能提出導(dǎo)致此問題的原因,或
    發(fā)表于 04-17 06:07

    解碼器初始化失敗,在 i.MX8MP (imx-vpu-hantro) 上使用 hevcdec 失敗怎么解決?

    0.00001DECODING DONE DWL 層似乎無法初始化,可能是由于缺少硬件綁定或驅(qū)動程序注冊。我已經(jīng)驗證了 CMA 可用,但 Hantro VPU 驅(qū)動程序可能無法正
    發(fā)表于 04-08 07:13

    ELF-RV112B RKNN模型加載與運行時初始化

    ELF-RV112B RKNN模型加載與運行時初始化
    的頭像 發(fā)表于 04-03 16:08 ?135次閱讀
    ELF-RV112B RKNN模型加載與運行時<b class='flag-5'>初始化</b>

    PC強實時運動控制(一):C#的EtherCAT總線初始化(下)

    通過使用配置工具導(dǎo)出ZAR文件進(jìn)行EtherCAT總線初始化
    的頭像 發(fā)表于 02-05 10:00 ?2110次閱讀
    PC強實時運動控制(一):C#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

    MCU工程初始化,到底該不該交給工具?

    初始化 MCU特殊外設(shè)或硬件約束 工程驗證和調(diào)試 結(jié)論 交給工具并不意味著放棄控制 而是讓工程師從重復(fù)操作解放出來 專注于不可自動的高價值工作 審核編輯 黃宇
    的頭像 發(fā)表于 01-29 10:18 ?231次閱讀
    MCU工程<b class='flag-5'>初始化</b>,到底該不該交給工具?

    深入解析rk平臺Android Bootloader核心代碼:從啟動流程到AVB驗證

    U-BootAndroid Bootloader的核心實現(xiàn),核心作用是 銜接硬件初始化與內(nèi)核啟動 ,主要負(fù)責(zé): ?讀寫Bootloader
    的頭像 發(fā)表于 01-22 07:06 ?460次閱讀
    深入解析rk平臺Android <b class='flag-5'>Bootloader</b>核心代碼:從啟動流程到AVB驗證

    EtherCAT總線初始化步驟

    的關(guān)鍵環(huán)節(jié),涉及硬件配置、軟件設(shè)置以及網(wǎng)絡(luò)拓?fù)涞慕ⅰR韵率荅therCAT總線初始化的詳細(xì)步驟,結(jié)合實際應(yīng)用場景和常見問題解決方案,為工程師提供系統(tǒng)的操作指南。 1.
    的頭像 發(fā)表于 12-22 10:10 ?900次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

    瀚海微SD NAND TF卡硬件識別與初始化類問題探討

    在瀚海微SD NAND/TF卡的實際應(yīng)用,硬件識別與初始化是保障設(shè)備正常運行的首要環(huán)節(jié),該環(huán)節(jié)出現(xiàn)故障會直接導(dǎo)致存儲卡無法投入使用,尤其在工業(yè)控制、車載設(shè)備等關(guān)鍵場景,可能引發(fā)設(shè)備
    的頭像 發(fā)表于 11-18 09:58 ?753次閱讀
    瀚海微SD NAND  TF卡<b class='flag-5'>硬件</b>識別與<b class='flag-5'>初始化</b>類問題探討

    TFT液晶屏開機時開機閃屏的原因和解決方法

    Bootloader可能會初始化顯示屏并顯示一個LOGO,但在引導(dǎo)到主操作系統(tǒng)(如Linux)時,內(nèi)核驅(qū)動程序會重新初始化顯示屏。這個 \"初始化
    發(fā)表于 10-18 11:49

    GraniStudio:IO初始化以及IO資源配置例程

    IO資源配置.gsp文件,點擊打開,完成導(dǎo)入。 2.功能說明 實現(xiàn)連接格拉尼控制器IO塊以及配置輸入輸出IO點。 2.1通過初始化IO算子連接格拉尼控制器IO塊,導(dǎo)入工程自動進(jìn)行連接。 2.2 通過IO配置算子輸出配置的IO表。 第一次使用GS軟件時操作步驟如下: (1)
    的頭像 發(fā)表于 08-22 17:34 ?1042次閱讀
    GraniStudio:IO<b class='flag-5'>初始化</b>以及IO資源配置例程

    GraniStudio:初始化例程

    說明 通過初始化運控板卡算子連接格拉尼總線型運控卡,導(dǎo)入工程自動進(jìn)行連接,此算子為使用運控控制板卡的第一項操作,后續(xù)運控算子需引用其輸出板卡對象才可使用。 3.異常處理 當(dāng)手動執(zhí)行初始化運控板卡算子出現(xiàn)錯誤時: 查看總線卡與驅(qū)動
    的頭像 發(fā)表于 08-22 16:45 ?1011次閱讀
    GraniStudio:<b class='flag-5'>初始化</b>例程

    aicube項目頁初始化異常是怎么回事?

    一打開軟件都出現(xiàn)“項目頁初始化異常”,新建項目顯示“最近項目加載異常 ” 期待結(jié)果和實際結(jié)果 軟硬件版本信息 嘉楠ai算法硬件平臺v1.4
    發(fā)表于 08-14 08:16

    zephyr設(shè)備驅(qū)動程序模型

    系統(tǒng)的所有驅(qū)動程序。 每種類型的驅(qū)動程序(例如 UART、SPI、I2C)都由通用類型 API 支持。 在此模型,驅(qū)動程序
    的頭像 發(fā)表于 07-29 10:34 ?821次閱讀
    zephyr設(shè)備<b class='flag-5'>驅(qū)動程序</b>模型

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對IOPORT模塊進(jìn)行初始化時需要根據(jù)情況配置它們。因此我們定義一個IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此該結(jié)構(gòu)體類型的變量可以包含IOPORT的相關(guān)
    的頭像 發(fā)表于 07-16 16:26 ?1545次閱讀

    IM 系列設(shè)備過載保護(hù)機制下界面初始化中斷的底層邏輯與解決方案

    ,系統(tǒng)立即啟動保護(hù)策略。而界面初始化過程依賴于設(shè)備穩(wěn)定的供電環(huán)境和充足的系統(tǒng)資源,當(dāng)過載保護(hù)機制觸發(fā)時,二者的關(guān)聯(lián)被打破,導(dǎo)致界面初始化中斷。從硬件層面看,供電模塊可能因過載切斷非必要電路;從
    的頭像 發(fā)表于 06-27 09:58 ?665次閱讀
    简阳市| 泌阳县| 鄄城县| 龙口市| 高密市| 克东县| 阿图什市| 宽甸| 五指山市| 枝江市| 密山市| 昌黎县| 盈江县| 宜都市| 奉贤区| 乌兰县| 丹江口市| 龙江县| 息烽县| 五大连池市| 通江县| 遂川县| 乌鲁木齐县| 东兴市| 新建县| 通海县| 闸北区| 澄江县| 通化市| 资源县| 新河县| 仙游县| 金川县| 云林县| 青冈县| 湖北省| 清水河县| 淮阳县| 札达县| 芮城县| 黄山市|