ARM9+Linux下电子纸驱动的设计与实现
为实现在ARM9+Linux系统下对电子纸的快速、有效控制,设计了一种基于电子纸显示控制芯片(GD6210E)的电子纸驱动。根据S3C2440ARM9处理器和GD6210E的接口特点,利用S3C2440的GPIO口来扩展GD6210E,最后利用Linux为显示设备提供的帧缓冲专用接口编写驱动程序,完成电子纸的驱动。该驱动有利于电子纸的普及应用。
本文引用地址://m.amcfsurvey.com/article/172315.htm电子纸可以实现显示内容的重写,具有对比度高、重量轻、可以适当弯曲,且在断电的情况下,能保持原有的显示内容等优点。Linux是一种具有开放性、多用户、多任务、设备独立性、系统可靠安全、良好移植性等优点的操作系统[1],其内核可根据具体的运行平台进行适当的裁剪,这对于资源有限的嵌入式系统至关重要。因此,如何将电子纸显示屏移植应用到Linux操作系统的嵌入式平台下,引起了业界的广泛关注。
本文采用GD6210E作为电子纸显示屏的控制芯片,在S3C2440处理器上使用GPIO口对GD6210E进行扩展。编写、编译基于Linux中framebuffer的电子纸显示屏驱动程序。
1 系统架构与电子纸显示屏驱动电路接口设计
1.1 系统架构设计
本文搭建的嵌入式系统采用Samsung公司推出的S3C2440芯片为处理器。S3C2440采用ARM920T内核,拥有丰富的GPIO口,能够很好地对电子纸显示屏控制芯片实现扩展;外围设备有容量为128 MB的NAND Flash、64 MB的SDRAM、以太网以及扩展GD6210E电子纸显示屏控制芯片[2-3]等。嵌入式系统架构框图如图1所示。
1.2 电子纸显示屏控制芯片接口设计
GD6210E芯片是Giga Device Semiconductor公司开发的电子纸控制芯片。该控制芯片提供多种显示功能,如支持部分屏或整屏显示、全局或局部刷新、支持图像翻转等,从而能够减少CPU的运算时间,并支持CPU用命令访问内部寄存器和存储介质。
在接口设计上,本文使用S3C2440的GPD0~GPD15作为数据/命令的输入/输出口;GPC15作为探测GD6210E是否准备好下一次操作的引脚,若为1,说明在GD6210E上已完成一个操作,进入等待接收下一个操作命令状态;利用S3C2440的CLKOUT0引脚为GD6210E提供时钟源/S3C2440对GD6210E扩展接口如图2所示。
2 Linux下电子纸驱动程序设计
2.1 Linux驱动程序的一般编写方法
驱动程序是应用程序与硬件之间的一个中间软件层,没有main()函数,其工作过程是通过使用宏module_init(初始化函数名)将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止,等待被应用程序调用。应用程序通过调用设备驱动程序中实现的接口函数(如read()、ioctl()等)实现对硬件的操作。
本文设计的电子纸驱动程序基于framebuffer,整体分为两大部分:(1)GD6210E的驱动程序,其任务是完成S3C2440 GPIO口的设置、GD6210E初始化并使其处在运行状态;(2)完成framebuffer的填写和内核对显示设备驱动的注册。
2.2 Linux下GD6210E驱动程序
GD6210E是一个从设备,无法自主地工作,必须由外部的CPU对其发送命令,再把命令转换成能使电子纸显示屏做出相应动作的电平时序。GD6210E驱动程序分为以下部分。
(1)初始化GD6210E。首先分别利用Linux中的s3c-2410_gpio_cfgpin()和s3c2410 _gpio_setpin()两个函数设置复用GPIO口的引脚功能和引脚值。接口配置完后,再向GD6210E发出INIT_SYS_RUN命令,使芯片进入等待初始化状态;然后初始化GD6210E中的display engine,填写显示时序寄存器,配置显示时序。其中时序包括行数据输出时间、行同步时间、帧数据输出时间、帧同步时间;最后设置Image buffer和Updimage buffer在GD6210E中SDRAM的开始地址,至此初始化完成。GD6210E初始化流程如图3所示。
linux相关文章:linux教程
评论