1 微型光学手指导航模组简介
微型光学手指导航模组,集感应测量光路、微型机械构造和数字/模拟微电子集成电路于一体,是高度微型化的机电一体化人机输入模块,其核心技术是光学手指导航OFN(Optical Finger Navigation),又称为单手指导航SFN(Single Finger Navigation)、光学轨迹板OTP(Optical Track Pad)或光学导航触键ONK(Optical Navigation Key)。不同厂家有不同的称谓,比较公认的是“光学手指导航OFN”。
简单地说,OFN模组就是高度微型化的鼠标。
1.1 工作原理
OFN模组,通常由红外LED光源、遮光触摸面板、光学透镜组和具有光敏阵列的片上处理/控制芯片组成,一般制作在便于集成应用的柔性线路FPC(Flexible Printing Circuit)板上。常用的OFNFPC,还集成了表面按键,即所说的“锅仔片(Metal Dome Switch)”,以简单地实现“点击确认”的功能。
OFN模组的工作原理如下:手指接触遮光触摸面板,光敏阵列检测到有目标活动,唤醒片上系统SoC投入正常工作状态,红外LED发光,启动检测光路,通过光学透镜组的折射和聚焦,由光敏阵列得到一幕一幕的图像数据信息;SoC从中抽象出不同的运动矢量MV(Motion Vector),进而根据运动矢量在时间和空间上的相关性,计算出每次手指移动的平面相对量,形成运动数据,并及时通过数据接口向外传输出去。手指移出后,光敏阵列通过检测还可以使SoC转入休眠状态,以节省功耗。
遮光触摸面板,需要能够应对强光辐射干扰及外界湿度变化影响。
运动相关性的判断与计算是OFN的核心,通常沿用光电鼠标中成熟的简化的13点、9点、7点或5点运动预测算法。还可以对得到的一系列数据,展开进一步的分析计算,得到“点击”、“双击”、“拖动”等伴随信息,进而实现传统鼠标的各种功能。
OFN形成的数据信息一般包括两类:控制信息和运动信息。控制信息指示是否运动、点击、双击、拖动等,运动信息即平面的X方向与Y方向相对位移量。
1.2 技术特征
从应用角度概括起来,OFN的性能特征如下:
① 超薄超小设计。通常,外形面积在10 mm×10 mm以内,有效感光孔径在1.5 mm×1.5 mm以内,厚度在2?8~5?1 mm,也有2 mm厚度的OFN推出。
② 极低功耗设计。工作电流在2~16 mA,通常为3 mA;待机电流为80~150 μA,大多数器件为100 μA。
③ 直流供电需求。2.6~5.0 V范围,常用为2.8 V工作电压,正在朝自适应、更低的电源供应发展。
④ 灵活的多接口支持。可以通过常规数字接口I2C(InterIntegrated Circuit)或SPI(Serial Peripheral Interface)上传数据或接受主机配置,也有PS2鼠标接口或USB接口的;可以以中断方式向主机随时提示需要信息输入;可以通过复位和开关的形式接受主机统一调度。
⑤ 可选或自适应的光敏阵列分辨率,200~1250 CPI(Dots Per Inch)通常为800CPI。
⑥ 位移数据设置。通常为8位补码格式。
⑦ 优良的EMC/EMI设计,2 kV以上的ESD(ElectroStatic Discharge)能力。
1.3 产品化应用
OFN一经推出,就得到了迅速应用,特别是各种各样的手机,无论是廉价的功能手机(feature phone)还是高性能的3G(3rd?Generation)智能手机(smart phone),无论是Nucleus MTK、ThreadX?展迅、Symbian体系还是Windows Mobile、ARMLinux/Android、MACOSXiPhone体系,如Samsung的i329/728/780/788/908/8510、Nokia的E72/N900、BlackBerry的8520/9700、LG的ks500/kt500、SonyEricsson的X1/X2/X3、Sharp的SH8020C、中兴的X60等,不胜枚举。
另外,在MID(Mobile Internet Devices)/MPC(Multimedia Personal Computer)/上网本、GPS导航、PMP(Portable Media Player)娱乐、数码相机/摄像机等大众化产品中,也在不断地得到广泛应用。不着重考虑成本和功耗的工农业过程控制、仪表仪器设备等行业领域,也在悄然进行OFN的扩展应用。
OFN应用前景十分壮观,需求推动着OFN的应用,应用促进着OFN的不断完善发展。
2 微型光学手指导航模组开发
2.1 应用器件选型
不少半导体公司进行了OFN器件及其模组的研发与生产,如Avago的ABDSA320、ST的VD5376、ATLab的ATA2188MOF与MOA器件及其FO1R/FO3R/SMID/AP33M2I/P模组、CrucialTec的CT01~27系列模组、Apexone的A2815器件及其AMF813模组、Mitsumi的SFN11LE与SFN11GU等。特别值得一提的是SFN11GU,模组超薄化已经达到了2 mm。很多光电半导体公司采用现有的OFN器件生产不同规格的OFN模组系列产品,如科特通信、世纪芯成、合盈光电等。
选择OFN器件或模组,需要考虑的主要因素有:形体大小、功率消耗、电源供给和硬件接口。形体方面更关心的是厚度,越薄越适宜便携式消费产品,当然成本也会越高。便携式消费产品的应用,特别注重形体、功耗和电源供应,通常形体小巧、工作与待机电流小和可以更低电压供电的OFN器件或模组更受青睐。工农业过程控制、仪表仪器设备等行业应用,则更多考虑的是OFN器件或模组的稳定高效、连接方便和EMI/EMC/ESD能力。
这里重点说明一下OFN的复合功能,导航及实时手指触控与位移检测是OFN的基本功能,由此衍生OFN的复合功能包括:点击、双击、拖动、滚屏、翻页、卷屏等。通常采用的OFN器件,仅有基本导航功能。为适合常用的“点击确认”需求,构成OFN模组时,常常在其FPC下附带微型的“锅仔片”机械按键,已经能够满足大多数应用场合了,非常经济。一些OFN,则直接把常用的点击、双击、拖动等简单的复合功能集成在器件内,把滚屏、翻页、卷屏等复杂的复合功能设计成规范API函数库,供OFN器件或模组用户在具体的应用系统的上层软件中自由按需添加,CrucialTec的部分CTxx系列OFN模组就是如此。
2.2 硬件体系设计
嵌入式系统中引入OFN,硬件电路设计上需要做到:
① 数字I/O接口的连接,主要考虑3个方面。
◆ I/O接口的连接。增加10~50 Ω限流电阻加以实现,特别是电压规格不同的情形。
◆ 电磁干扰的抑制。可以通过瓷片电容与限流电阻构成简洁的RC滤波电路加以实现。
◆ 驱动能力的增强。可以通过上拉电阻简单加以实现。
② 供给电源的去噪滤波可以选用钽电容与瓷片电容,简单加以实现。
图1给出了一种典型的OFN模组硬件电路设计,其中Mode用于选择I2C或SPI总线形式,INT为对外的实时中断信号,#RST和#ShtDwn为主机的复位和开关控制端口,I2C信号为SCK与SDA,SPI信号为SCK、RxD、TxD和#CS。
图1 OFN的硬件电路设计示意图
对于抗干扰、驱动和适应能力强大的OFN器件,可以不考虑滤波、限流和上拉电阻,具体情况应视所选用的OFN模组的性能和电路设计需求而定。电路设计时需要注意参考厂家的推荐电路及其器件参数与相关的估算公式,特别是PCB或FPC的印制板设计。
2.3 软件体系设计
OFN模组,作为一种新兴的人机输入微型接口设备,一般是以片外设备的身份,加入到以各类微处理器为核心的嵌入式应用系统中的,嵌入式微处理器软件体系必需实现对OFN模组的驱动才能及时地从中得到来自OFN的各种信息。
OFN模组的驱动程序主要包括3部分:初始配置、过程变化控制和数据的收发传输。初始配置完成对OFN光敏分辨率、休眠方式、连续中断间隔等项的设置,如果不进行初始配置,OFN则按默认配置工作。过程变化控制用于主机对OFN的开关、复位及其工作参数变化的控制。数据收发传输是OFN的常规行为,只要有手指触控,OFN就会以一定的时间间隔按中断的形式通知主机系统。可以采用中断或查询的方式实时地从OFN中获取手指的触控输入信息。查询操作往往需要使用周期定时器,在定时中断中查询并获取必要的OFN数据。从这层意义上讲,查询方式也是一类中断方式。主机可以在外部事件中断或定时中断服务中,通过I2C或SPI总线操作,得到必要的OFN检测信息。
通过底层驱动程序得到OFN检测信息后,对于没有嵌入式操作系统EOS(Embedded Operatig System)的直接软件体系,或诸如RTX、μC/OSII等微型嵌入式实时操作系统ERTOS(Embedded Real Time Operating System)的主机系统,上层应用程序直接用来进行屏幕指示、操作控制或数据的存储、转发等活动,这主要针对工农业过程控制、仪表仪器设备、器件性能检测完善等应用情形。对于使用Nucleus MTK、ThreadX展迅、Symbian、Windows CE/Mobile、ARMLinux/Android、MACOSXiPhone、VxWorks等典型EOS及其应用体系的主机系统,还需要对OFN信息进行数据封装或控制格式转换,以便使原有系统的绝大多数应用程序都能直接使用,如鼠标数据包格式、触摸屏数据包格式、方向键信息格式等。这种信息封装或变换,操作简单的直接在驱动程序中实现,操作复杂的则需要在应用层通过消息、队列等软件通信或同步机制做“二传”或“三传”加以实现。
具有EOS的软件系统,OFN驱动程序需要遵循相应EOS公用驱动程序的编写、调试、加/卸载要求,如Windows CE/Mobile的单/双层、本地/流接口驱动、动态库形式,ARMLinux的字符设备驱动、动态加/卸载、VxWorks的I/O设备驱动等。OFN驱动程序传播的是系统公用的人机交互输入信息,必须为公用驱动程序。EOS驱动程序可以划分为专用驱动程序或公用驱动程序两大类,公用驱动程序软件要求很高,需要根据具体EOS的特点和要求,认真编写、调试和测试。
3 微型光学手指导航模组应用实践
在各类嵌入式应用系统中开发使用OFN模组,软硬件体系设计的核心是OFN驱动程序的实现,其关键在于OFN数据信息的实时采集和具体EOS下公用信息的形成。下面针对一些最常见的OFN应用开发设计实践,加以阐述。其中涉及的I2C、SPI、UART、LCD(Liquid Crystal Display)、定时器(Timer)、GPIO(General Port Input/Output)等的软件驱动操作,限于篇幅,这里不再着重说明。
3.1 工业测控/仪表仪器应用
工农业过程控制、仪表仪器设备、器件性能检测等软件体系或微型ERTOS下的OFN应用,可以采用外部事件中断或定时器查询的方式,在其中断服务程序中直接操作I2C或SPI总线,高效地从OFN中获得手指触控信息,并进行屏幕指示、操作控制或数据的存储、转发等活动。
下面的例程代码(见网络版)展示了ARM926T内核的S3C2440微处理器平台上测试OFN模组A2815性能的情形。中断服务程序中进行I2C或SPI总线操作,获得手指触控信息,在LCD屏上以“鼠标”形式随动显示,并通过UART接口上传数据给PC机。
3.2 Nucleus MTK手机应用
联发科技MediaTek推出的各种款式功能手机,以高度的性价比具有极高的市场份额,其内核是ARM7EJS或ARM9EJS微处理器,在MentorATI的优先级抢占调度和时间片轮转的多任务ERTOS--Nucleus基础上,形成了完整的人机接口MMI(Man Machine Interface)应用程序体制,俗称“MTK”。Nucleus MTK多数情况下采用可管理的逐级中断机制:低级中断LISR(Lower ISR)→高级中断HISR(High ISR)→中断任务处理ISR(Interrupt Serve Routine)。ISR可以与其他任务进行通信或同步的交互。
Nucleus MTK系统不支持鼠标,但支持键盘和触摸屏操作,而触摸屏操作最终归结在键盘操作上。因此在Nucleus MTK下应用OFN模组,需要把OFN的“触控”信息转换为“方向动作”信息,进而广播为可以公用的“方向按键”信息,从而为多数现有的和未来的应用程序所共享。不容忽视的是必须实现高度频繁的OFN信息与缓慢的方向按键之间的合理匹配,可以通过均值滤波和逻辑分析进行取舍算法达到这一目的。
需要注意的是,Nucleus MTK软件体系层次和等级较为严格,高低层之间除了通信、同步和信息传递,一般不允许函数互相调用;同时,为保证中断响应的及时性,不应在中断服务程序中作过多的停留,因此传统的设备驱动及其分析处理需要放在不同的层次上,按轻重缓急,分别加以实现。
按照上述Nucleus MTK的设备驱动规范和OFN信息的运用机理,设计OFN模组的Nucleus MTK软件应用如下:定义OFN特定消息结构,分配中断形式和总线接口;实时获取OFN移动信息,取舍处理后,打包成OFN消息包,上传MMI应用处理层;MMI应用处理层拆包分析,变换成方向按键的“按下”和“释放”消息,进而广播给整个系统。相关的关键程序开发如下:
① 基本设置。增加全局操作常量MSG_ID_MMI_OFN_MOVE_REQ,定义OFN消息结构体ofn_hdr_ind_struct{LOCAL_PARA_HDR, kal_uint8 Direction},并在系统自定义设备驱动的初始化文件中加入对OFN初始化函数的调用。
② 底层驱动程序设计。限于篇幅,这里仅列出I2C接口的定时器中断查询实现。
③ 公用信息形成。在上层主要程序文件MMITask.c中添加代码。
3.3 Windows CE/Mobile应用
Windows CE/Mobile是一款在嵌入式系统,特别是智能手机中,广泛应用的EOS。Windows CE/Mobile按照“物理中断IRQ(Interrupt ReQuest)→逻辑中断SYSINTR(System Interrupt)→中断服务线程IST(Interrupt Serve Thread)”的层层映射方式进行中断处理,其设备驱动程序以用户态下的DLL(Dynamic Link Library)文件形式存在,区分为本地与流接口驱动、独立与双层驱动,可以在系统启动时自动加载或动态加载。启动时加载的驱动程序,需要特别进行注册表的配置添加。
OFN模组及其应用特点决定了在Windows CE/Mobile下,其驱动程序宜设计为独立的本地驱动形式,并在系统启动时能够自动加载。Windows CE/Mobile支持鼠标操作,有鼠标消息结构体的系统定义,可以用来简化OFN的驱动程序。OFN模组的Windows CE/Mobile软件应用可以完全在驱动程序中实现,中断服务程序的编写和系统注册表的配置添加是OFN模组Windows CE/Mobile驱动程序设计的关键。以I2C总线接口、外部中断事件触发方式说明OFN模组Windows CE/Mobile驱动程序的具体实现,核心微处理器为ARM926T内核的S3C2440。
3.4 ARMLinux/Android应用
ARMLinux/Android是一个源码开放、音/视频性能优良、网络功能强大、易于扩展开发的EOS及其应用体系,一经推出就在便携式移动通信、微型笔记本电脑等诸多领域得到了广泛运用。其底层多是基于CortexA8/A9、ARM1176、ARM9EJS等内核的微处理器。Linux下设备驱动规范是将设备视作文件操作,称为“设备文件”,应用十分方便。其设备驱动程序分为字符型、块型和网络型三类,嵌入式系统的大多数外设或接口都可以作为字符型设备进行驱动。根据应用的特点,Linux将所有输入设备归为可以数据缓冲的链表结构的字符型输入子类(Input),包括鼠标、键盘、触摸屏等,其中鼠标类驱动(mousedev)架构体系十分完备。ARMLinux/Android体系的这些特征,使得OFN模组的驱动应用开发简便了很多:可以按照鼠标类驱动的实例化方式,快速实现OFN的驱动程序设计。Linux驱动可以动态加载,也可以在启动时加载;OFN设备使用频繁,宜选择启动时加载。这里以常见的TI推出的CortexA8内核的OMAP3530微处理器平台为例,关键的程序代码略--编者注。
4 结语
光学手指导航模组,性能高度集成,成本低,形体小,在嵌入式应用系统中备受青睐。只要按照各种嵌入式应用体系的具体特点,遵循各类嵌入式体系及其操作系统下驱动软件的开发规律,并因地制宜,具体情况具体分析,就可以无缝地将其融入到各个已有的嵌入式应用软硬件体系中,并拓展到新的嵌入式应用产品中。不断丰富完善的微型光学手指导航模组,应用前景极好,推动着人机输入界面的深远变革和长足发展。