铁路交通信息系统PDA的低功耗设计
摘要:阐述在集成传呼功能、基于嵌入式处理器EP7211开发实现的二合一铁路交通信息系统PDA中,为了降低系统的功耗,从硬件和软件两方面采取的各种措施。这些措施基于一定的低功耗设计原则,具有普遍性,适合一般的嵌入式系统开发。
关键词:PDA EP7211 低功耗 时间复杂度
引言
PDA即Personal Digital Assitant(个人数字助理)的缩写,是近年来继寻呼机和移动电话之后,在国内市场迅速崛起的便携式电子产品。目前,国内传统性能的PDA产品经过前几年的高速发展后,市场需求基本饱和。不过,经过行业应用改造后的PDA产品,如文曲星、蓝火等已经在国内市场大显身手了。分析市场需求,我们研发了集成传呼功能的、专门面向交通行业应用的铁路交通信息系统PDA。本PDA系统除了具备传统PDA的个人名片管理、辞典检索、信息速记功能外,更重要的是提供交通领域的民航各种航班查询和全国铁路列车的刻表查询,通过传呼系统及时广播铁路和民航行业应用方面的如航班晚点、车次晚点、剩余票额等相关行业信息。
PDA系统属于便携式电子产品。这类产品,javascript:window.open(this.src);" style="cursor:pointer;"/>性能指标日益向实用化、方便化发展。产品不仅要求功能完备,用户界面友好,操作方便简洁,而且要求产品寿命长,功耗低。
产品低功耗设计一般从硬件和软件两个角度来考虑。本文重点阐述该PDA系统所采用的降低系统功耗的各种措施。
1 铁路交通信息系统PDA的体系结构
在分析本PDA系统的功能性和非功能需求,充分了解市场硬件行性的基础上,设计了本PDA系统,其硬件体系结构框图如图1所示。
嵌入式处理器EP7211(核心模块)进行数据处理,传呼译码芯片接收传呼信息并根据传呼协议自动译码;LCD提供数据显示输出,触摸屏提供用户输入接口;Flash用来存储可执行应用程序和数据;SRAM为程序运行提供内存空间;语音录放电路完成快速语音记忆功能;串口和红外口完成相关的数据通信工作;电源电路为嵌入式处理器和各外围设备提供所需要的工作电压。
嵌入式处理器EP7211是Cirrus Logic公司专门为低成本、超低功耗的嵌入式应用设计。它包含基于RISC体系结构的ARM7TDMI处理器内核和丰富的外围接口,如CODEC音频接口、SPI串行A/D接口、单色LCD接口、RAM接口、串行红外接口、PWM接口、实时时钟RTC以及电源检测接口等。这些丰富的外围接口,不仅降低了系统的设计难度,同时也提高了系统工作的可靠性。EP7211的内核电路工作在2.5V,而外围电路工作在3.3V。它可根据具体情况对内核的时钟进行动态编程控制,可工作在18MHz、36MHz、49MHz和74MHz。另外,EP7211还有三种基本的工作状态:正常操作(operating)、空闲(idle)和等待(standby)。在等待模式时,主时钟被关断,整个CPU及相关外围(除中断和RTC)关断,但可通过触摸屏中断、传呼中断或复位按钮来唤醒。
系统软件开发平台采用了我们自主开发研制的、专门面向嵌入式应用系统开发的XGW平台。XGW开发平台措鉴Windows消息驱动机制,是用C语言开发实现的;它功能强大,模块化设计,扩展性强,产品升级容易,而且开发人员较为熟悉,开发成本低,其总体框架如图2所示。
图2全面反应了XGW软件开发平台的体系结构,包括事件消息驱动机制(XGW软件开发平台中的消息分为鼠标消息、键盘消息和定时器消息等三类)、内存管理、字符和图形显示输出、图形组件库等。图形组件库中的编辑框、列表框、按钮、进度条等图形控件为用户应用程序开发提供了应用编程接口API。不过,XGW平台对于系统硬件的中断响应没有提供统一的入口和出口,需要开发人员单独处理。
2 硬件低功耗
硬件低功耗主要从芯片制造工艺流程和硬件体系架构的角度出发,基本原理是尽量选用能够满足功能要求的功耗低的芯片。不过,芯片自身的功耗参数由制造厂商来决定,此处主要阐述CMOS芯片动态功耗以及动态电源管理两个方面。
(1)CMOS芯片动态功耗
随着半导体制造技术的发展,数字电路从TTL工艺转向CMOS工艺。TTL工艺为电流注入型电路,静态和动态电流消耗接近。CMOS工艺是压控型的,理想情况下("0"、"1"的恒定状态)静态电流为0,实际情况下也是很小的。动态("0"、"1"间的跳变状态)电流消耗占绝对主导地位。CMOS动态功耗计算公式为
javascript:window.open(this.src);" style="cursor:pointer;"/>
式中: Pd--CMOS芯片动态功耗;
Ce--CMOS芯片等效电容;
V--CMOS芯片工作电压;
f--CMOS芯片工作频率或工作状态的切换频率。
从式(1)及各参数含义看,CMOS芯片动态功耗的数值正比于工作电压的平方,同时正比于工作频率。在满足系统功能需求的条件下,javascript:window.open(this.src);" style="cursor:pointer;"/>降低芯片工作电压和工作频率,都可以极大减少芯片的动态功耗。以处理器工作频率为例,如果工作频率降低一半,则该芯片动态功耗几乎也随之减半。在本PDA系统中,尽管ARM7处理器提供了18MHz、;36MHz、49MHz和74MHz四种工作频率,但我们采用2.5V为低压供电,18MHz工作频率。这些参数在降低系统功耗的同时,也满足了系统性能的需求。
(2)动态电源管理
动态电源管理技术是指有选择地将闲置的系统模块置于低能状态。一个较为复杂的嵌入式系统,除了处理器外还有很多外设电路模块,它们协调工作,共同完成系统功能。 但在分析完成系统功能的过程中可以看出,并不是所有模块在任何时间都处在工作状态。除了嵌入式处理器外,绝大多数外设模块都是在执行某项具体功能的时候(它自己的有效操作期间)才需要供电。如音频模块,有语音输入或者输出时才需要工作;在进行串口通信时,串口芯片需要处在工作状态;而在更多的时间里,这些芯片都是不需要工作的。
为了系统功耗最小,动态电源管理的原则是系统完成某项功能,只有参与这项功能的模块才供电,其它模块设置在电源切断状态。在电路设计时,需要充分考虑到这个问题,尽可能为各外设模块提供切换供电机制的引脚控制信号,而且允许通过软件编程的措施来完成其电路开关的切换工作。
本PDA系统中,除了嵌入式处理器外,还有异步串口、语音编译码芯片、音频功放、传呼、LCD、收音机等外部设备。传呼的接收具有随机性,需要一直处在工作状态。串口、语音芯片、功放电路、LCD等可以通过一定口地址的设置来控制电源开关,使之在工作的时候提供电压,在不工作的时候切断电源。
各外设模块电源口地址配置如表1所列。
表1
口地址 | 功 能 | 工作条件 |
PA4 | LCD背光控制 | 低电平 |
PA5~PA6 | 红外口控制 | 取值00 |
PD1 | LCD电源电路 | 高电平 |
PD2 | LCD点显示电路 | 高电平 |
PE0 | 控制语音播放 | 高电平 |
PE1 | 控制音频功放 | 低电平 |
3 软件低功耗
嵌入式系统开发中除了硬件低功耗措施外,也可以从软件方面来设计。嵌入式系统软件低功耗措施一般涉及到处理器工作状态间的切换、应用模块软件算法的选择和系统整体的数据调度三个方面。
(1)处理器工作状态
便携式系统工作过程中,处理器并不是任何时候都一直忙于运行,尤其是PDA来产品。如今的嵌入式处理器(包括EP7211)一般都为应用开发提供了三种工作状态:运行、空闲和休眠。大量的实际使用表明,更多情况下,大部分时间里系统是处在休眠状态的,一旦获得工作信号,会迅速切换到工作状态。当系统在工作状态下一定时间内没有获得下一次需要处理的信号时,则应该自动切空闲或者休眠状态。因为在不同的工作状态,处理器内部工作电路有所变化,功耗大小差别较大。
本PDA系统采用的ARM处理器,在不同工作条件和状态下的功耗哪表2所列。
表2
名 称 | 频率/MHz | 消耗电流最大值/mA | 条 件 |
休眠状态 | 300μA | 32kHz时钟晶振工作,I/O口处于禁止 | |
空闲状态 | 18 | 6 | 晶振都在工作,LCD刷新处于激活状态,CPU是静态的 |
空闲状态 | 36 | 12 | 同上 |
运行状态 | 18 | 20 | 整个系统处于激活状态,正在执行程序 |
运行状态 | 36 | 40 | 同上 |
注:直流供电电压2.5V
从表2中明显看出,处理器不同条件和状态下的功耗参数大小的差别。在18MHz频率下,运行功耗(20mA)是空闲功耗(6mA)的近4倍,空闲功耗又是休眠功耗300μA的20倍。我们的目的是在不影响系统正常运行的过程中,尽最大可能使系统处在空闲休眠状态来降低系统功耗;因此,我们应该通过预测系统执行过程的措施来切换处理器的工作状态。分析式(1)可知,我们又不能频繁过快地进行处理器状态切换,中间要留有一定的稳定时间间隔。
XGW软件开发平台采用事件消息驱动机制。消息采用查询方式,能够实时响应外部中断。在消息循环过程中,系统需要查询消息队列:当有消息出队时,处理器在运行状态处理这个消息所对应的事件;如果一这时间间隔(如2s)消息队列一直是空,系统预测在最近相当长的时间内不会有事件产生,软件编程措施把处理器从运行状态切到空闲状态;如果系统在更长的时间内(如20s)没有事件产生,则系统预测用户需要自动软关机,此时处理器进入休眠状态。在休眠状态下,处理器能够响应实时时钟匹配中断、传呼接收中断以及复位按键;一旦系统捕获到这类信号,则迅速转入到正常工作状态。处理器在运行状态和空闲状态间的切换间隔是必需的,如果切换速度过快,并不能达到降低系统功耗的目的。
为了缩短处理器从空闲或者运行状态切换到休眠状态的时间,系统同时提供了用户手动软关机措施,即通过触笔直接点击屏幕某一指定区域来实现。
本PDA系统中,ARM7处理器三种工作状态的转换如图3所示。
图3中各数字含义如表3所列。
表3
序 号 | 状态转换条件 |
1、3 | 系统20s内一直不能捕捉到消息或者人为点击屏幕某一指定区域 |
2 | 实时时钟匹配中断、传呼中断、按键唤醒 |
4 | 运行状态下系统2s内一直不能捕捉到消息 |
5 | 产生中断信号、捕捉到消息事件 |
(2)软件算法的选择
在应用程序编程实现过程中,求解同一个问题,可以有许多不同的算法。评价一个算法好坏的常用参数是算法时间复杂度、算法空间复杂度和算法的易理解编码和调试性。算法时间复杂度定义为算法的时间耗费,即算法所求解问题规模(求解问题的输入量)n的函数。时间复杂度一般用O(n)来表示,当n达到一定规模时,时间复杂度越小,执行效率越高,招待时间越短,系统功耗越低。算法空间复杂度定义为该算法所耗费的存储空间,它也是问题规模n的函数。
我们总是希望选用一个所占存储空间小、运行时间短、其它性能也好的算法。然而实际上很难做到十全十美,原因是上述要求有时相互抵触,javascript:window.open(this.src);" style="cursor:pointer;"/>如节约算法执行时间需要以牺牲一定的存储空间为代价,反之亦然。因此,我们只能根据具体情况有所侧重。在本PDA系统中具体硬件配置时,CPU工作频率不高,存储空间运行不大;但应用程序数据量大,而且某些应用程序如辞典互译、时刻表检索时数据运算量也大。
如要在本PDA系统中实现英汉辞典互译,首先会想到采用顺序检索法。这种算法对用户输入词汇排列顺序没有要求,编程实现和理解起来都比较简单,其算法时间复杂度为O(n)=n。当n值较小时,这是可以允许的;但是当系统词汇量近10 000个时,算法检索效率不高,表现为当词语位置偏后时系统检索延迟过大。为了提高检索效率,满足一定的系统反应实时性要求,我们采用了有序表二分搜索算法,其算法时间复杂度O(n)=log2n。假设n=16 384=2 14已经超出系统的数据规模(10 000词左右)。二分检索所需要的最坏检索次数是14次;但是对于顺序检索而言,在最坏查找的情况下,检索次数是16 384次,故效率提高了16 284/14=1170倍。这个数目是相当可观的,而且,即使系统数据规模进一步扩大,二分检索表现出来的所增加的检索次数也是很小的。辞典互译实现二分检索所要做的附加工作,就是将原来无序的辞典数据文件转换成有序的辞典数据文件。不过,这个转换工作可以在PC机上完成从而减轻本嵌入式系统的负荷。辞典数据排序和检索过程中英汉辞典依据ASCII码进行,汉英辞典根据汉字的区位码进行。本PDA系统的民航时刻表、铁路时刻表等应用模块,也都涉及到了算法选择问题。
(3)数据调度
在许多应用程序中,存储器访问是功耗的主要部分。有资料表明,内存传输是迄今为止CPU完成的操作中代价最高的:一次内存传输消耗的能量是一次加法运算的33倍多。优化能量消耗的最大收益之一,来源于合理组织内存中的数据和指令:一般措施是尽量做到数据的寄存器访问和缓存访问。
随着存储技术理论的发展和工艺水平的提高,现在存储器体系结构一般都是三级,而且支持虚拟存储技术,如图4所示。
处理器进行数据访问时,离CPU越近的地方,数据存取速度越快,功耗越低。本PDA系统中,由于Flash存储器(作为数据存储器件)写操作的特殊性(以扇区大小为单位、执行时间长、执行功耗大),要求尽量少地进行。基于这种策略,本PDA系统在数据安排方面采取了以下一些优化措施:
①LCD帧缓存的安排。EP7211内置38 400字节大小的RAM空间,LCD分辨率是320×240,每像素4级灰度用2比特位表示,故显存大小为320×240×2/8=19 200字节,被安排在内置RAM空间的前19 200字节。这样安排,加快了显示速度,减少了处理器访问片外SRAM空间。javascript:window.open(this.src);" style="cursor:pointer;"/>
②个人传呼信息、公共传呼信息接收频度大,不需要永久存储;传呼接收过程需要开臂两块缓冲区,这些空间都被安排在内部RAM后19 200字节,其目的是减少了CPu对片外SRAM的访问。
③部分系统信息资源,如字库信息,在系统启动后直接从Flash存储区拷贝到固定位置的SRAM区,这样字符输出时直接从内存读取数据,而不需要访问Flash。
④为减少Flash写操作执行次数,在电话簿、记事本、日程以及系统设定等编辑修改后,首先改动的信息是在内存中直接保存,等到用户是退出当前整个应用模块时,才进行一个性Flash写操作。
⑤在进行复杂数据查找过程中,为减少数据访问量,可以通过建立若干级索引表方式加快数据检索速度。如在辞典文件的词汇排序过程中,同时建立了每个单词位置的数据索引,而且作为索引文件定改Flash。在查找过程中,索引项的存在能够减少检索次数,从而快速确定单词起始位置以及整个单词项目长度,供显示输出。不过在增加索引时,也会增加一定的空间复杂度。
另外,系统还可以通过代码压缩减少总线上的传输量;编译器优化,消除冗余代码;消除编程中的递归过程调用、减少函数调用的开销;有效使用寄存器等措施来降低系统功耗。有关这些措施请见参考文献[2]。
4 低功耗设计综合阐述
以上分别从硬件和软件两方面阐述了嵌入式系统开发中低功耗设计的一些原则及在本产品中的某些具体体现。经试验测得,本PDA系统功耗如表4所列。
表4
条件(18MHz、2.4V) | 消耗电流/mA | 注 释 |
待机 | 79 | 系统全速执行条件下的功耗数据 |
开机 | 2527 | |
收传呼 | 5558 | |
启动背光 | 8385 | |
背光功耗 | 53 | 单功能模块功耗数据 |
LCD功耗 | 22 | |
扬声器 | 10 | |
语音编译码芯片 | 11 | |
红外口 | 6 |
本PDA产品除了提代外接电源供电电路,同时还提供内置可充镍氢双电池供电系统。设单节电池容量是500mA,则系统待机时间是1000小时/8=125小时,基本上可以满足实际应用的需要。随着对嵌入式系统低功耗设计的深刻理解和硬软件方面某些措施的改进,包括借鉴目前国内外一些厂家低功耗设计经验,则在改进的产品中,表4的某些数据还可能再降低一些,更好地满足产品的低功耗要求。
其实嵌入式系统开发中低功耗设计是个系统的概念,硬件上既要在单元级考虑,也要在单元逐步集成系统的阶段上全面评估。因此,即使系统中每个模块都是严格采用低功耗设计的,但在集成整个系统时也不一定能完全保证整个系统是低功耗的,低功耗设计阶段应该在进行系统规划的同时就充分考虑进去,而且需要建立模型进行低功耗评估,一旦不满足设计要求导致偏差较大时,应该及时修正模型。应用软件在数据结构的安排上,也要考虑到具体的硬件配置。因为有些效率的提高,比如考虑引表的建立,是以牺牲一定的存储空间为代价的。如果存储空间太小,就需要权衡两者的矛盾。