现今对于嵌入式微控制器(MCU)的应用与功能的要求正不断增多,例如,电机控制必须具有更高的能源效率;以往独立式的应用也必须进行联网。在这种情况下,对微控制器的性能和储存容量的要求也大为提高。对一些应用而言,解决的方法就是从8位或16位MCU升级至32位。这样一来,虽然性能得以提高,但也可能导致单位成本、系统复杂性以及软件开发成本的增加。本文将讨论如何透过系统整合将8位功能加入至32位系统中,以及提供功能强大的低成本开发工具,加快这种升级过程。
透过提升制造技术可以降低单位成本。不过,除非32位MCU具备和8位或16位系统相同的系统整合度,否则这些优点都将因为加入外部组件的成本而一笔勾销。高性能系统独有的高速缓存等往往令系统变得复杂。但是对那些正在升级至 32 位系统的典型实时控制应用而言,这些并不是必需的功能。虽然,把现有代码移植到新一代更高性能微控制器的成本是无法省去的,但为了减少整体所需的工作量,可以透过开发工具的设计来推动这种升级过程。
市场趋势:转向32位MCU
根据Gartner Dataquest公司统计,在过去十年间,32位微控制器在MCU市场的营业额从零开始增加到了近25%,目前成长率高于8位或16位系统。而且,随着众多配备了针对特定市场领域,如汽车市场的功能组件不断涌现,MCU市场正在逐步分化。 从8位和16位MCU升级至 32位架构的重点是深度嵌入式实时控制应用。
此外,目前产业界还出现了一个明显趋势,就是ARM RISC处理器正逐渐成为32位MCU的产业标准,一如当初8051架构是8位系统的标准。目前,ARM 在32位嵌入式RISC MCU市场的占有率达 75%,截至2005年1月,ARM各合作伙伴已使用超过25亿片的ARM核心的MCU。
成本:技术和整合度的考虑
采用0.18μm的制程技术,生产一颗含有一个32位RISC处理器、标准外围设备和一个小容量闪存的单芯片成本并不昂贵,但对于8位应用而言,单凭此尚不足够。从8位微控制器升级的应用需要有更高水平的系统整合度(图一)来满足整体的系统成本预算。而且,这种整合度必须让32位系统具有8位SoC的基本功能。
32位组件必须采用单电源运作、整合大电流驱动I/O和收发器、控制系统通电、透过低成本石英震荡器生成系统频率,而且其 I/O上应具有可编程上拉电阻(pull-up)。此外,32位组件还应确保在任何环境下应用的行为都可以预测,这需要一个节电检测器 (brown-out detector)、一个可编程监视器,以及一个高整合RC振荡器,而不需高速缓存和闪存加密位(lock bit)。
《图一 要处理8位应用,32位MCU必须具备的整合度》 |
|
从8位升级至 32位系统时的性能要求
嵌入式闪存的访问时间
由于8位微控制器的应用一般是以控制为主导(control-driven)的,要求对外部事件的决定性(deterministic)响应和可预测的响应时间。然而,用来加快对缓慢非挥发性储存媒介之访问速度的高速缓存却不是决定性的,因此对于那些对时间要求严格的应用来说是无法接受的。提高实时性能又不增加成本的唯一方法,就是加快对嵌入式闪存的访问速度。
目前业界的0.18μm制程技术能在30MHz的ARM微控制器上进行单周期内存存取,原始性能可达27MIPS,远高于现有的一般 8位微控制器。
提高中断处理能力
实时控制应用一般是采用中断驱动,利用多个中断源和规定每一中断时间内所需的响应来进行。基本的ARM架构有一个缺点,就是它的中断处理机制很简陋,没有中断优先所需的硬件装置。这时便需要一种装置来增强中断能力,如(图二)所示。它提供一组带有 8 个优先等级之可独立屏蔽的向量式中断源。永久储存在SRAM中的基本中断处理程序负责分配中断的优先级级别,然后执行一条指令,利用中断编号(每一中断源均获有一个独立编号)作为偏移量(offset),把用于所需中断服务程序的向量直接装加载程序计数器(Program Counter)。这种简单有效的机制能够确保在最少数目的指令周期内,把控制传送到所需的中断服务程序中。
独立位设置/重设
ARM架构的另一缺陷是不能利用单独ARM指令进行单独的位设置和重设操作。对实时控制应用而言,这些操作必须执行一个读-改-写(read-modify-write)之序列。在多个任务共使用同一外围设备的情况下,位操作(bit manipulation)必须是独立的(atomic)(不易中断),这就要求在读-改-写序列期间屏蔽中断。
这种解决方案是透过两个虚拟缓存器(virtual register),一个用于位设置(使启动),另一个用于位重设(使失效),这能透过单条储存指令来启动位或使之失效(图三)。由于这种指令对ARM处理器的影响是单独的,故不必屏蔽中断。
外围DMA控制器
在外围设备上要保持恒定的数据传输率,需要处理器的实时响应。采用一个外围直接内存访问(DMA)控制器就可消除这种约束。不同于CPU按字节逐一传输数据,这种DMA无需CPU干涉,便可直接把数据按模块进行传输。在每个模块传输结束时产生一个单独的中断讯号,不再需要对外围设备轮询(polling)。采用双指针机制(dual pointer mechanism)就可以自动管理模块数据传输,避免对时间要求严格的指针重新配置。
单电源
先进的CMOS技术使微控制器中的内核电源电压逐渐降低。采用0.18μm制程时,其典型值是1.8V。不过,如果要保留与原有8位系统的兼容性,32位MCU必须采用电压范围在3.0V到3.6V之间的单电源。在这种情况下,可以利用一个内置电压调节器(图四)来产生内核及其它SoC子系统所需的1.8V电压。该调节器的输出电压在产出阶段时校准。
以外部连接方式来提供1.8V电压环,能根据主板能力对功率源进行更好的控制。对于采用SoC电压调节器、还是效率更高或待机耗电更低的外部电压调节器,最终用户拥有绝对的控制权。
使用外部连接方案的另一项优点是,可能使主板上的其他IC也由内部产生的1.8V供电。
当CPU以较低的速度(500Hz到1.5MHz)运行时,电压调节器会处于闲置(idle)模式,此时电压调节器的功耗降到20μA。这种情况下,最大输出电流为1mA,便足以维持CPU和大多数外围设备的活动。这有助于弥补32位MCU待机电流过高的缺点。
减低8位升级至32位过程的复杂性
要增加低成本32位ARM微控制器的市场接受程度,必须使现有硬件更方便于嵌入式应用。简化专为C语言优化的组件编程模型(device programming model)、提供强有力的除错功能,以及使已建立的8位开发工具能支持32位微控制器等,都是加快用户学习速度的关键。
一个适用于整个微控制器系列整合式外围设备、并全面且一致的编程模型,正是简化升级复杂性的基础。要做到这种模型,最好的方法是透过一种均匀缓存器结构(homogeneous register structure)为所有外围设备指定系统和中断结构位址。只需一个紧密地整合在外围位址空间的外围DMA控制器,就可以明显降低对软件的要求。
为用户提供外围设备驱动器和完整的项目实例(如可重用的源代码),可加快他们的学习时程,并尽快开始工作。当代码能够迅速被更新,而一旦被加载后组件就能完全自主时,SoC闪存的优点就变得显而易见。ARM7处理器适合于多种操作系统和软件模块如协议堆栈。此外,ARM微控制器的技术顾问人数正日益增加,能有效帮助升级中的客户处理移植过程上遇到的各种问题。
对软件开发商而言,要加快移植过程并使硬件有效,除错工具非常重要。支持硬件断点(hardware breakpoints)的在线仿真(In-Circuit-Emulation)接口,提供对处理器的缓存器和内部储存空间的全面存取能力,此外也是连接软件可控追踪(software-controlled trace)除错器的接口。目前它们是具有最佳性价比的除错解决方案(图五)。编程人员使用指令集仿真器(Instruction Set Simulator),可以在硬件除错之前提高硬件水平,进而缩短开发时间。
除了微控制器除错埠之外,使用SoC硬件(on-chip hardware)也可以加快开发速度。一般而言,错位(mis-aligned)的数据存取极难处理,除非SoC监控器能够予以识别,并向处理器发出一个异常中断请求。这正是ARM架构的功能之一。当处理器在除错模式下被中止时,有可能会发生监视器溢出(overflow)事故。但若在除错时自动把监视器中止,就可以预防这种情况的发生。此外,外围设备还可能在除错期间产生无效的中断请求,这些请求应该被过滤。
要避免在升级过程差不多完成时才出现最后错误,最好的方法是用闪存来储存程序。这样,在开发的最终阶段也可以对软件进行修改,而不会影响生产周期,灵活性极佳。
总结
要避免在升级过程差不多完成时才出现最后错误,最好的方法是用闪存来储存程序。这样,在开发的最终阶段也可以对软件进行修改,而不会影响生产周期,灵活性极佳。
从8位升级到32位微控制器不仅仅是组件成本的问题,而且还必须达到8位微控制器的高整合度、提高实时性能的水平,并提供多元化的内存容量选择。就相同的功能集而言,现今的先进制造技术能使32位微控制器达到8位微控制器的价位。熟悉的开发工具和先进的除错解决方案,也使32位微控制器的升级变得更加简易。
由8位、16位和32位系统通用之开发工具支持的ARM微控制器,正渐渐成为业界嵌入式32位微控制器标准。