Android是一款以Linux为基础的开源移动设备操作系统,一直由Google公司领导和开发。Google对于Android系统所持有的开放态度,令Android系统一经发布就风靡全球。Google于2007年11月5日正式发布Android系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放的和完整的移动设备软件。2012年11月数据显示,Android占据全球智能手机操作系统市场的76%,在中国市场的占有率为90%。据2013年数据显示,全世界采用这款系统的设备数量已经达到10亿台。
这里所说的Android系统,是基于Linux内核发展起来的嵌入式操作系统。Android系统基于Linux内核所做的改进将在后续章节进行详细介绍。
本章将详细介绍嵌入式系统,主要涉及Android系统所运行的平台、处理器芯片以及相关的技术。
嵌入式系统(Embedded System)是一种完全嵌入受控器件内部、为特定应用而设计的专用计算机系统。嵌入式系统的本质就是计算机系统,因而它也是由软件以及硬件构成的。与普通计算机不同,嵌入式系统通常仅拥有非常有限的硬件资源,这种配置使它们的成本大幅下降,但也对软件的优化提出更高的要求。嵌入式系统一般运行固定的程序或固定的操作系统,再加上可变的应用程序。有些为工业系统,仅用于某个特定的控制目的;有些因为有应用程序的加入而更显灵活,一般用于手机、平板电脑。如图1-1所示。
第一个被大家认可的现代嵌入式系统是麻省理工学院仪器研究室的查尔斯·斯塔克·德雷珀开发的阿波罗导航计算机。在两次月球飞行中,太空驾驶舱和月球登陆舱都使用了这种惯性导航系统。在计划中刚开始的时候,阿波罗导航计算机被认为是阿波罗计划中风险最大的部分。为了减小尺寸和重量而使用的当时最新的单片集成电路,这更加大了阿波罗计划的风险。第一款大批量生产的嵌入式系统是美国军方于1961年发布的民兵I导弹上的D-17自动导航控制计算机。它是由独立的晶体管逻辑电路构成的,并带有一个作为主内存的硬盘。当民兵II导弹在1966年开始生产的时候,D-17由第一次使用大量集成电路的更新计算机所替代。仅这个项目就将与非门集成电路模块的价格从每个1000美元降低到了每个3美元,使集成电路的商用成为可能。民兵导弹的嵌入式计算机有一个重要的设计特性:它能够在项目后期对制导算法重新编程以获得更高的制导精度,并且能够使用计算机测试导弹,从而减轻测试所用的电缆和接头的重量。这些20世纪60年代的早期应用使嵌入式系统得到了长足发展,它的价格开始下降,同时处理能力和功能获得了巨大的提高。
图1-1 典型的嵌入式系统
英特尔4004是第一款微处理器,它在计算器和其他小型系统中找到了用武之地。但是,它仍然需要外部存储设备和外部支持芯片。1978年,美国国家工程制造商协会(NEMA)发布了可编程单片机的“标准”,包括几乎所有以计算机为基础的控制器,如单片机、数控设备,以及基于事件的控制器。随着单片机和微处理器价格的下降,使一些消费性产品用单片机的数字电路取代昂贵模拟组件成为可能。到了20世纪80年代中期,许多以前是外部系统的组件被集成到了处理器芯片中,这种结构的微处理器得到了更广泛的应用。到了20世纪80年代末期,微处理器已经出现在几乎所有的电子设备中。
现代的嵌入式系统一般分为简单嵌入式系统和复杂嵌入式系统。简单嵌入式系统一般被认为是由单片集成控制器作为硬件核心的嵌入式系统,其核心只有一片芯片,却集成了处理器、闪存、内存、数字和模拟外设这些设备,这样的系统开发难度低。然而,由于种种限制,其性能一般,仅适合于自动化、运动控制、电源控制等简单的控制类应用。与之相反,复杂嵌入式系统一般由独立的处理器和闪存构成,处理器本身不集成大量的外设,仅执行处理任务,类似于传统计算机的CPU。这样的系统灵活多变,性能优异,但是成本高昂,普遍用于人机接口、智能设备、手机等性能要求高的场合,如图1-2所示。
图1-2 嵌入式系统应用
以下是一些嵌入式系统的典型应用:
·ATM取款机
·航空制导系统
·交换机、路由器、ADSL终端
·可穿戴传感器
·计算机硬盘
·工业控制器
·计算器
·机顶盒
·MP3、MP4
·GPS导航仪
·手机、平板电脑
·智能测试测量仪器仪表
很多人觉得没有接触过嵌入式系统,嵌入式系统离他们很遥远。其实,嵌入式系统无处不在。从白色家电到大型网络系统,嵌入式系统时时刻刻为我们服务着。与传统计算机比较,嵌入式系统尽管有开发难度大、通用性差和人机接口普遍落后等劣势,却有着传统计算机所没有的关键优势。
嵌入式系统可以做到极低的成本。一般来说,用于简单工业控制和白色家电的单片机芯片集成了复杂的模拟外设、数字外设,而且不用外界任何存储设备,如图1-3所示。这样的一片芯片往往售价不超过10元人民币,更加令人惊奇的是,这种芯片可以在很宽的电源电压范围内工作,又有良好的可靠性,从而进一步降低了对外部环境的要求,使微电脑控制技术得以广泛普及。
图1-3 嵌入式系统处理器
嵌入式系统极其可靠。一般说来,系统中串联工作的部件越多,系统的可靠性越差;系统中并联工作的部件越多,系统的可靠性越好。这里的串联指的是相互依赖的工作方式,并联指的是互为冗余的工作方式。嵌入式系统往往有更精简的结构,从而使其有更少的出错机会。从硬件上讲,各模块之间的依赖关系更加清晰,模块数量精简,从而使串联部件减少。从软件上讲,由于使用了定制的操作系统和应用程序,甚至没有操作系统,从而使得软件组件大幅减少,也减少了串联部件。而且,由于结构精简,从而可以留出更多成本预算来做冗余。这样,在减少串联部件的同时增加并联部件,使得嵌入式系统可以提供传统计算机系统所难以比拟的高可靠性。
嵌入式系统极其高效。虽然绝大多数的嵌入式系统拥有较差的计算资源,它们通常仍能完成任务。与通用计算机不同,嵌入式系统的硬件、软件都可以根据实际需求而加以定制,这使得系统得以精简。除了提高系统的可靠性,精简的系统还能减少硬件资源,尤其是CPU资源和内存资源的浪费。一台主频只有16MHz的计算机是什么样子?然而,多数用于工业控制的单片机的主频不超过16MHz,却能井井有条地控制大型机械设备。对于某些超高性能需求,因为传统计算机系统的低效、臃肿,嵌入式系统是唯一的选择。比如说大型电信路由器或网络安全设备,因为需要处理大量的数据请求,还不能有太多的网络延迟或丢包,高效的专用处理器就成为了唯一的选择。它们被制成功能单一的芯片,只能做一种简单的任务,却有着极其强大的性能。如果采用通用计算机来支撑网络社会,可能会因为成本过高而无法实现。
嵌入式系统体积小、功耗低。手机、平板电脑都是嵌入式系统,却也有着不逊于传统计算机系统的性能。一般来说,嵌入式系统的功耗不会大于20瓦。多数的单片机功耗在几十毫瓦左右,而多数复杂嵌入式系统的功耗不过几百毫瓦。即使是最先进的手机系统,其峰值功耗不过二三瓦,而其平均功耗不过二三百毫瓦或更低。反观传统计算机,即使是最省电的笔记本电脑也要消耗数十瓦的功率。在减小功耗的同时,嵌入式系统的散热问题也随之消失,更简单的电源管理和几乎不使用散热装置,使得嵌入式系统的体积更小,如图1-4所示。
图1-4 典型的嵌入式系统体积
如前文所述,嵌入式系统可分成简单嵌入式系统和复杂嵌入式系统。简单嵌入式系统一般为单片机,比如MCS51系列、PIC系列、AVR系列和新兴的MSP430系列。这些单片机成本低廉,外设丰富,而且在上电后可以立即运行,适合于对性能要求不高的控制类应用,如智能仪表、电机控制、可穿戴传感器和数字电源等。
复杂嵌入式系统的构成则要复杂得多,其性能、成本也高得多。一般来说,该类系统包括基于DSP的嵌入式系统、基于ARM的嵌入式系统、基于MIPS的嵌入式系统和基于x86的嵌入式系统。基于DSP的嵌入式系统一般用于处理大量的数据,典型应用为语音处理、雷达信号处理等。基于MIPS的嵌入式系统一般应用于通用计算,因为MIPS在开发之初就被用于通用处理器。基于x86的嵌入式系统实际上就是把传统的计算机压缩、精简,一般因其强大的性能与兼容性被用于对成本、功耗要求不高的场合,比如工业计算机等。
复杂嵌入式系统中最常见的要属基于ARM的嵌入式系统(以下简称ARM系统)。ARM系统通常拥有足够的硬件资源和相对较低的功耗,这使得ARM处理器非常适用于复杂的工业环境和移动终端,这当中绝大部分就基于Android操作系统。
嵌入式系统由软件和硬件构成。硬件部分包括微处理器、内存、闪存/硬盘、外部设备等;软件部分则包括引导器、操作系统、文件系统、用户程序等。对于简单嵌入式系统来说,硬件部分通常只是一块单片机芯片,集成了所需的全部硬件资源,而软件部分则只是一个单一的二进制文件,包含全部的代码、常数、存储分配结构等。本书的研究对象是基于ARM处理器和Android操作系统的复杂嵌入式系统。
Android一词的本义指“机器人”,该平台由操作系统、中间件、用户界面和应用软件组成。Android操作系统最初由Andy Rubin开发完成,是一种基于Linux内核的自由及开放源代码的操作系统,主要应用于移动设备,如智能手机和平板电脑。2005年8月由Google收购并注资。2007年11月,Google与34家硬件制造商、软件开发商及电信运营商组建开放手机联盟,共同研发改进Android系统,并且以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机HTC G1发布于2008年10月。随后Android操作系统逐渐扩展到平板电脑及其他领域,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居第一。
2008年,在Google I/O大会上,Google提出了Android HAL架构图,在同年8月18日,Android获得了美国联邦通信委员会的批准。在2008年9月,Google正式发布了Android 1.0系统,这也是Android系统最早的版本。
2009年4月,Google发布了Android 1.5版本,并开始以甜品的名字对各个版本进行命名,Android 1.5命名为Cupcake。该版本与1.0版相比有了很大的改进。
2009年9月,Google发布了Android 1.6的正式版,并且推出了搭载Android 1.6正式版的HTC G3手机。凭借着出色的外观设计以及全新的Android 1.6操作系统,HTC G3成为当时全球最受欢迎的手机。Android 1.6也有一个有趣的甜品名称,即Donut。
2010年2月,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核staging tree上除去。从此,Android与Linux开发主流分道扬镳。同年5月,Google正式发布了Android 2.2操作系统,并将其命名为Froyo。
2010年10月,Google宣布Android系统达到了第一个里程碑,即在电子市场上获得官方数字认证的Android应用数量已经达到了10万个,Android系统的应用增长非常迅速。在2010年12月,Google正式发布了Android 2.3操作系统Gingerbread。
2011年1月,Google宣布每日新增的Android设备用户数达到30万部,到2011年7月,这个数字增长到55万部,Android系统设备的用户总数更是达到了1.35亿。Android系统已经成为智能手机市场占有量最高的系统。
2011年8月2日,Android手机已占据全球智能机市场48%的份额,并在亚太地区市场占据统治地位,终结了塞班系统的霸主地位,跃居全球第一。
2011年9月份,Android系统的应用数目已经达到了48万,而在智能手机市场,Android系统的占有率已经达到了43%,继续排在移动操作系统首位。全新的Android 4.0操作系统于2011年9月23日发布,这款系统被Google命名为Ice Cream Sandwich。
2012年1月6日,Google Android Market已有10万开发者推出超过40万活跃的应用,大多数的应用程序为免费的。Android Market应用程序商店目录在新年首个周末突破40万基准,距离突破30万仅用了一个月。在2011年早些时候,Android Market应用从20万增加到30万花了4个月。
2013年9月,Google证实,已有超过10亿Android设备被激活,应用下载次数超过480亿次。Android系统不仅支持手机和平板电脑,还成功进军相机、电视、手表甚至是冰箱等消费品领域。同年10月发布了Android 4.4,代号为KitKat(奇巧巧克力)。新的Android 4.4操作系统为开发者提供了两种编译模式,一种仍是默认的Dalvik模式,另外一种则是ART模式。ART模式发行的应用在用户安装时就进行预编译操作,将原本在程序运行中的编译动作提前到应用安装时,在省去解释代码这一过程之后,应用的运行效率更高。Android被人所诟病的虚拟机解释编译时代一去不复返。
2014年,随着更多的手机生产商的加入,Android智能手机总出货量为13亿台,这意味着Android智能手机占全年手机销售量的81.2%。
2014年10月16日,Google正式发布Android 5.0,并将系统镜像发布到Nexus 4、5、7和10的设备上。主要更新包括:支持64位处理器,支持蓝牙4.1,采用全新的Material Design界面,全面由Dalvik虚拟机转用Android RunTime(ART)编译虚拟机等。
2015年4月22日,Google发布最新版本Android 5.1.1,在Android 5.0基础上主要增加了新功能和完全性,例如多SIM卡和高清语音的支持、快速设置WiFi和蓝牙等
(1)开放性
Android平台最大的优势就是其开放性。开放的平台允许任何移动终端厂商加入Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户数量的增多和应用的日益丰富,一个崭新的平台也将很快走向成熟。
(2)运营商的鼎力支持
在国内,三大运营商卯足了力量推出Android智能机。联通的“0元购机”,电信的千元3G,移动的索爱A8i定制机等,都显示了运营商对Android智能机的期望。在美国,T-Mobile、Sprint、AT&T和Verizon全部推出了Android手机。此外,KDDI及NTT DoCoMo(日本)、Telecom Italia(意大利电信)、T-Mobile(德国)、Telefónica(西班牙)等众多运营商都是Android的支持者。有这么多的运营商支持Android,自然会使它占据巨大的市场份额。相对于Android的运营商联盟,只有AT&T一家运营商销售iPhone。
(3)丰富的硬件选择
基于Android平台的开放性,众多厂商推出了多种产品。这些产品虽然功能上各有特色,却不会影响数据同步,以及软件的兼容。例如将一款诺基亚塞班风格的手机更换为苹果iPhone,不仅可以将塞班中优秀的软件移植到iPhone上继续使用,而且联系人等资料也可以方便地转移。现在,世界绝大部分智能手机厂商都加入了Android阵营,并推出了一系列的Android智能机。摩托罗拉、三星、HTC、LG、Lumigon等厂商都与Google建立了Android平台技术联盟。加盟的厂商越多,手机终端就越多,其市场潜力就越大。Android智能机最近6个月在美国市场的占有率足以说明这一点。
(4)开发商不受任何限制
随着Android的推广与普及,应用程序的数量呈指数级增长,Android应用在可预见的未来是有能力与苹果竞争的。而来自Android应用商店最大的优势是,不对应用程序进行严格的审查,开发不受限制。
(5)无缝结合Google的应用
如今互联网的Google已经走过10年的历程,从搜索巨人发展到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,Android平台则将这些优秀的Google服务无缝结合到系统中。
为了支持Android系统的正常运行,一个典型的系统应具备ARM嵌入式处理器、内存、闪存、电源管理系统、音频子系统、显示屏和触摸屏。
图1-5以基于全智科技A10应用处理器的嵌入式系统为例介绍了一个无线IP电话硬件系统的构成。Android操作系统运行在基于ARM核心的A10处理器上,GPU部分运行图像加速算法。ARM处理器控制片上外设,片上外设控制系统中的其他设备,比如音频控制器、背光控制器等。A10SOC通过USB等接口对外实现有线和无线通信。
嵌入式系统软件包含引导器、操作系统、文件系统和用户程序等,如图1-6所示。以Android系统为例,系统引导器(通常是U-Boot)在系统通电之后首先运行,该程序负责处理器、内存、闪存的初始化,对系统内核实行解压缩操作,然后将控制权交给操作系统。操作系统包含内核和用户态程序。Android系统的内核是Linux,Linux在加载完成后挂载文件系统,并从中加载用户态程序。Android的用户态程序包含启动管理、Java虚拟机、系统库函数等。在完成Android系统的加载后,Android会自动加载默认的桌面应用程序。至此,Android系统完成启动过程。
图1-5 Android嵌入式系统的硬件
图1-6 Android系统软件构成
引导器包含设备相关的、与底层打交道的代码,这部分常用汇编语言和C语言编写。Linux内核部分包含部分设备相关代码,比如CPU的优化指令等,以及大量的外设驱动。这部分将是移植Android系统的重点。Android虚拟机和Linux用户态库文件提供应用程序与Linux内核沟通的机制,并实现大量的扩展功能。如果要开发自定义的Android系统,就少不了开发指定的用户态库文件。如果Android系统是用于特定目的,一般还要为应用程序(APK)开发对应的底层库文件及JNI库。这也是Android系统移植的重点。最高层是应用程序框架,该部分提供应用程序可以调用的Java包,它们实现了多数的Android API,是应用开发的重点。最上层是应用程序,该部分由第三方开发,与系统移植无关。
移动开发也称为手机开发,或叫做移动互联网开发,是指以手机、PDA、UMPC等便携终端设备为基础进行相应的开发工作。由于这些随身设备基本都采用无线上网的方式,因此,业内也称作为无线开发。
移动应用开发类似于Web应用开发,是为小型无线计算设备编写软件的流程和程序的集合,起源于更为传统的软件开发,其独特之处在于通常根据一个具体移动设备所提供的性能编写软件。
根据目前科学技术的发展,未来的移动电话可能包含如下功能:
(1)更智能的语音接口
未来手机会大范围应用语音功能。不同于现在的语音检索,未来的语音功能会更加完善,功能更多,识别更准确,而且可以与用户的生活融为一体。
(2)互动投影
如果想把手机做得更小,又能提供丰富的娱乐体验,那就只能把触摸屏幕换成互动投影仪,这种变更会使得手机变得更小,而显示面积却变得更大。
(3)云计算
受电池和发热的限制,手机很难拥有非常豪华的硬件配置。随着超高带宽的WiFi和4G的普及,软件开发者可以把复杂但是带宽略低的应用运行在服务器上,而手机只负责最终的用户界面。
(4)新型显示屏
影响手机厚度的因素之一就是屏幕。如果屏幕可以是简单的一块玻璃或者聚合物,那么手机的整体厚度就会大幅减少。随着柔性显示技术的发展,可以弯折的屏幕将进一步扩大显示面积,降低重量。
(5)高级图像技术
现在有越来越多的数码相机提供WiFi分享等功能。手机也可以集成高性能的图像传感器,凭借手机的处理能力和联网能力,实现对动态图像捕捉、处理和分享。现在集成相机级别的摄像功能的手机已经问世。
(6)模块化技术
在购买手机时,常常会因为手机的某个功能不够强大而考虑其他的型号。模块化的设计使得手机最核心的部件以外的大多数部件都可以由用户自行更换。这种设计类似PC机,用户可以买来选配的模块来升级系统或为系统添加新的功能。
ARM架构是32位元精简指令集中央处理器架构,广泛地使用在许多嵌入式系统设计中。由于节能这一特点,ARM处理器非常适合应用于移动通信领域,符合移动设备低耗电的设计目标。
截至2009年,ARM架构处理器占据了市面上32位嵌入式RISC处理器90%的份额。ARM处理器可以在很多消费类电子产品中看到,从便携式设备(PDA、移动电话、多媒体播放器、掌上型电子游戏和计算机)到电脑外设(硬盘、桌面型路由器),甚至在导弹的弹载计算机等军用设施中都有应用。同时还有一些基于ARM设计的派生产品,例如Marvell的XScale架构和德州仪器的OMAP系列。
2011年,ARM的客户报告了79亿ARM处理器出货量,占有了当年智能手机市场的95%,硬盘驱动器市场的90%,数字电视和机顶盒市场的40%,单片机市场的15%和移动电脑市场的20%。2012年,微软与ARM科技生产了新的Surface平板电脑,同年,AMD宣布将于2014年开始生产基于ARM核心的64位服务器芯片。
现行的(基于ARMv6、7、8架构)ARM处理器分为以下3类别:
·用于应用处理器的Cortex-A系列
·用于实时控制器的Cortex-R系列
·用于高级单片机的Cortex-M系列
ARM处理器支持多核计算,可以有多个核同时执行不同的指令,从而加快系统运行的速度。常见的多核系统有双核Cortex A9、四核Cortex A15等。同时,ARM也支持异构多核,即多个不同的ARM核所构成的多核系统,通常是由Cortex-A7和Cortex-A15构成的面向低功耗、高性能的异构多核系统。最近,TI公司推出了基于双核Cortex-R4的Hercules系列实时处理器。
在任何时刻,CPU只能运行在一种模式,但由于外部事件(中断)或编程方式,能够切换到其他的模式。CPU ARM架构指定了以下的CPU模式:
·用户模式,唯一的非特权模式。
·系统模式,通过非异常的方法进入的特权模式。
·SVC模式,执行SWI指令或处理器复位后进入的模式。
·Abort模式,缓存没有命中时进入的模式。
·未定义模式,执行非法指令时进入的模式。
·干预模式,处理IRQ的模式。
·快速干预模式,处理FRQ(快速IRQ)的模式。
·Hyp模式,Cortex-A15专用的虚拟化模式。
ARM架构包含了以下精简指令集处理器的特性:
·读取/存储架构。
·正交指令集。
·大量的16×32位寄存器阵列。
·固定的32位操作码长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。
·大多均为一个CPU周期运行。
·大部分指令可以条件运行,降低在分支时产生的负重,弥补分支预测器的不足。
·算术指令只会在要求时更改条件码。
·32位筒型位移器可用来运行大部分的算术指令和寻址计算,而不会损失性能。
·强大的索引寻址模式。
·精简但快速的双优先级中断子系统,具有可切换的暂存器组。
ARM处理器支持丰富的指令集,包括传统的ARM指令集、高密度的Thumb/Thumb2指令集、为浮点运算优化的VFP指令集等,部分ARM处理器甚至能直接执行部分Java字节码,这就为以Java作为主要编程语言的Android系统带来了极大的便利。
ARM虽然性能强大,但是ARM仅仅是一种处理器核,要组成一个通用处理器,还需要有总线系统、存储系统、I/O系统等部件的配合。为了协调各种部件,ARM公司推出了为ARM处理器定制的、行业标准的AHB和APB总线。常见的基于ARM的SoC包含至少一个ARM内核、一个AHB总线控制器、一个内存控制器、一个闪存控制器、至少一个APB总线控制器和一些外设。ARM SoC的性能取决于ARM核和RAM子系统,ARM SoC的功能取决于外设的种类和数目。
基于Cortex-M系列核的SoC通常主频不超过200MHz,内置Flash与RAM,Flash不超过1MB,RAM不超过256KB,面向传统的单片机市场以及PLC、现场总线等控制类应用。基于Cortex-M系列核的SoC因直接与外部I/O打交道,所以拥有丰富的片内外设,如大量的定时器、丰富的ADC和DAC以及比较器等模拟外设、UART总线和CAN总线等。这类单片机对外部电路依赖小,低功耗,低成本,可以使用复杂的、大型的实时操作系统,能处理复杂的网络协议,目前正在取代传统的8位单片机。Cortex-M家族中的Cortex-M0面向低功耗市场,Cortex-M1面向FPGA嵌入式软核市场,Cortex-M3面向通用控制和通信市场,Cortex-M4有可选的FPU,并能运行在高达200MHz的频率下,面向高性能控制、通信和人机接口市场。
面向高可靠性、高可用性、低延时的关键类应用,ARM公司推出了Cortex-R系列实时控制器。与Cortex-M系列相比,该类产品拥有双机备份的能力,即在一个芯片内实现两个CPU核,双机同时工作,另有一个独立的模块负责监督,在发生故障时屏蔽出错的核,由另一个核继续工作。这种热备份、冗余的结构使得Cortex-R系列的可靠性非常高,又因为Cortex-R系列的总线、RAM控制器和Flash控制器都支持高级的ECC等校验机制,使得SEU在多数情况下不会对系统造成严重的影响。另外,基于Cortex-R系列内核的实时控制器拥有更大的片内Flash和片内RAM以及更高的运行频率,为冗余、安全操作系统和控制程序提供了更好的运行环境,在软件层面上也加强了系统的可靠性。与Cortex-M系列核的微控制器相同的是,Cortex-R核的实时控制器也包含丰富的外设,因为片内外设的可靠性一般来说比片外外设要高,而且很多集成外设也包含一定程度的安全特征。
Cortex-A系列核代表了当今性能最强的ARM处理器,该系列包含Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15等多款处理器核。所有的Cortex-A系列核都是为高性能而设计的,因而都可以用作移动设备或者瘦客户机等高性能设备的处理器核。其中,Cortex-A8是最早发售的型号,被用作通用应用处理器;Cortex-A9、Cortex-A15因良好的多核支持,被用于高性能系统,如手机和ARM服务器。后来的Cortex-A7则是精简版的Cortex-A8,拥有与Cortex-A8相似或略高的性能和更小的硅片面积,同时支持多核,并且耗电更少。Cortex-A5则是ARM公司对ARM9、ARM11产品推出的升级产品,与Cortex-A8、Cortex-A8和Cortex-A9完全应用兼容,是ARM公司的低成本、低功耗产品。所有的Cortex-A系列核均含有MMU等系统管理模块,因此都可以运行Linux等大型操作系统。部分处理器还有可选的NEON单元、Java虚拟机、虚拟化等高级功能,这些功能为ARM作为高性能移动处理器或高能效服务器处理器打下了坚实的基础。通常,Cortex-A系列的处理器都能运行在至少800MHz的频率上,有的甚至能超过2000MHz。
ARM处理器属于精简指令集处理器(RISC),这是ARM与x86处理器最大的不同。实际上,几乎所有的x86兼容处理器以外的处理器都是RISC处理器,只有x86、x86-64等传统的、面向桌面市场的处理器还在使用复杂指令集处理器(CISC)。以常用的Intel桌面处理器为例,传统的CISC处理器指令集支持丰富的操作,指令可以访问内存,提供大量的内存缓存,因此可以在同样的指令周期内执行更多的命令。然而,CISC处理器的结构臃肿,需要很大程度的手工优化和工艺优化来提升运行频率,由于内部逻辑单元和缓存太多,耗电量也远高于RISC处理器。
RISC处理器旨在使用简单的指令集实现与CISC一样的功能。因为指令集的减少,很多操作需分步进行,从而减少了相同周期内执行指令的个数。尽管如此,RISC处理器因为结构简单,可以在设计阶段使用自动化工具进行逻辑综合、布局和布线,从而大幅度降低了设计门槛。又因结构简化,RISC处理器可以在同样的工艺和优化成本上实现更高的运行频率和更低的电能消耗。举例来说,一颗Intel的、基于Ivy Bridge架构的至强处理器(E3-1230v2)拥有4个核,每个核运行频率为3.3GHz,耗电69W。而同一时期的三星公司生产的ARM SoC,Exynos 5420,拥有4个能运行在1.9GHz的核和4个能运行在1.3GHz的核,而耗电不超过3W。虽然指令集效率可能没有基于CISC且拥有SSE/SSE/AVX的至强处理器高,但是每瓦特性能(即能效)远高于后者,因此RISC处理器常用于移动设备、嵌入式设备等对功耗有严格要求的领域。
ARM处理器支持ARM和Thumb指令集。以最新、最简单的Cortex-M0为例,该处理器占用硅片面积小,在90纳米工艺下约0.04平方毫米,功耗低至16微瓦MHz,是理想的8位或16位单片机的替代品。在低功耗的同时,Cortex-M0处理器还集成了丰富的指令,支持ARM v6Thumb指令集,包括Thumb II扩展指令集。该处理器的高性能版本甚至还支持单周期32位乘法。Cortex-M0处理器共支持56条指令,分为本原指令(Intrinsic Instructions)、内存操作指令(Memory Access Instructions)、通用数据处理指令(Generic Data Processing Instructions)、分支和控制指令(Branch and Control Instruments)和其他指令(Miscellaneous Instruments)。
本源指令和其他指令是标准C语言不用的,但是在操作系统或应用程序中可能用到用于控制CPU工作的指令。为了在C语言中使用这些CPU相关的扩展指令,可以使用CMSIS接口或者内嵌汇编代码。以下是Cortex-M0核所支持的本源指令和其他指令。
CPSIE i:使能IRQ
CPSID i:禁止IRQ
ISB:代码缓存同步
DSB:数据缓存同步
MSB:内存同步
NOP:等待一个周期
REV:32位按位反转
REV16:16位按位反转
REVSH:32位低半字反转
SEV:发送中断
WFE:等待事件
WFI:等待中断
MRS:从特殊寄存器移动至通用寄存器
MSR:从通用寄存器移动至特殊寄存器
BKPT:设置断点
SVC:调用SVC例程
内存操作指令用于读、写内存、生成地址和堆栈管理。以下是Cortex-M0支持的内存操作指令。
ADR:生成相对PC的地址
LDM:装载多个寄存器
STM:存储多个寄存器
LDR系列:装载一个寄存器
STR系列:存储一个寄存器
PUSH:入栈
POP:出栈
通用数据处理指令对数据进行算术运算。Cortex-M0支持如下通用数据处理指令。
ASRS:算术右移
LSLS:逻辑左移
LSRS:逻辑右移
ROR:循环右移
ADCS:带进位加法
ADDS:无进位加法
ANDS:逻辑与
BICS:位清除
CMN:负数比较
CMP:比较
EORS:异或
MOVS:复制数据
MULS:乘法
MVNS:取非并移动
ORRS:逻辑或
RSBS:取反相减
SBCS:带进位减法
SUBS:无进位减法
SXTB:设置扩展字节
SXTH:设置扩展双字节
UXTB:取消扩展字节
UXTH:取消扩展双字节
TST:按位与并比较
分支控制指令改变PC中的值,从而实现代码跳转。跳转可以是有条件的,也可以是无条件的。有条件跳转的条件存放于状态寄存器。Cortex-M0支持如下分支控制指令。
B:条件跳转
BL:带返回跳转
BX:交换指令跳转
BLX:带返回的交换指令跳转
ARM处理器通常作为SoC的核存在,本节中所采用的ARM处理器都是基于ARM处理器的SoC。近年来常用的ARM核为ARM7、ARM9、ARM11、Cortex-M0、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-R4、Cortex-R7、Cortex-A5、Cortex-A6、Cortex-A8、Cortex-A9和Cortex-A15等。由于处理器市场定位、性能区间和设计的相似性,本节将ARM7、Cortex-M0、Cortex-M1、Cortex-M3和Cortex-M4称为微控制器系列,将Cortex-R4和Cortex-R7称为实时处理器系列,将ARM9、ARM11、Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9和Cortex-A15称为应用处理器系列。
通常微控制器系列的ARM处理器不需要外接Flash和RAM,其内部的Flash和RAM存储器能够满足绝大部分应用需求。有些早期的ARM7处理器支持外接SDRAM,如三星公司的S3C44B0,此类处理器定位于高端工控而非微控制器,本书不介绍。一般的微控制器集成度很高,仅需要提供合适的电源即可工作。有的芯片可能还需要输入一个外部复位信号。多数的处理器支持电路编程,即芯片在安装之后通过ISP/ICP接口进行编程。
综上所述,多数微控制器类的ARM处理器的电路设计十分简单,最小系统仅需要电源稳压器、退耦电容以及ISP/ICP相关电路即可。如图1-7所示为一个实际的应用电路——STM32F103T8U6Cortex-M3处理器为例。
图1-7 STM32F103T8U6Cortex-M3处理器应用电路
实时处理器,即Cortex-R4和Cortex-R7等,因为面向高可靠市场,所以一般集成Flash与RAM,用法与微控制器类似。由于对可靠性的要求高,所以配备相应的片外监控芯片与更可靠的电源供应。常见的片外外设有看门狗定时器、电源监控和复位芯片、电平转换与静电防护芯片等。供电方面应该配备多重可并联的冗余供电,以防止因供电问题导致可靠性降低。
应用处理器定位高性能市场,内部集成的Flash和RAM不能满足需求。几乎所有应用处理器都要外加代码存储器和RAM。代码存储器通常由Flash闪存提供,也可以是硬盘等其他存储介质。为了保证高峰值运算能力与低平均功耗,应用处理器一般会采用复杂的电源管理系统,因此外围电路非常复杂,可能需要六层或八层电路板来实现。虽然有些应用处理器通过封装叠加或多芯片封装的方法把Flash和RAM集成到一个封装内,目的在于降低布线的难度,但其外设电路仍然复杂。下面将专门介绍应用处理器在Android智能设备上的硬件架构。
常见的Android手机/平板架构,其中包含应用处理器、基带处理器和射频前端、内存、闪存、音频Codec、电源管理、传感器、触摸屏幕等组件。
应用处理器通常是一个ARM处理器或MIPS处理器,负责运行Android程序代码。一般情况下,应用处理器集成了图形处理器、浮点运算协处理器和Java字节码处理器。图形处理器用于通过OpenGL ES接口提供高速的图像渲染、3D场景重构。浮点运算协处理器和Java字节码处理器能在降低CPU负载的情况下完成复杂的运算和Java字节码的执行,实现快速的Java虚拟机。这种组合决定了基于Java的Android几乎可以和基于C++的移动系统一样快。
基带处理器一般是一个高性能的DSP处理器,它负责无线通信的基带算法。所有的基于蜂窝系统的通信均通过基带系统实现。射频前端分为接收和发射两大部分:接收部分包含低噪声放大器、射频混频器、本机振荡器、带通滤波器和模数转换器;发射部分包含数模转换器、本机振荡器、射频混频器和功率放大器。其中模数转换器和数模转换器一般被集成在一个芯片里,叫做模拟前端。模拟前端直接与基带处理器连接,由基带处理器负责通信信号的处理。基带处理器还负责语音的处理,包括消回音算法、信噪比增强和AMR/ADPCM编解码等。通过基带处理器与应用处理器通信,实现了完整的蜂窝系统设备。
内存、闪存是支撑应用处理器和基带处理器的必需部件。内存提供临时、高速的数据缓冲,用以支撑高速的处理器数据请求。一般通过DDR3、LPDDR3或LPDDR2与处理器连接。DDR3的优势是高性能,LPDDR3的优势是低功耗,LPDDR2的优势是在功耗较低的前提下提供快速的突发访问能力。闪存则提供永久的数据保存,用来存储程序和数据。传统上分为NOR Flash和NAND Flash。NOR Flash一般用来存储系统程序,而NAND Flash用来存储用户程序和数据。由于NAND Flash的成本下降、性能提升,现在的手机几乎完全使用NAND Flash。一种新型的基于NAND Flash的eMMC/iNAND正在慢慢占领新的市场,这种新的闪存器件需要更少的I/O资源,拥有不低于传统闪存的性能,从而获得更多的青睐。
音频Codec,全称是音频编解码器,负责采集来自话筒的音频信号以及从耳机接口或扬声器输出的音频信号。由于包含了数模转换和模数转换,所以被称为Codec,即编码器和解码器。
电源管理部分负责电池的充放电、电池电量、寿命监测,并为各种处理器等系统部件提供稳定的电源。手机等移动设备需要高度省电,因此很多电源管理系统都需要配合应用处理器实现各种低功耗功能,比如动态电压频率调节、低功耗模式等。
传感器与触摸屏提供了最直观的输入输出功能。通常智能手机包含加速度传感器、陀螺仪、温度传感器、光线传感器、接近传感器和地磁传感器等多个传感器部件。这些传感器会占用大量的I/O资源。为了节约I/O资源,会用一个单片机将全部的传感器数据汇总,一并发给应用处理器。这个单片机就是Sensor Hub。触摸屏可以分成触摸控制器和液晶显示屏。触摸控制器一般与各种传感器一起连接至Sensor Hub,而液晶显示屏直接连接至应用处理器的LCD接口。