在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Bootloader中LCD硬件初始化和軟件驅動程序設計

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

前言

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

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

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

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

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

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

①設置NAND/EMMC讀取信息頁面大小;

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

③從NAND中加載內核;

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

2 LCD控制器及外圍設備連接

2.1 LCD控制器介紹

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

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

2.2LCD控制器和LCD驅動囂的硬件連接

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

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

3 LCD控制器操作流程設計

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

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

在LCD進行數據顯示前,首先要對LCD控制器的相關寄存器進行正確的設置。表1是C6310中的主要寄存器及其說明。

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

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

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

③使能LCD控制位LCD_SEL,LCD控制器自動讀取存儲器中數據傳輸到接口。

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

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

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

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

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

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

PCD,配置像素時鐘分屏。

ARM_INTEN,配置ARM中斷使能信號。當信號為0時,達到中斷產生條件后,不產生送到ARM的中斷信號;當信號為1時,達到中斷產生條件后,產生送到ARM的中斷。

PBUS_WIDTH,輸出數據線位寬,當配置為并口顯示屏時有效。

OUT_BPP,配置BPP位寬。

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

4.2 讀取圖像信息

splash_screen函數主要是定義圖像的地址,通過framebuffer對圖像進行顯示。這里將顯示的圖像放在了U盤文件中,當LK啟動時,直接從SDRAM中讀取圖像信息,并定義bmp圖像的地

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • lcd
    lcd
    +關注

    關注

    34

    文章

    4438

    瀏覽量

    168396
  • bootloader
    +關注

    關注

    2

    文章

    235

    瀏覽量

    45737

原文標題:做硬件9年了,心好累,當初應該做軟件!

文章出處:【微信號:edn-china,微信公眾號:EDN電子技術設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-88:使用21xx編譯器在C初始化變量

    電子發燒友網站提供《EE-88:使用21xx編譯器在C初始化變量.pdf》資料免費下載
    發表于 01-13 15:54 ?0次下載
    EE-88:使用21xx編譯器在C<b class='flag-5'>中</b><b class='flag-5'>初始化</b>變量

    pcie設備驅動程序安裝步驟

    PCIe(Peripheral Component Interconnect Express)是一種高速串行計算機擴展總線標準,用于計算機內部硬件組件之間的連接。安裝PCIe設備驅動程序是確保硬件
    的頭像 發表于 11-13 10:32 ?1358次閱讀

    基于旋轉平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對于視覺慣性里程計(VIO)至關重要,因為不良的初始化會嚴重降低姿態精度。
    的頭像 發表于 11-01 10:16 ?441次閱讀
    基于旋轉平移解耦框架的視覺慣性<b class='flag-5'>初始化</b>方法

    TMS320C6000 McBSP初始化

    電子發燒友網站提供《TMS320C6000 McBSP初始化.pdf》資料免費下載
    發表于 10-26 10:10 ?0次下載
    TMS320C6000 McBSP<b class='flag-5'>初始化</b>

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

    視頻引擎初始化失敗是一個常見的技術問題,它可能由多種原因引起,包括軟件沖突、硬件問題、驅動程序問題、系統設置錯誤等。要解決這個問題,需要對可能的原因進行詳細的分析和診斷。 1.
    的頭像 發表于 09-18 18:18 ?1564次閱讀

    Linux設備驅動程序分類有哪些

    Linux設備驅動程序是操作系統與硬件設備之間的橋梁,負責實現硬件設備與操作系統之間的通信和控制。Linux設備驅動程序的分類繁多,可以根據不同的標準進行分類。 按
    的頭像 發表于 08-30 15:11 ?704次閱讀

    linux驅動程序如何加載進內核

    在Linux系統驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。
    的頭像 發表于 08-30 15:02 ?592次閱讀

    linux驅動程序主要有哪些功能

    Linux驅動程序是操作系統與硬件設備之間進行通信的橋梁,負責實現硬件設備與操作系統之間的數據交換和控制。Linux驅動程序的主要功能包括以下幾個方面: 設備識別與
    的頭像 發表于 08-30 14:47 ?465次閱讀

    linux驅動程序運行在什么空間

    Linux 驅動程序是操作系統的一部分,負責管理硬件設備與操作系統之間的交互。驅動程序運行在內核空間(Kernel Space),這是操作系統的核心部分,與用戶空間(User Space)相對。內核
    的頭像 發表于 08-30 14:37 ?527次閱讀

    Keil變量不被初始化方法

    有些時候在我們的應用過程要求變量有連續性,或者現場保留,例如Bootloader跳轉,某種原因的復位過程我們有些關鍵變量不能被初始化,在不同的編譯環境下有不同的設置,本文就這個操作
    的頭像 發表于 08-30 11:47 ?816次閱讀
    Keil<b class='flag-5'>中</b>變量不被<b class='flag-5'>初始化</b>方法

    請問esp32-s2能否實現RGB接口與DVP接口循環初始化io達到同時使用的效果?

    esp32-s2的LCD的RGB驅動和DVP功能同時公用一套i2s接口。在硬件設計上能否實現復用,并通過軟件上的時間片循環初始化io復用功能
    發表于 07-01 06:57

    bootloader開多線程做引導程序,跳app初始化后直接進hardfualt,為什么?

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

    怎么編寫Framebuffer驅動程序

    Framebuffer 驅動程序框架 分為上下兩層: fbmem.c:承上啟下 實現、注冊 file_operations 結構體 把 APP 的調用向下轉發到具體的硬件驅動程序
    的頭像 發表于 03-22 09:13 ?614次閱讀
    怎么編寫Framebuffer<b class='flag-5'>驅動程序</b>

    字符型、指針型等變量等該如何初始化

     對于數值類型的變量往往初始化為0,但對于其他類型的變量,如字符型、指針型等變量等該如何初始化呢?
    的頭像 發表于 03-18 11:02 ?1623次閱讀

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

    GPIO初始化時有時鐘配置、模式配置、輸出配置、復用配置,那么在編寫初始化代碼時,到底該按什么順序執行呢?如果順序不當那初始化過程可能會出現短暫的電平跳變。
    的頭像 發表于 02-22 11:07 ?1663次閱讀
    MCU單片機GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時有電平跳變?
    主站蜘蛛池模板: 久久天天躁狠狠躁夜夜躁 | 日韩美女拍拍免费视频网站 | 婷婷综合激情网 | 无遮挡高清一级毛片免费 | 成人伊人亚洲人综合网站222 | 色婷婷激婷婷深爱五月小说 | 久久99热国产这有精品 | 爱操成人网 | 国产一卡二卡≡卡四卡无人 | 天天做天天爱天天大综合 | 欧美成人精品久久精品 | 亚洲色图欧美在线 | 国产成人无精品久久久久国语 | 日本午夜大片免费观看视频 | 日本高清中文字幕在线观穿线视频 | 瑟瑟久久 | 国产精品三级在线播放 | 国内精品久久久久久影院老狼 | 永久黄网站色视频免费观看99 | 日本污视频网站 | 六月婷婷色 | 日韩欧美视频在线一区二区 | 亚洲另类激情综合偷自拍 | 新版天堂中文资源8在线 | 91啦中文在线观看 | 国产精品高清免费网站 | 2o18国产大陆天天弄 | 亚洲爱婷婷色婷婷五月 | 亚洲免费视频在线观看 | 天天干夜夜做 | 亚洲欧美卡通 动漫 丝袜 | 欧美精彩狠狠色丁香婷婷 | 精品国产一区二区三区国产馆 | 欧美一区二区在线观看视频 | 在线观看免费观看 | 有码日韩 | 国产狂喷冒白浆免费视频 | 色视频免费看 | 日本www色| 久久久久久久国产精品影院 | 亚洲最新黄色网址 |