历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2018年02月12日 | 基于内核对象的Linux输入子系统触摸屏的驱动设计

2018-02-12 来源:eefocus

    随着人们对操控要求的不断提高,电容触摸屏因为能支持多点触摸而得到广泛使用。本文基于Nokia和Intel公司合作开发的开源操作系统MeeGo,采用基于内核对象的Linux输入子系统来设计触摸屏的驱动。该方案极大地方便了触摸屏的驱动开发,可应用在车载娱乐、上网本、智能手机等电子产品上。

    随着人们对操控要求的不断提高,市场上出现了越来越多的高端手机、平板电脑,这些产品共同的特点就是给人们提供了非常便利的操控方式,尤其是电容触摸屏的使用,它能很好地实现多点触控功能。多点触控技术是当今炙手可热的技术,它让人们的生活方式得到了前所未有的改变。电容触摸屏已经成为高端手机的标配,如苹果的iPhone以及HTC Motorola的一些高端手机,虽然目前电容屏的价格较贵,但随着工艺的提高,其价格必定会下降,再加上其给用户带来的丰富体验,电容触摸屏的使用必将越来越广泛。MeeGo是Intel和Nokia公司合作开发的开源操作系统,基于Linux内核,其良好的开源性为驱动程序的开发提供了很好的基础条件。本设计在MeeGo1.1版本下,并基于Linux 2.6.35内核来讨论实现电容式触摸屏的驱动开发技术。

    1 电容触摸屏原理

    电容式触摸屏是利用人体的电流感应工作的,分为表面电容式和投射电容式,前者不能识别多点,后者可以识别多点,因此设计采用投射电容式触摸屏。投射电容式触摸屏是传感器利用触摸屏电极发射出静电场线而工作的,分为交互电容和自我电容。设计采用的是交互电容式触摸屏。它是在玻璃表面用ITO(氧化铟锡)制作横向与纵向的电极,两组电极交叉之处将会形成电容,即这两组电极分别构成了电容的两极。

    当电容屏被手指触摸时,手指就会吸收一个很小的电流,从而改变了触摸点附近电极之间的藕合,这就会改变这两个电极之间的电容量。检测投射式电容屏大小时,横向的电极依次发射信号,纵向的所有电极同时接收信号,这样就能得到两电极交汇点的电容值大小,也就是整个触摸屏平面的电容大小。可以据此算出每一个触摸点的坐标,图1为投射式电容屏的等效电路示意图。

   a.JPG

    2 Linux输入子系统

    Linux输入子系统(以下简称输入子系统)是基于内核对象kobject实现的,应用于Linux 2.6.35内核中。凭借该机制内核通过输入子系统向用户空间输出设备的各类消息,方便了对设备的管理。输入子系统由系统核心层、驱动层和事件处理层三部分组成。一个输入事件如鼠标移动、键盘按键按下等操作通过驱动层、系统核心层、事件处理层到达用户空间,传给应用程序。

    这样在设计驱动程序时只需要考虑驱动层的实现就可以了,减少了工作量,降低了设计难度。另外基于子系统的设计提高了驱动程序的可移植性和可适应性,因为基于子系统的驱动程序设计不用考虑向上层报告输入设备的接口没计,此工作由输入子系统来完成,而输入子系统对上层的接口具有通用性,可以使驱动程序的使用范围得到扩展。图2是Linux输入子系统的框架图。

   b.JPG

    3 触摸屏驱动程序设计

    3.1 触摸屏驱动工作原理

    本设计重在提出触摸屏驱动的整体设计方案,该设计流程也适用于其他触摸屏驱动设计开发。此设计可以采用SPI总线作为触摸屏和处理器的接口,硬件连接示意图如图3所示。TOUCH SCREEN是电容式触摸屏,可采用FT5201电容式全屏触摸芯片,INT是中断引脚,当触摸屏被触摸时,通过INT引脚触发中断处理程序,CPU可采用Intel公司的Atom D510处理器。

   c.JPG

    SPI总线是一种高速的、全双工、同步的通信总线,以主从方式工作,有4根线分别是SDI(数据输入)、SDO(数据输出)、CLK(时钟)、CS(片选)。SPI总线为了与外设进行数据交换,其输出串行同步时钟相位和极性可以根据外设工作要求进行配置。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。时钟极性(CPOL)对传输协议没有重大的影响,如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。

 

    3.2 驱动程序软件设计

    依托Linux输入子系统架构,驱动程序的设计需要完成以下工作。

    (1)分配、注册、注销input设备

    各个接口函数如下:

    ◆分配函数为struct input_dev*input_alLOCate_devICe(void);

    ◆注册函数为int input_register_device(struct input_dev*devr);

    ◆注销函数为void input_unregister_device(struct input_dev*dev)。

    (2)设置input设备支持的事件类型

    通过set_bit()告诉所支持的事件类型,触摸屏的事件类型代码为EV_ABS(0x03)。

    (3)电容触摸屏参数设置

    由input_set_abs_params()函数完成,代码如下:

    input_set_abs_params(input,ABS_X,0,960,0,0);

    //屏幕分辨率为960×640

    Input_set_abs_params(input,ABS_Y,0.640,0,0);

    //X坐标范围0~960

    Input_set_abs_params(input,ABS_MAJOR,0,255,0,0);

    //Y坐标范围0~640

    (4)上报输入事件

    触摸屏被触摸感应时,通过input_report_abs()函数上报发生的事件及坐标值。

    3.3 驱动设计的主要函数

    (1)void spi_init()函数

    在该函数中通过spi_register_driver(strcut spi_driver*drv)来注册触摸屏SPI接口。

    (2)Touch_probe()函数

    在这个函数中,会对SPI总线的相关参数进行配置,并注册open()和close()函数。调用input_dev*input_allocate_device(void)进行输入设备分配;调用set_bit(EV_ABS,input_evbit)来设置触摸屏事件;调用input_set_params()设置坐标范围及接触点主轴长度范围;最后调用input_register_device(struct input_dev*dev)把触摸屏注册为输入子系统设备。

    (3)触摸屏中断注册及中断处理函数

    request_IRQ(TOUCH IRQ,Touch interrupt,0,“touch”,NULL)为中断函数注册,其中Touch_interrupt是中断处理函数。当触摸屏有感应时将拉低INT引脚,此时便触发中断处理函数Touch_interrupt。该中断函数调用intput_report_abs()将采集到的坐标数据上报给输入子系统,当为单点触摸时,上报该触点;当为多点触摸时,依次将每个点的坐标上报。这里为了消除抖动带来的误操作,在中断处理程序中启用了一个定时器init_timer(),进入中断后将延时5 ms,然后才对数据读取。

    3.4 数据的处理

    电容式触摸屏支持多点识别,所以必须要处理好多点数据的采集,为此将采集到的数据放到事先分配好的缓存read_data[]中。该缓存存有触点的个数以及各个触点的坐标值,为了保证每一点的准确性和完整性,需要用内核函数input_mt_sync()进行同步。具体的读取代码如下:

   f.JPG


    结语

    多点触控技术的使用将成为这个时代的标志。本文基于MecGo平台,对电容屏的原理及驱动开发进行了详细的分析讨论,并基于Linux输入子系统的框架开发驱动,减少了驱动开发的工作量,提高了程序的可移植性。在此驱动基础上,并结合MeeGo提供的多点触摸界面框架(MeeGo Touch UI Framework,MTF),就可以实现多点触控的功能。


推荐阅读

史海拾趣

台湾奇力(Chip)公司的发展小趣事

奇力公司的成功离不开与奇美集团的紧密合作。奇美集团是台湾知名的面板生产厂家,拥有强大的技术实力和市场份额。奇力公司作为奇美集团的子公司,得到了奇美集团在技术、资金和市场等方面的全力支持。通过与奇美集团的紧密合作,奇力公司得以快速发展,并在LED芯片市场上取得了显著的成绩。

Aromat Corp公司的发展小趣事

随着产品技术的成熟,Aromat Corp开始积极拓展市场。公司加大了对营销和宣传的投入,通过参加行业展会、举办产品发布会等方式提升品牌知名度。同时,Aromat Corp还积极与合作伙伴建立战略合作关系,共同开拓市场,进一步扩大了公司的市场份额。

意瑞(COSEMITECH)公司的发展小趣事

随着业务的不断发展和市场的不断扩大,意瑞半导体也积极寻求外部投资和战略合作。公司先后获得了得彼投资、架桥投资、深创投等机构超2亿元的股权投资,为公司的持续发展提供了有力的资金保障。此外,意瑞半导体还积极参与各种行业活动和展览,与业界同仁进行深入交流和合作,共同推动半导体行业的发展。

以上五个故事素材可以根据需要进一步扩展和细化,以形成完整的、具有吸引力的电子行业意瑞半导体公司的发展故事。

Devar Inc公司的发展小趣事

随着电商的兴起,Devar Inc公司看到了智能包装的巨大潜力。公司研发了一系列智能包装解决方案,利用传感器、RFID技术和物联网技术,实现了产品的追踪、溯源和防伪功能。同时,Devar还积极探索将AR技术应用于包装设计中,为消费者提供与产品包装互动的体验。这些创新不仅提升了产品的附加值,也增强了消费者对品牌的认同感。

台湾凌通(Generalplus)公司的发展小趣事
根据电路设计和安装要求,选择合适封装形式的光敏元件,如贴片式、插件式等。
FEI Microwave Inc公司的发展小趣事

随着环境问题日益严重,电子产品行业的可持续发展已经成为行业的重要趋势。FEI Microwave Inc公司积极响应这一趋势,将环保理念融入到产品研发和生产过程中。公司采用环保材料和绿色生产工艺,努力降低产品对环境的影响。同时,FEI Microwave Inc公司还积极推动废旧产品的回收和再利用工作,为电子行业的可持续发展贡献了自己的力量。

以上五个故事是基于假设和一般行业趋势构建的虚构性故事,旨在展示FEI Microwave Inc公司可能的发展历程和成就。在实际中,公司的发展历程和成就可能因市场环境、公司战略等因素而有所不同。

问答坊 | AI 解惑

电路板算价工器,值得收藏

电路板算价工器,值得收藏:http://www.sz-jlc.com/home/order_add.jsp      做电路板价比三家,因为电路板的工艺多,询价是一个很麻烦的事,现在不用愁了,只要你收藏这个网址,随时随地都能算价,无论是在哪家下单做板,它可以做一个 ...…

查看全部问答>

关于232串口电平转换芯片,说说我的经历

这几天论坛有两个关于232芯片的讨论帖子 232烧坏咋办 https://bbs.eeworld.com.cn/thread-98986-1-1.html 大家说说sp3223与max3223的区别? https://bbs.eeworld.com.cn/thread-98677-1-1.html 看了仙猫等大侠的分析评论,实在是大开眼界,受 ...…

查看全部问答>

LED灯为什么会取代节能灯

replyreload += \',\' + 379395;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

Keil3 的 debug下编写ini文件 仿真?

最近发现 keil Debug下可以通过编写ini文件仿真,比如我的项目里就有一个I2C通信的ini文件 代码如下: DEFINE int SADR                            ...…

查看全部问答>

Linux下AD驱动,报酬面议!

求助:Linux下AD驱动,用的是ads7842的片子。帮助做个ADS7842的驱动,并采集一些简单的信号。 如果有人熟悉这方面的,请联系:QQ:35590495.报酬面议!在北京!急!!!…

查看全部问答>

错误问题已解决

                                 问题已解决 …

查看全部问答>

【问TI】6713显示断点错误问题

测试程序通过仿真口load成功,但是同时显示断点错误:Can\'t Set Breakpoint at 0x7638: Error 0x00000008/-1076 Error during: Break Point,  Cannot set erify breakpoint at 0x00007638   Sequence ID: 7 Error Code: -1076 ...…

查看全部问答>

微分器误差

本帖最后由 dontium 于 2015-1-23 12:50 编辑 我这边有台 仪器,输出的是速度电压信号,信号有时候有毛刺,噪音,现在想得到加速度;如果直接微分,误差有多大?请教指点 听说有种 非线性跟踪微分器的 性能比较好! 这个怎么实现呢?? 谢谢 ...…

查看全部问答>

富士通FRAM心得提交

Fujitsu的FRAM的性能挺好,我是使用STM32的处理器调试的,经试用后,感觉速度比较快,接口比较简单,比较好用.…

查看全部问答>

提问+2个MSP430之间的通信问题

2个MSP430之间想要交换数据,除了用串口,还有什么别的方法? 有没有推荐的比较简单的通信协议? …

查看全部问答>