Bootloader中LCD硬件初始化和软件驱动程序设计

发布者:算法之手最新更新时间:2018-03-06 来源: eefocus关键字:Bootloader  LCD  硬件初始化  软件驱动 手机看文章 扫描二维码
随时随地手机看文章

    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所示。

b.JPG

    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.2 LCD控制器和LCD驱动嚣的硬件连接

    ILI9481是一个单芯片TFT液晶显示驱动器,通常LCD控制器和LCD驱动器之间有并口、串口、RGB三种接口。采用RGB接口时,控制信息(行同步、场同步等)由主控制器发送;采用并口、串口时,控制信息包含在发送的图像数据中,该项目采用的是C6310 LCD控制器和ILI9481驱动器,它们采用并口连接,图2描述了LCD主控制器和ILI9481的连接。


c.JPG

    驱动中针对硬件的操作主要为主控制器寄存器的配置,命令和图像的传输由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中的主要寄存器及其说明。d.JPG

    连接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所示。

e.JPG

    从流程图可以看出,当EOF中断产生之后,就可以配置LCD控制器下一帧数据的起始地址。此时,这些配置不会在当前帧起效,而是在下一帧起效,如果需要当前命令发送完毕之后发送图像数据,L4_WINTH需配置为大于实际命令发送个数。本驱动为了让LCD控制器传送一帧图像后停止工作,当L4_EOF中断到来后,配置下一帧发送的命令为0x30003。

LCD驱动程序设计
    LCD驱动程序开发过程中,主要需要实现的是底层驱动程序,底层驱动大体分为两个部分:硬件初始化部分和实现splash_screen函数。
4.1 硬件初始化实现
    硬件初始化部分主要由display_init函数来实现,主要包括初始化LCD控制器、初始化LCD处理器、Frame-buffer设备的配置等工作,主要实现的函数如下:
    g.JPG

    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图像的地址为0x14000000。图像显示函数如下:

    g.JPG
    h.JPG

    LCD显示数据大小是由显示模式和显示屏尺寸大小共同决定的。根据设计要求,使用的是320X480个像素、16bpp的256色LCD,显示一屏图像所需的显示缓冲为320×480×16位。在显示缓冲器中,每一个像素都占一个字节,且每个字节又要区分RGB格式。在显示图像时,需要配置相应的寄存器,这些工作在初始化LCD控制器已经完成。其次,确定图像缓冲区的首地址,这个地址在4字节对齐的边界上,而且要在SDRAM的4 MB空间之间,显示缓冲区的数据会直接显示到显示屏上。LCD上显示的不同图像信息就是显示缓冲区内不同数据的输出。

    5 LK的测试与调试

    在该模块下编写了一个Makefile文件,在调试LK模块时,可以单独编译LK模块,这样就节约了开发的时间。编译LK模块,得到1k.bin文件。开发板上电后,进入U盘模式,用最新生成的1k. bin文件替换掉U盘中原始的文件,通过超级终端连接串口,启动LK。LK启动打印信息如图4所示,LK能正常工作,并能执行LCD显示驱动。

a.JPG

    结语

    本文通过对Bootloader的研究,提出了一种Android详细给出了LCD控制器操作流程和LCD的驱动设计。系统启动正常,运行稳定,达到了设计的要求。尽管LCD手机在LK启动过程中实现LCD显示的设计方案,并且的种类很多,但驱动程序的设计都可以遵循一定的模式,可以根据自己设计的需求选择合适的方法。该方法对Android系统开发具有一定的借鉴意义和参考价值。


关键字:Bootloader  LCD  硬件初始化  软件驱动 引用地址:Bootloader中LCD硬件初始化和软件驱动程序设计

上一篇:多任务看门狗设计在uC/OS-II 系统上的应用
下一篇:STM32 中嵌套向量中断控制的理解

推荐阅读最新更新时间:2024-03-16 15:56

单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片
#include reg52.h #define uchar unsigned char #define uint unsigned int #define LCD12864Data P2//LCD12864点阵型液晶显示器输入输出数据/命令端口 sbit LCD12864_RS=P0^7;//LCD12864点阵型液晶显示器数据/命令选择端 sbit LCD12864_RW=P0^6;//LCD12864点阵型液晶显示器读/写端 sbit LCD12864_EN=P0^5;//LCD12864点阵型液晶显示器使能端 //太阳 uchar code sun ={0x00,0x00,0x00,0x00,0x00,0x00,0x00
[单片机]
51单片机学习:LCD1602液晶显示实验
实验名称:LCD1602液晶显示实验 接线说明: 实验现象:下载程序后,LCD1602上显示字符信息 注意事项: ***************************************************************************************/ #include public.h #include lcd1602.h /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 ******
[单片机]
如何匹配汽车TFT-LCD面板的色彩亮度
对伽马校正的需求源于CRT电视显示器的发明。CRT使用电子束光栅来照亮显示器前面板背后的荧光涂层。所施加的栅极控制电压按比例地控制发光强度,并遵守冥次法则:发光强度 = 控制电压的伽马次方。这种控制具有内在的非线性性质。CRT的标称伽马值为大约2.5。另一方面,人眼具有反向响应,对灰度级的较暗部分的变化相对敏感。因此,为使最终图像对人眼显示出灰度级真实深度的变化,必须在图像传输前对红、绿和蓝信号进行伽马校正。该校正在视频源系统中进行,如电视广播摄像头。 本白皮书将介绍如何通过伽马校正(亦称伽马校准)来确保汽车TFT-LCD面板的亮度一致和色彩匹配。我们将讨论如何使用14通道可编程伽马缓冲器来校准LCD面板的伽马响应,并介绍高、标称
[汽车电子]
如何匹配汽车TFT-<font color='red'>LCD</font>面板的色彩亮度
Proteus C51仿真学习板7——LCD1602
LCD1602作为最基础的字符型液晶显示屏,能过显示16x02=32个字符。那么时序的操作——读写是最主要的内容,今天就带大家一起读读时序。 在看时序图前,对LCD的引脚功能要了解,才能更好的读懂时序。 这里除了电源(1、2)、背光(15、16)、对比度(3)外,主要是控制信号和数据信号。 RS:数据/命令选择引脚,即=1写入数据,=0写入命令; RW:读写选择引脚,即=1读数据,=0写数据; EN:使能引脚;D0-D8:8位数据位。 所以:当RS=0,RW=0时,写入指令;当RS=1,RW=0时,写入数据;当RS=0,RW=1时,读忙信号;当RS=1,RW=1时,读数据。 这里忙信号主要是D7引脚,即D7=0
[单片机]
Proteus C51仿真学习板7——<font color='red'>LCD</font>1602
PI推出BridgeSwitch IC为驱动的单相无刷直流电机精调控制软件
Power Integrations推出采用BridgeSwitch IC作为驱动的单相无刷直流电机精调控制软件 美国加利福尼亚州圣何塞,深耕于高压集成电路高能效功率变换领域的知名公司 Power Integrations 今日发布Motor-Expert软件,这是一款嵌入C语言应用程序、库及控制GUI的软件。使用该公司BridgeSwitch无刷直流(BLDC)电机驱动器IC的设计人员借助该软件可对单相电机的运行性能进行精确的控制和调整。无刷直流电机广泛用于现代高效家电应用,如家电中的压缩机、风扇和水泵,以及吊扇和室内空调系统。 无刷直流电机通常使用三个绕组(多相),需要六个高压IGBT或MOSFET才能运行。Motor
[电源管理]
PI推出BridgeSwitch IC为<font color='red'>驱动</font>的单相无刷直流电机精调控制<font color='red'>软件</font>
基于ARM芯片S3C2410的TFT-LCD驱动方法
    S3C2410是三星公司生产的基于ARM920T内核的RISC微处理器,主频率可达203MHz,适用于信息家电、Smart Phone、Tablet、手持设备、移动终端等领域。其中,集成的LCD控制器具有通用性,可与大多数的LCD显示模块接口。     PD064VT5是一种用非晶硅TFT作为开关器件的有源矩阵液晶显示器,该模块包括TFT-LCD显示屏、驱动电路和背光源,其接口为TTL电平。分辨率为640 x480像素,可通过18bit数据信号显示262 144种色彩。     1 S3C2410的LCD控制器     S3C2410中的LCD控制器可用于传输视频数据并产生必要的控制信号(像VFRAME、VLI
[嵌入式]
ARM-bootloader-C语言环境设计
一、栈初始化 1、概念解析 1.1栈 栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出。栈底是第一个进栈的数据所处的位置,栈顶是最后进栈数据所处的位置。 1.2满栈和空栈 根据SP指针指向的位置,栈可以分为满栈和空栈。 1、满栈:当堆栈指针SP总是指向最后压入堆栈的数据 2、空栈:当堆栈指针SP总是指向下一个将要放入数据的空位置 ARM采用的是满栈 1.3、升/降栈 1、升栈:随着数据的入栈,SP指针从低地址- 高地址移动 2、降栈:随着数据的入栈,SP指针从高地址- 低地址移动 ARM采用的是降栈。有时候我们会说ARM采用的是满降栈。 1.4、栈帧
[单片机]
ARM-<font color='red'>bootloader</font>-C语言环境设计
使用NI LabVIEW对手机LCD组件进行灵活可靠的自动化测试
"我们选择了美国国家仪器公司的即成可用的硬件模块,并使用LabVIEW和NI TestStand软件开发应用程序,我们只用了12天就搭建了功能完备的测试系统,这远远超出了客户对我们的期望。" - Senthil Raj Desappan, Apna Technologies & Solutions Pvt. Ltd. 挑战: 在14天内,必须搭建一个 自动化测试 系统,对手机LCD各个配件,包括LCD屏幕,LCD屏幕背光灯,扬声器,感应磁铁,麦克风,和实时时钟 电池 进行完备的功能性测试,以及针对不同类型的所需测试搭建一个独立的平台. 解决方案: 我们使用美国国家仪器公司的PXI平台开发了一个高可靠和 灵活的测试系
[测试测量]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved