Cortex-M

ARM非常关心安全漏洞,现在它已经将安全性设计到了芯片中。该芯片设计公司今天宣布,其ARM Cortex-M35P处理器在芯片级上内置了防篡改技术和软件隔离功能。该技术将为智能卡,门锁和汽车设备等新兴应用带来智能卡安全级别。安全措施将有助于保护物联网(IoT)或智能连接的日常物品。

这个想法是保护芯片级别的系统免受硬件系统日益普遍的物理攻击。黑客可以使用诸如电力和电磁分析等设备来找出没有这种保护的芯片中正在发生的事情 - 并且会使数据处于危险之中。随着物联网的发展势头越来越强劲,更多具有高价值数据的设备相互连接,这些物理攻击对黑客更具吸引力。

ARM担心可能是由于与芯片直接物理接触或靠近芯片而导致的攻击。物理攻击旨在利用芯片实施层面的漏洞,而不是利用软件或设计层面的弱点。这些物理攻击分为两大类:侵入式攻击,需要(至少)芯片解封装和非侵入式攻击 - 例如近距离侧通道攻击(SCA),它通过非预期侧通道阻塞获得信息从芯片实现,例如,通过观察芯片的功耗或密码操作期间的电磁场发射)。“

Cortex-M35P是一款高性能处理器,可帮助嵌入式安全开发人员阻止物理篡改并实现更高级别的安全认证。它是Cortex-M系列中的第一款具有设计防篡改功能的处理器。它还包括用于软件隔离的ARM TrustZone技术,使设计人员可以更轻松,更快速地将多层支付或通过电信认证的安全性嵌入到任何设备的核心。

ARM表示,其现有的两个安全知识产权CryptoCell和CryptoIsland都可以使用技术来抵御各种攻击。随着物理攻击阻力的增加,这些解决方案可以解决更广泛的攻击表面,这是一些物联网应用所需要的。

ARM发布Cortex-M35P 为其设计了防篡改和软件隔离功能

ARM发布Cortex-M35P 为其设计了防篡改和软件隔离功能

ARM发布Cortex-M35P 为其设计了防篡改和软件隔离功能

ARM发布Cortex-M35P 为其设计了防篡改和软件隔离功能

ARM发布Cortex-M35P 为其设计了防篡改和软件隔离功能

ARM发布Cortex-M35P 为其设计了防篡改和软件隔离功能

ARM发布Cortex-M35P 为其设计了防篡改和软件隔离功能

来源:cnBeta.COM

围观 349

众所周知,ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种不同的市场提供服务,正好是ARM公司英文简写的三个字母。Cortex系列属于ARMv7架构,这是到2010年为止ARM公司最新的指令集架构。(2011年,ARMv8 架构在TechCon 上推出)ARMv7架构定义了三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器。OK,我们下面要介绍的“猪脚”是Cortex系列下的Cortex-M家族处理器,看官且听我娓娓道来。

一,Cortex M家族发展

经过多年的发展,Cortex-M家族下已从最初的讲究最低成本的Cortex-M0和追求最高能效的Cortex-M0+型号处理器,到目前讲究灵活性的Cortex-M33以及有着最高性能Cortex-M7型号处理器,已繁衍出7种型号的处理器产品,且性能参数各不相同,如性能比较下图所示,

简述Cortex-M0—4各个优势

当然,看一个处理器的优缺点,不单单只是从性能上来评价其好坏,而重要是合不合适,比如,性能好的往往功耗很大,散热就是个问题,而功耗低的,能效高,性能却又不给力。所以,在选取处理器时要看的是自己的产品倾向什么功能,在哪方面应用,等等,这样根据自己的实际需要选取合适的处理器。
Cortex-M家族人数如此众多,且性能各异,满足了不同客户的需求,使得ATMEL公司拥有 40 个以上的 ARM 合作伙伴,包括 NXP Semiconductors、STMicroelectronics、Texas Instruments 和 Toshiba 等领先供应商。使用标准处理器使 ARM 合作伙伴可以创建具有一致体系结构的设备,同时使它们可以专注于创建优秀的设备实现,也就是说大家的设备核心是一样的·,使用同一家公司的处理器可以使各自的设备能够很好的兼容,使供应商不必因设备之间的兼容而担忧,使他们专注创造出更优秀的设备。

二,为什么选择

下面主要简单介绍针对目前在众视野比较流行M0,M3,M4,并讲一讲大家选择它们的理由

1, 为什么选择Cortex –M0

说它是能耗最低的最小ARM处理器可谓实至名归,因为Cortex-M0 处理器在不到 12 K 门的面积内能耗仅有 85 µW/MHz(0.085 毫瓦),这在整个ARM处理器系列中,无人能望及项背,M0 的代码密度和能效优势意味着它是各种应用中 8/16 位设备的自然高性价比换代产品,同时保留与功能丰富的 Cortex-M3 处理器的工具和二进制向上兼容性。

简单,M0指令只有 56 个,这样便可以快速掌握整个 Cortex-M0 指令集(如果需要);但其 C 语言友好体系结构意味着这并不是必需的。可供选择的具有完全确定性的指令和中断计时使得计算响应时间十分容易。

M0优化的连接性,设计为支持低能耗连接,如 Bluetooth Low Energy (BLE)、IEEE 802.15 和 Z-wave,特别是在这样的模拟设备中:这些模拟设备正在增加其数字功能,以有效地预处理和传输数据。

2, 为什么选择Cortex-M3

作为少有的具有高性能和低动态能耗,Cortex-M3 处理器提供领先的功效:在 90nmG基础上为12.5DMIPS/mW。将集成的睡眠模式与可选的状态保留功能相结合,Cortex-M3
处理器确保对于同时需要低能耗和出色性能的应用不存在折衷。

全功能性让M3处理器执行Thumb®-2 指令集以获得最佳性能和代码大小,包括硬件除法、单周期乘法和位字段操作。Cortex-M3 NVIC 在设计时是高度可配置的,最多可提供240 个具有单独优先级、动态重设优先级功能和集成系统时钟的系统中断。

3为什么选择Cortex-M4

ARMCortexM4处理器是由ARM专门开发的最新嵌入式处理器,在M3的基础上强化了运算能力,新加了浮点、DSP、并行计算等,用以满足需要有效且易于使用的控制和信号处理功能混合的数字信号控制市场。其高效的信号处理功能与Cortex-M处理器系列的低功耗、低成本和易于使用的优点的组合,很好的满足了专门面向电动机控制、汽车、电源管理、嵌入式音频和工业自动化市场的新兴类别的灵活解决方案。

总结一下,还是前面所说的在选取处理器不要单单看这款处理器的好坏,合适才是最重要的!

来源: 中电网

围观 612

ARM最近刚刚宣布了对DesignStart项目的升级,加入了ARM Cortex-M3处理器。现在,可以通过DesignStart Eval即时、免费地获取相关IP,对基于Cortex-M0或者Cortex-M3处理器的定制化SoC进行评估、设计和原型开发。

原型设计的重要性常常被忽视,我希望通过本文以更多的细节阐述原型开发的重要性以及Cortex-M原型系统(MPS2+)如何帮助你方便地开始对你自己的设计进行评估和原型开发。
DesignStart不仅仅有处理器IP。DesignStart Eval和Designstart Pro包括处理器IP、一个参考子系统、以及免费的在线社区支持。此外,还提供来自ARM和ARM合作伙伴的专用支持、培训以及各种服务。

DesignStart Eval已经可以运行在ARM Cortex-M原型开发系统(即MPS2+)之上,帮助你更方便地迅速开始对你自己的设计进行评估和原型开发。

一旦你开始设计全新的定制化SoC,下一步就是进行原型开发。原型开发是SoC设计流程中的一个关键步骤:它不仅允许你对设计进行验证,也帮助你避免对一个有问题的设计进行流片。在进行验证的同时,你还可以在芯片出片之前就用原型进行软件开发,从而节约宝贵的时间。ARM的Cortex-M原型系统就是一个完美的解决方案。

为什么选择Cortex-M原型系统?

Cortex-M原型系统提供针对Cortex-M系列的快速FPGA原型开发,包括实例设计和软件支持。与市场上其它的开发板不同,该FGPA平台是针对Cortex-M处理器专门定制的,这意味着你可以快速开始和进行开发,从而专注于实施差异化。它支持ARM mbed OS、多个调试连接器(包括CMSIS-DAP),以及16MB零等候状态内存;这些都得到ARM的直接支持。

在MPS2+中实施的Cortex-M3 DesignStart

图:在MPS2+中实施的Cortex-M3 DesignStart

Cortex-M3 DesignStart包允许你用最喜欢的仿真器(Mentor® Questa®、Cadence® Incisive或Synopsys® VCS®)进行参考子系统设计的仿真,然后将你自己的IP加入设计,并在仿真环境下进行开发,对现有测试进行编辑。

ARM已经用DesignStart Eval包设计了一个实例FPGA实施,用于Cortex-M原型系统。你可以用这个实例将测试进一步延伸,针对这个平台对你的设计进行合成,以及在FPGA目标上重新运行各种仿真测试。

ARM Cortex-M3处理器以网表文件的形式提供,支持调试和追踪。Cortex-M3实例子系统设计尺寸非常小,在FPGA中留有充裕的空间让你用自己的IP进行扩展。板上有大量的外设,你也可以通过连接Arduino子板的转换器加入更多的外设。如果你找不到你所需的外设,你可以设计自己的板子,并使用所提供的PCB文件用于子板。请访问Cortex-M原型系统网站上的Arduino章节,获取实例文档。

简单、快速、方便使用

使用这一平台进行启动和运行非常方便!将电源和USB线连上PC,等待平台作为USB大容量存储设备顺利连接,将你的DesignStart文件拖拽上去,然后按下重置键来载入新的FPGA图像。一旦FPGA被载入,你可以将你的调试器连接到众多调试连接器之一,或者用CMSIS-DAP连接到核。这里有一个视频,提供更多如何对板子进行编程以及使用Keil MDK调试器的信息。

你也可以使用现有的Intel® Quartus® Prime项目文件来迅速添加自己的IP、对它进行合成以及创建FPGA图像,从而为你的IP开发软件或者开始为你的SoC创意开发原型。我们撰写了一个名为“Cortex-M3 DesignStart FPGA用户指南”的文档,详细描述了这一流程。该文档也是DesignStart下载包的一部分。

如何购买Cortex-M原型系统?

如果你还需要更多的理由来使用Cortex-M原型系统,那么你一定会很高兴地获悉,在未来一年,面向所有用户ARM将Cortex-M原型系统平台的价格降低了50%,现在只需495美元。考虑到FPGA相对庞大的尺寸(30万逻辑单元,300K LE)以及其他所有的功能(包括对mbed的支持),你就会同意这个价格非常低廉。你可以从www.arm.com/mps产品网页下单订购。

欲了解更多关于DesignStart的信息或者注册,请访问 http://designstart.arm.com

围观 335

Joseph Yiu, 高级嵌入式技术经理, ARM

William Gao, ARM 中国应用工程师与Gabriel Wang,ARM中国嵌入式应用工程师对于本文中文版亦有帮助
概要:ARM Cortex-M处理器家族现在有8款处理器成员。在本文中,我们会比较Cortex-M系列处理器之间的产品特性,重点讲述如何根据产品应用选择正确的Cortex-M处理器。

本文中会详细的对照Cortex-M 系列处理器的指令集和高级中断处理能力,以及 SoC系统级特性,调试和追踪功能和性能的比较。

1、简介

今天, ARM Cortex-M 处理器家族有8款处理器成员。除此之外,ARM的产品系列还有很多其他的处理器成员。对很多初学者,甚至某些芯片设计经验丰富但是不熟悉ARM系列处理器的设计者来说,也是很容易混淆这些产品的。不同的ARM 处理器有不同的指令集,系统功能和性能。本文会深入展现Cortex-M系列处理器之间的关键区别,以及它们和ARM其他系列处理器的不同。

1.1 ARM处理器家族

多年来, ARM已经研发了相当多的不同的处理器产品。 如下图中(图1): ARM 处理器产品分为经典ARM处理器系列和最新的Cortex处理器系列。并且根据应用范围的不同,ARM处理器可以分类成3个系列。

Application Processors(应用处理器)–面向移动计算,智能手机,服务器等市场的的高端处理器。这类处理器运行在很高的时钟频率(超过1GHz),支持像Linux,Android,MS Windows和移动操作系统等完整操作系统需要的内存管理单元(MMU)。 如果规划开发的产品需要运行上述其中的一个操作系统,你需要选择ARM 应用处理器.

Real-time Processors (实时处理器)–面向实时应用的高性能处理器系列,例如硬盘控制器,汽车传动系统和无线通讯的基带控制。多数实时处理器不支持MMU,不过通常具有MPU、Cache和其他针对工业应用设计的存储器功能。实时处理器运行在比较高的时钟频率(例如200MHz 到 >1GHz ),响应延迟非常低。虽然实时处理器不能运行完整版本的Linux和Windows操作系统, 但是支持大量的实时操作系统(RTOS)。

Microcontroller Processors(微控制器处理器)–微控制器处理器通常设计成面积很小和能效比很高。通常这些处理器的流水线很短,最高时钟频率很低(虽然市场上有此类的处理器可以运行在200Mhz之上)。 并且,新的Cortex-M处理器家族设计的非常容易使用。因此,ARM 微控制器处理器在单片机和深度嵌入式系统市场非常成功和受欢迎。

ARM Cortex-M 处理器家族介绍和比较

图 1: 处理器家族

表1总结了三个处理器系列的主要特征。

ARM Cortex-M 处理器家族介绍和比较

表 1: 处理器特性总结

1.2 Cortex-M 处理器家族

Cortex-M处理器家族更多的集中在低性能端,但是这些处理器相比于许多微控制器使用的传统处理器性能仍然很强大。例如,Cortex-M4和Cortex-M7处理器应用在许多高性能的微控制器产品中,最大的时钟频率可以达到400Mhz。

当然,性能不是选择处理器的唯一指标。在许多应用中,低功耗和成本是关键的选择指标。因此,Cortex-M处理器家族包含各种产品来满足不同的需求:

ARM Cortex-M 处理器家族介绍和比较

表 2: Cortex-M 处理器家族

不同于老的经典ARM处理器(例如,ARM7TDMI, ARM9), Cortex-M处理器有一个非常不同的架构。例如:

- 仅支持ARM Thumb®指令,已扩展到同时支持16位和32位指令Thumb-2版本

- 内置的嵌套向量中断控制负责中断处理,自动处理中断优先级,中断屏蔽,中断嵌套和系统异常处理。

- 中断处理函数可以使用标准的C语言编程,嵌套中断处理机制避免了使用软件判断哪一个中断需要响应处理。同时,中断响应速度是确定性的,低延迟的

- 向量表从跳转指令变为中断和系统异常处理函数的起始地址。

- 寄存器组和某些编程模式也做了改变。

这些变化意味着许多为经典ARM处理器编写的汇编代码需要修改,老的项目需要修改和重新编译才能迁移到Cortex-M的产品上。软件移植具体的细节记录在ARM文档:

ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers
http://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf

1.3 Cortex-M系列处理器的共同特性

Cortex-M0, M0+, M3, M4 and M7之间有很多的相似之处,例如:

- 基本编程模型 (章节 3.1)

- 嵌套向量中断控制器(NVIC)的中断响应管理

- 架构设计的休眠模式:睡眠模式和深度睡眠模式 (章节 4.1)

- 操作系统支持特性 (章节 3.3)

- 调试功能 (章节 6)

- 易用性

例如,嵌套向量中断控制器是内置的中断控制器

ARM Cortex-M 处理器家族介绍和比较

图 2: Cortex-M处理器的嵌套向量中断控制器

支持许多外围设备的中断输入,一个不可屏蔽的中断请求,一个来自内置时钟(SysTick)的中断请求(见章节 3.3)和一定数量的系统异常请求。NVIC处理这些中断和异常的优先级和屏蔽管理。

NVIC以及异常处理模型的更多的内容在章节3.2描述。其他Cortex-M处理器间的异同点会在本文的其余部分讲解。

2 Cortex-M处理器指令集

2.1 指令集简介

大多数情况下,应用程序代码可以用C或其他高级语言编写。但是,对Cortex-M 处理器支持指令集的基本了解有助于开发者针对具体应用选择合适的Cortex-M处理器。指令集(ISA)是处理器架构的一部分,Cortex-M处理器可以分为几个架构规范

ARM Cortex-M 处理器家族介绍和比较

表 3: Cortex-M 处理器ARM架构规范的规范

所有的Cortex-M 处理器都支持Thumb指令集。整套Thumb指令集扩展到Thumb-2版本时变得相当大。但是,不同的Cortex-M处理器支持不同的Thumb 指令集的子集,如图3所示

ARM Cortex-M 处理器家族介绍和比较

图 3: Cortex-M 处理器的指令集

2.2 Cortex-M0/M0+/M1指令集

Cortex-M0/M0+/M1处理器基于ARMv6-M架构。这是一个只支持56条指令的小指令集,大部分指令是16位指令,如图3所示只占很小的一部分。但是,此类处理器中的寄存器和处理的数据长度是32位的。对于大多数简单的I/O控制任务和普通的数据处理,这些指令已经足够了。这么小的指令集可以用很少的电路门数来实现处理器设计,Cortex-M0 和 Cortex-M0+最小配置仅仅12K门。然而,其中的很多指令无法使用高位寄存器(R8 到R12), 并且生成立即数的能力有限。这是平衡了超低功耗和性能需求的结果。

2.3 Cortex-M3指令集

Cortex-M3处理器是基于ARMv7-M架构的处理器,支持更丰富的指令集,包括许多32位指令,这些指令可以高效的使用高位寄存器。另外,M3还支持:

• 查表跳转指令和条件执行(使用IT指令)

• 硬件除法指令

• 乘加指令(MAC)

• 各种位操作指令

更丰富的指令集通过几种途径来增强性能;例如,32位Thumb指令支持了更大范围的立即数,跳转偏移和内存数据范围的地址偏移。支持基本的DSP操作(例如,支持若干条需要多个时钟周期执行的MAC指令,还有饱和运算指令)。最后,这些32位指令允许用单个指令对多个数据一起做桶型移位操作。

支持更丰富的指令导致了更大的面积成本和更高的功耗。典型的微控制器,Cortex-M3的电路门数是Cortex-M0 和 Cortex-M0+两倍还多。但是,处理器的面积只是大多数现代微控制器的很小的一部分,多出来的面积和功耗经常不那么重要。

2.4 Cortex-M4指令集

Cortex-M4在很多地方和Cortex-M3相同:流水线,编程模型。Cortex-M4支持Cortex-M3的所有功能,并额外支持各种面向DSP应用的指令,像SIMD, 饱和运算指令,一系列单周期MAC指令(Cortex-M3只支持有限条MAC指令,并且是多周期执行的),和可选的单精度浮点运算指令。

Cortex-M4的SIMD操作可以并行处理两个16位数据和4个8位数据。例如,图4展示的QADD8 和 QADD16 操作:

ARM Cortex-M 处理器家族介绍和比较

图 4: SIMD指令例子: QADD8 and QADD16

The uses of SIMD enable much faster computation of 16-bit and 8-bit data in certain DSP operations as the calculation can be parallelized. However, in general programming, C compilers are unlikely to utilize the SIMD capability. That is why the typical benchmark results of the Cortex-M3 and Cortex-M4. However, the internal data path of the Cortex-M4 is different from Cortex-M3, which enable faster operations in a few cases (e.g. single cycle MAC, and allow write back of two registers in a single cycle).在某些DSP运算中,使用SIMD可以加速更快计算16位和8位数据,因为这些运算可以并行处理。但是,一般的编程中,C编译器并不能充分利用SIMD运算能力。这是为什么Cortex-M3 和 Cortex-M4典型benchmark的分数差不多。然而,Cortex-M4的内部数据通路和Cortex-M3的不同,某些情况下Cortex-M4可以处理的更快(例如,单周期MAC,可以在一个周期中写回到两个寄存器)。

2.5 Cortex-M7指令集

Cortex-M7支持的指令集和Cortex-M4相似,添加了:
• 浮点数据架构是基于FPv5的,而不是Cortex-M4的FPv4,所以Cortex-M7支持额外浮点指令

• 可选的双精度浮点数据处理指令

• 支持缓存数据预取指令(PLD)

Cortex-M7的流水线和Cortex-M4的非常不同。Cortex-M7是6级双发射流水线,可以获得更高的性能。多数为Cortex-M4设计的软件可以直接运行在Cortex-M7上。但是,为了充分利用流水线差异来达到最好的优化,软件需要重新编译,并且在许多情况下,软件需要一些小的升级,以充分利用像Cache这样的新功能。

2.6 Cortex-M23指令集

Cortex-M23的指令集是基于ARMv8-M的Baseline子规范,它是ARMv6-M的超集。扩展的指令包括:

• 硬件除法指令

• 比较和跳转指令,32位跳转指令

• 支持TrustZone安全扩展的指令

• 互斥数据访问指令(通常用于信号量操作)

• 16位立即数生成指令

• 载入获取及存储释放指令(支持C11)

在某些情况下,这些增强的指令集可以提高处理器性能,并且对包含多个处理器的SoC设计有用(例如,互斥访问对多处理器的信号量处理有帮助)

2.7 I Cortex-M33指令集

因为Cortex-M33设计是非常可配置的,某些指令也是可选的。例如:

• DSP指令(Cortex-M4 和Cortex-M7支持的)是可选的

• 单精度浮点运算指令是可选的,这些指令是基于FPv5的,并且比Cortex-M4多几条。

: Cortex-M33也支持那些ARMv8-M Mainline引入的新指令:

• 支持TrustZone安全扩展的指令

• 载入获取及存储释放指令(支持C11)

2.8 指令集特性比较总结

ARMv6-M, ARMv7-M 和 ARMv8-M架构有许多指令集功能特点, 很难介绍到所有的细节。但是,下面的表格(表4)总结了那些关键的差异。

ARM Cortex-M 处理器家族介绍和比较

表 4: 指令集特性总结

Cortex-M处理器指令集的最重要的特点是向上兼容。Cortex-M3的指令是Cortex-M0/M0+/M1的超集。所以,理论上讲,如果存储空间分配是一致的,运行在Cortex-M0/M0+/M1上的二进制文件可以直接运行在Cortex-M3上。同样的原理也适用于Cortex-M4/M7和其他的Cortex-M处理器;Cortex-M0/M0+/M1/M3支持的指令也可以运行在Cortex-M4/M7上。

虽然Cortex-M0/M0+/M1/M3/M23处理器没有浮点运算单元配置选项,但是处理器仍然可以利用软件来做浮点数据运算。这也适用于基于Cortex-M4/M7/M33但是没有配置浮点运算单元的产品。在这种情况下,当程序中使用了浮点数,编译工具包会在链接阶段插入需要的运行软件库。软件模式的浮点运算需要更长的运行时间,并且会略微的增加代码大小。但是,如果浮点运算不是频繁使用的,这种方案是适合这种应用的。

3 架构特性

3.1 编程模型

Cortex-M处理器家族的编程模型是高度一致的。例如所有的Crotex-M处理器都支持R0到R15,PSR, CONTROL 和 PRIMASK。两个特殊的寄存器— FAULTMASK 和 BASEPRI—只有Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33支持;浮点寄存器组和FPSCR(浮点状态和控制寄存器)寄存器,是Cortex-M4/M7/M33可选的浮点运算单元使用的。

ARM Cortex-M 处理器家族介绍和比较

图 5: 编程模型

BASEPRI寄存器允许程序阻止指定优先级或者低的优先级中断和异常。对ARMv7-M来说这是很重要的,因为Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33有大量的优先级等级,而ARMv6-M 和 ARMv8-M Baseline只有有限的4个优先等级。FAULTMASK通常用在复杂的错误处理上(查看章节3.4)

非特权级别的实现对ARMv6-M处理器是可选的,对ARMv7-M 和ARMv8-M处理器一直支持的。对Cortex-M0+处理器,它是可选的, Cortex-M0 and Cortex-M1不支持这个功能。这意味着在各种Cortex-M处理器的CONTROL 寄存器是稍微不同的。FPU的配置也会影响到CONTROL寄存器,如图6所示。

ARM Cortex-M 处理器家族介绍和比较

图 6: CONTROL 寄存器

另外一个编程模型之间的不同是PSR寄存器(程序状态寄存器)的细节。所有的Cortex-M处理器,PSR寄存器都被再分成应用程序状态寄存器(APSR),执行程序状态寄存器(EPSR)和中断程序状态寄存器(IPSR)。 ARMv6-M 和 ARMv8-M Baseline系列的处理器不支持APSR的Q位和EPSR的ICI/IT位。ARMv7E-M系列 ( Cortex-M4, Cortex-M7) 和ARMv8-M Mainline (配置了DSP扩展的Cortex-M33 )支持GE位。另外,ARMv6-M系列处理器IPSR的中断号数字范围很小,如图7所示。

ARM Cortex-M 处理器家族介绍和比较

图 7: PSR 差异

请注意Cortex-M的编程模型和ARM7TDMI等这些经典的ARM处理器是不一样的。除了寄存器组不同外,经典ARM处理器中“模式”和“状态”的定义与Cortex-M中的也是不同的。Cortex-M只有两个模式:线程模式(Thread)和管理者模式(Handler),并且Cortex-M处理器一直运行在Thumb状态(不支持ARM指令)

3.2 异常处理模型和嵌套向量中断控制器NVIC

所有的Cortex-M处理器都包含了NVIC模块,采用同样的异常处理模型。如果一个异常中断发生,它的优先等级高于当前运行等级,并且没有被任何的中断屏蔽寄存器屏蔽,处理器会响应这个中断/异常,把某些寄存器入栈到当前的堆栈上。这种堆栈机制下,中断处理程序可以编写为一个普通的C函数,许多小的中断处理函数可以立即直接响应工作而不需要额外的堆栈处理花销。

一些ARMv7-M/ARMv8-M Mainline系列的处理器使用的中断和系统异常并不被ARMv6-M/ARMv8-M Baseline的产品支持,如图8. 例如,Cortex-M0, M0+ 和M1的中断数被限制在32个以下,没有调试监测异常,错误异常也只限于HardFault(错误处理细节请参看章节3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7处理器可以支持到多达240个外围设备中断。Cortex-M33支持最多480个中断。

另外一个区别是可以使用的优先等级数量:

ARMv6-M 架构 - ARMv6-M支持2级固定的(NMI 和 HardFault)和4级可编程的(由每个优先等级寄存器的两个位表示)中断/异常优先级。这对大多数的微控制器应用来说足够了。

ARMv7-M 架构 - ARMv7-M系列处理器的可编程优先级等级数范围,根据面积的限制,可以配置成8级(3位)到256级(8位)。ARMv7-M处理器还有一个叫做中断优先级分组的功能,可以把中断优先级寄存器再进一步分为组优先级和子优先级,这样可以详细地制定抢占式优先级的行为。

ARMv8-M Baseline – 类似 ARMv6-M,M23也有2位的优先级等级寄存器。借助可选的TrustZone安全扩展组件,安全软件可以把非安全环境中的中断的优先等级转换到优先等级区间的下半区,这就保证了安全环境中的某些中断/异常总是比非安全环境中的优先级要高。

ARMv8-M Mainline – 类似于 ARMv7-M。 可以支持8到256个中断优先等级和中断优先级分组。还支持ARMv8-M Baseline具有的优先等级调整功能。

ARM Cortex-M 处理器家族介绍和比较

图 8: Cortex-M 处理器异常中断类型

所有的Cortex-M处理器在异常处理是都要依靠向量表。向量表保存着异常处理函数的起始地址(如图8所示)。向量表的起始地址由名为向量表偏移寄存器(VTOR)决定。

• Cortex-M0+, Cortex-M3 and Cortex-M4 processors: by default the vector table is located in the starting of the memory map (address 0x0). Cortex-M0+, Cortex-M3 and Cortex-M4: 向量表默认放在存储空间的起始地址(地址 0x0)。

• In Cortex-M7, Cortex-M23 and Cortex-M33 processors: the default value for VTOR is defined by chip designers. Cortex-M23 and Cortex-M33 processors can have two separated vector tables for Secure and Non-secure exceptions/interrupts. Cortex-M7, Cortex-M23 and Cortex-M33:VTOR的初始值由芯片设计者定义。Cortex-M23 and Cortex-M33处理器面向安全和非安全的异常/中断有两个独立的向量表。

• Cortex-M0 and Cortex-M1 does not implement programmable VTOR and vector table starting address is always 0x00000000. Cortex-M0 and Cortex-M1没有实现可编程的VTOR,向量表起始地址一直为0x00000000。

Cortex-M0+ 和 Cortex-M23处理器的VTOR是可选项。如果VTOR被实现了,向量表的起始地址可以通过设置VTOR来改变,这个功能对下列情况有用:

• 重定位向量表到SRAM来实现动态改变异常处理函数入口点

• 重定位向量表到SRAM来实现更快的向量读取(如果flash存储器很慢)

• 重定位向量表到ROM不同位置(或者Flash),不同的程序运行阶段可以有不同的异常处理程序

不同的Cortex-M处理器之间的NVIC编程模型也有额外的不同。差异点总结在表 5中:

ARM Cortex-M 处理器家族介绍和比较

表 5: NVIC 编程模型和特性差异

大部分情况下,对NVIC的中断控制特性的操作都是通过CMSIS-CORE提供的APIs处理的,他们在微控制器厂商提供的设备驱动程序库里。对Cortex-M3/M4/M7/M23/M33处理器,即使中断被使能了,它的优先级也可以被改变。ARMv6-M处理器不支持动态优先等级调整,当你需要改变中断优先等级是,需要暂时的关掉这个中断。

3.3 操作系统支持特性

Cortex-M处理器架构在设计时就考虑到了操作系统的支持。针对操作系统的特性有:

• 影子堆栈指针

• 系统服务调用(SVC)和可挂起系统调用(PenSV)异常

• SysTick – 24位递减计时器,为操作系统的计时和任务管理产生周期性的异常中断

• Cortex-M0+/M3/M4/M7/M23/M33支持的非特权执行和存储保护单元(MPU)

系统服务调用(SVC)异常由SVC指令触发,他可以让运行在非特权状态的应用任务启动特权级的操作系统服务。可挂起系统调用异常在操作系统中像上下文切换这样的非关键操作的调度非常有帮助。

为了能把Cortex-M1放到很小的FPGA器件中,所有用来支持操作系统的特性对Cortex-M1都是可选的。对Cortex-M0, Cortex-M0+ 和Cortex-M23处理器,系统时钟SysTick是可选的。

通常,所有的Cortex-M处理器都支持操作系统。执行在Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33的应用可以运行在非特权运行状态,并且可以同时利用可选的存储器管理单元(MPU)以避免内存非法访问。这可以增强系统的鲁棒性。

3.4 TrustZone安全扩展

近几年来, 物联网(IoT)成为了嵌入式系统开发者们的热门话题。IoT系统产品变得更加复杂,上市时间的压力也与日俱增。嵌入式系统产品需要更好的方案来保证系统的安全,但是同时又要方便软件开发者开发。传统的方案是通过把软件分成特权和非特权两部分解决的,特权级软件利用MPU防止非特权的应用访问包含安全敏感信息在内的的关键的系统资源。这种方案对一些IoT系统非常适合,但是在一些情况下,只有两层划分是不够的。特别是那些包含很多复杂特权级别的软件组件的系统,特权级的代码的一个缺陷就可以导致黑客彻底的控制这个系统

ARMv8-M架构包含了一个叫做TrustZone的安全扩展,TrustZone导入了安全和非安全状态的正交划分。

• 普通应用是非安全态

• 软件组件和安全相关的资源(例如,安全存储,加密加速器,正随机数发生器(TRNG))处在安全状态。

ARM Cortex-M 处理器家族介绍和比较

图 9: 安全状态和非安全状态的隔离

非安全状态的软件只能访问非安全状态的存储空间和外围设备,安全软件可以访问两种状态下的所有资源。

用这种方案,软件开发者可以用以往的方式开发非安全环境下的应用程序。同时,他们可以借助芯片厂商提供的安全通讯软件库执行安全物联网连接。并且即使运行在非安全环境的特权级的程序有漏洞,TrustZone安全机制可以阻止黑客控制整个设备,限制了攻击的影响,还可以实现系统远程恢复。此外,ARMv8-M架构也引入了堆栈边界检查和增强的MPU设计,促使额外安全措施的采用。

安全架构定义也扩展到了系统级别,每个中断都可以被设置为安全或者非安全属性。中断异常处理程序也会自动保存和恢复安全环境中的寄存器数据以防止安全信息泄露。所以,TrustZone安全扩展让系统能够支持实时系统的需求,为IoT应用提供了坚实的安全基础,并且容易让软件开发在此技术上开发应用程序。

TrustZone模块对Cortex-M23 and Cortex-M33处理器是可选的。关于ARMv8-M TrustZone更多的信息请查找The Next Steps in the Evolution of Embedded Processors for the Smart Connected Era。更多的TrustZone的资源请查看community.arm.com网站上的“TrustZone for ARMv8-M Community”,

3.5 错误处理

ARM处理器和其他架构的微控制器的一个区别是错误处理能力。当错误被检测到时,一个错误异常处理程序被触发去执行恰当的处理。触发错误的情况可能是:

• 未定义的指令(例如,Flash存储器损坏)

• 访问非法地址空间(例如,堆栈指针崩溃)或者MPU非法访问

• 非法操作(例如,当处理器已经在优先级高于SVC的中断中试图触发SVC异常)

错误处理机制使嵌入式系统能够更快的响应各种问题。否则,如果系统死机了,看门狗定时需要非常长的时间重启系统。

ARMv6-M架构中,所有的错误事件都会触发HardFault处理程序,它的优先级是-1(优先级比所有的可编程异常都高,但是仅低于非屏蔽中断NMI)。 所有的错误事件都被认为是不可恢复的,通常我们在HardFault处理程序中仅运行错误报告然后进一步触发自动复位。

ARMv8-M Baseline架构和ARMv6-M类似,只有一个错误异常(HardFault)。但是ARMv8-M Baseline的HardFault优先级可以是-1或者当实现了TrustZone安全扩展时优先级是-3.

ARMv7-M 和 ARMv8-M Mainline产品除了HardFault还有几个可配置的错误异常:

• Memmanage(内存管理错误)

• 总线错误(总线返回错误的响应)

• 用法错误(未定义指令或者其他的非法操作)

• SecureFault(只用ARMv8-M Mainline产品支持,处理TrustZone安全扩展中的安全非法操作)

这些异常的优先级可以编程改变,可以单独的打开和关掉。如果需要,它们也可以利用FAULTMASK寄存器把它们的优先级提高到和HardFault相同的级别。ARMv7-M 和 ARMv8-M Mainline产品还有几个错误状态寄存器可以提供关于触发错误异常事件的线索和错误地址的寄存器,用来确定触发这个错误异常的访问地址,使调试更加容易。

ARMv7-M 和 ARMv8-M Mainline产品子规范中额外的错误处理程序提供了灵活的错误处理能力,错误状态寄存器让错误事件的定位和调试更加容易。很多商业开发套件中的调试器已经内嵌了使用错误状态寄存器来诊断错误事件的功能。此外,错误处理程序可以在运行时做一些修复工作。

ARM Cortex-M 处理器家族介绍和比较

表 6: 错误处理特性比较总结

4 系统特性

4.1 低功耗

低功耗是Cortex-M处理器的一个关键优点。低功耗是其架构的组成部分:

• WFI和WFE指令

• 架构级的休眠模式定义

此外,Cortex-M支持许多其他的低功耗特性:

• 休眠和深度休眠模式:架构级支持的特性,通过设备特定的功耗管理寄存器可以进一步扩展。

• Sleep-on-exit模式:中断驱动的应用的低功耗技术。开启设置后,当异常处理程序结束并且没有其他等待处理的异常中断时,处理器自动进入到休眠模式。这样避免了额外的线程模式中指令的执行从而省电,并且减少了不必要的堆栈读写操作。

• 唤醒中断控制器(WIC):一个可选的特性,在特定的低功耗状态,由一个独立于处理器的小模块侦测中断情况。例如,在状态保留功耗管理(SRPG)设计中,当处理器被关电的设计。

• 时钟关闭和架构级时钟关闭:通过关闭处理器的寄存器或者子模块的时钟输入来省电

所有这些特性都被Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33支持。此外,各种低功耗设计技术被用来降低处理器功耗。

因为更少的电路,Cortex-M0 and Cortex-M0+处理器比Cortex-M3, Cortex-M4 和 Cortex-M7功耗低。此外,Cortex-M0+额外优化减少了程序存取(例如跳转备份)来保持系统层级的低功耗。

Cortex-M23没有Cortex-M0 和 Cortex-M0+那么小,但是在相同的配置下,仍然和Cortex-M0+能效一样。
由于更好性能和低功耗优化,在相同配置下,Cortex-M33比Cortex-M4能效比更好。

4.2 Bit-band feature位段

Cortex-M3 和Cortex-M4处理器支持一个叫做位段的可选功能,允许有两段通过位段别名地址实现可以位寻址的1MB的地址空间(一段在从地址0x20000000起始的SRAM空间。另一段是从地址0x40000000起始的外围设备空间)。Cortex-M0, M0+ 和 Cortex-M1不支持位段(bit-band)功能,但是可以利用ARM Cortex-M系统设计套件(CMSDK)中的总线级组件在系统层面实现位段(bit-band)功能。Cortex-M7不支持位段(bit-band),因为M7的Cache功能不能与位段一块使用(Cache控制器不知道内存空间的别名地址)。

ARMv8-M的TrustZone 不支持位段, 这是由于位段别名需要的两个不同的地址可能会在不同的安全域中。对于这些系统,外围设备数据的位操作反而可以在外围设备层面处理(例如,通过添加位设置和清除寄存器)。

4.3 存储器保护单元(MPU)

除了Cortex-M0, 其他的Cortex-M处理器都有可选的MPU来实现存储空间访问权限和存储空间属性或者存储区间的定义。运行实时操作系统的嵌入式系统, 操作系统会每个任务定义存储空间访问权限和内存空间配置来保证每个任务都不会破坏其他的任务或者操作系统内核的地址空间。Cortex-M0+, Cortex-M3 和 Cortex-M4都有8个可编程区域空间和非常相似的编程模型。主要的区别是Cortex-M3/M4的MPU允许两级的存储空间属性(例如,系统级cache类型),Cortex-M0+仅支持一级。Cortex-M7的MPU可以配置成支持8个或者16个区域,两级的存储空间属性。Cortex-M0 和 Cortex-M1不支持MPU.

Cortex-M23 和 Cortex-M33也支持MPU选项,如果实现了TrustZone安全扩展(一个用于安全软件程序,另一个用于非安全软件程序)可以有最多两个MPU。

4.4 单周期I/O接口

单周期I/O接口是Cortex-M0+处理器独特的功能,这使Cortex-M0+可以很快的运行I/O控制任务。Cortex-M大多数的处理器的总线接口是基于AHB Lite或者AHB 5协议的,这些接口都是流水实现总线协议,运行在高时钟频率。但是,这意味着每个传输需要两个时钟周期。单时钟周期I/O接口添加了额外的简单的非流水线总线接口,连接到像GPIO(通用输入输出)这样的一部分设备特定的外设上。结合单周期I/O和Cortex-M0+天然比较低的跳转代价(只有两级流水线),许多I/O控制操作都会比大多数其他微控制器架构的产品运行的更快。

5 性能考虑

5.1 通用数据处理能力

在通用微控制器市场,benchmark数据经常用来衡量微控制器的性能,表7是Cortex-M处理器常用benchmark测试的性能数据:

ARM Cortex-M 处理器家族介绍和比较

表 7: Cortex-M处理器常用benchmakr的性能分数
(来源:CoreMark.org 网站 and ARM 网站)

关于Dhrystone需要注意的是用来测试的Dhrystone是由官方源程序在没有启用inline and 和multi-file compilation编译选项的情况编译出来的(官方分数)。但是,很多微控制器厂商引用的是完全优化编译的Dhrystone测试出来的数据。

但是,benchmark工具的性能测试数据可能无法准确反应你的应用能达到的性能。例如,单周期I/O接口和DSP应用中使用SIMD,或者Cortex-M4/M7中使用FPU的加速效果并没有在这些测试数据中体现出来。

通常,Cortex-M3 和 Cortex-M4由于以下原因提供了更高的数据处理性能:

• 更丰富的指令集

• 哈佛总线架构

• 写缓存(单周期写操作)

• 跳转目标的预测取指

Cortex-M33也是基于哈佛总线的架构,有丰富的指令集。但是不像Cortex-M3 和 Cortex-M4,Cortex-M33处理器流水线是重新设计的高效流水线,支持有限的指令双发射(可以在一个时钟周期中执行最多两条指令)。

Cortex-M7支持更高的性能,这是因为M7拥有双发射六级流水线并支持分支预测。而且,通过支持指令和数据Cache,和即便使用慢速内存(例如,嵌入式Flash)也能避免性能损失的紧耦合内存,来实现更高的系统级性能。

但是,某些I/O操作密集的任务在Cortex-M0+上运行更快,这是因为:

• 更短的流水线(跳转只需要两个周期)

• 单周期I/O端口

当然也有设备相关的因素。例如,系统级设计,内存的速度也会影响到系统的性能。

你自己的应用程序经常是你需要的最好的benchmark。CoreMark分数是另外一个处理器两倍的处理器并不意味着执行你的应用也快一倍。对I/O密集操作的应用来说,设备相关的系统级架构对性能有巨大的影响。

5.2 中断延迟

性能相关的另外一个指标是中断延迟。这通常用从中断请求到中断服务程序第一条指令执行的时钟周期数来衡量。表8列出了Cortex-M处理器在零等待内存系统条件下的中断延迟比较。

ARM Cortex-M 处理器家族介绍和比较

表 8: 零等待内存系统条件下的中断延迟比较

事实上,真正的中断延迟受到内存系统等待状态的影响。例如,许多运行频率超过100Mhz的微控制器搭配的是非常慢的Flash存储器(例如30到50MHz)。虽然使用了Flash访问加速硬件来提高性能,中断延迟仍然受到Flash存储系统等待状态的影响。所以完全有可能运行在零等待内存系统Cortex-M0/M0+系统比Cortex-M3/M4/M7有更短的中断延迟。

当评估性能的时候,不要忘记把中断处理程序的执行时间考虑在内。某些8位或者16位处理器架构可能中断延迟很短,但是会花费数倍的时钟周期完成中断处理。非常短的中断响应时间和很短的中断处理时间才是实际有效的。

6 调试和跟踪特性

6.1 调试和跟踪特性简介

不同Cortex-M处理器之间有若干区别。总结在表9中。

ARM Cortex-M 处理器家族介绍和比较

表9: 调试和跟踪特性比较

Cortex-M处理器的调试架构是基于ARM CoreSight调试架构设计的,它是个非常容易扩展的架构,支持多处理器系统。

表9列出的是典型设计需要考虑的。在CoreSight架构下,调试接口和跟踪接口模块是和处理器分离的。因此你采用的设备的调试和跟踪连接和表9的可能不一样。也可能通过添加一些额外的CoreSight调试组件来增加一些调试特性。

6.2 Debug connections调试接口

调试接口可以让调试者实现

- 访问控制调试和跟踪特性的寄存器。

- 访问内存空间。对Cortex-M系列处理器,及时当处理器运行时也可以执行内存空间访问。这被称作实时内存访问。

- 访问处理器核心寄存器。这只能当处理器停止的时候才可以操作。

- 访问Cortex-M0处理器中微跟踪缓存(MTB)生成的跟踪历史记录。

另外,调试接口也会用作:
- Flash 编程

Cortex-M系列处理器可以选择传统的4到5个引脚(TDI, TDO, TCK, TMS 和可选的 nTRST)的JTAG接口,或者选择新的只需要两个引脚的串行调试协议接口,串行调试接口对有限数目引脚的设备是非常适合的。

ARM Cortex-M 处理器家族介绍和比较

图 10: 串口线或者JTAG调试接口allows access to processor’s debug features and memory space including peripherals

串行线调试协议接口可以处理JTAG支持的所有特性,支持奇偶校验。串行调试协议被ARM工具厂商广泛的采用,许多调试适配器两种协议都支持,串行线型号共享调试接口上TCK和TMS针脚。

6.3 跟踪接口

跟踪接口让调试者可以在程序执行时实时的(很小的延时)收集程序运行的信息。收集的信息可以是Cortex-M3/M4/M7/M33支持的嵌入式跟踪单元(ETM)生成的程序指令流信息(指令跟踪),可以是数据跟踪单元(DWT)生成的数据/事件/性能分析信息,或者是软件控制数据跟踪单元(ITM)生成的信息。

有两种类型的跟踪接口可用:

- 跟踪端口(Trace port)– 多个数据线加上时钟信号线。比SWV有更高的跟踪带宽,可以支持SWV的所有跟踪类型加上指令跟踪。Cortex-M3/M4/M7或者 Cortex-M33的设备上,跟踪端口通常有4个数据线和一个时钟线。(图11)

- 串行监视器(SWV)– 单引脚线跟踪接口,可以选择性的支持数据跟踪,事件跟踪,性能分析和测量跟踪。(图 12)

ARM Cortex-M 处理器家族介绍和比较

图 11: Trace port 支持指令跟踪和其他跟踪功能必要的带宽

跟踪接口提供了在处理器运行的时候获取大量有用信息的能力。例如嵌入式跟踪单元(ETM)可以获取指令运行历史记录,数据跟踪单元(ITM)让软件产生消息(例如,通过printf)并利用Trace接口获取。另外,Cortex-M3/M4/M7/M33支持数据跟踪单元(DWT)模块。

- 可选的数据跟踪:内存地址的信息(例如,地址,数据和时间戳的组合)可以在处理器访问这个地址的时候采集

- 性能分析跟踪:CPU在不同操作任务使用的时钟周期数(例如,内存访问,休眠)

- 事件跟踪:提供服务器响应的中断/异常的运行时间和历史

ARM Cortex-M 处理器家族介绍和比较

图 12: Serial wire viewer 提供了低成本,少引脚的跟踪方案

这些跟踪特性被各种工具厂商广泛采用,采集的信息也被以各种方式直观的展现出来。例如DWT获取的数据可以在Keil µVision调试器中以波形的方式展现出来(Keil微控制器开发工具的一部分)如图 13所示。

ARM Cortex-M 处理器家族介绍和比较

Figure 13: Keil µVision 调试器的逻辑分析器

虽然Cortex-M0 和 Cortex-M0+不支持跟踪接口,Cortex-M0+支持叫做微跟踪缓存的特性(MTB,图14)。MTB让用户分配一小块系统SRAM作为存储指令的缓存,通常设置为循环缓存,这样可以抓取最新的指令执行历史并在调试器上显示出来。

这个MTB跟踪特性也被Cortex-M23 and Cortex-M33支持。

ARM Cortex-M 处理器家族介绍和比较

图 14: Cortex-M0+/M23/M33 的MTB提供了低成本指令跟踪方案

7 基于Cortex-M处理器的产品开发

7.1 为什么Cortex-M系列处理器容易使用

虽然Cortex-M系列处理器有非常多的特性,但是很容易使用的。例如,差不多所有的开发都可以用像C语言这样的高级编程语言。虽然,基于Cortex-M系列处理器产品都大不相同(例如,有不同大小的内存,不同的外设,性能和封装等等),架构的一致性让开发者一旦对他们其中的一块有开发经验,就很容易开始使用新的Cortex-M处理器。

为了实现更容易的软件开发,更好的软件重用性和可移植性,ARM开发了CMSIS-CORE,这儿CMSIS表示Cortex-Microcontroller Software Interface Standard,CMSIS-CORE通过一组APIs为处理器的各种特性像终端管理控制提供了一个标准的硬件抽象层(HAL), CMSIS-CORE集成在各种微处理器厂商提供的设备驱动程序库里,被各种开发工具套件支持。

除了CMSIS-CORE, CMSIS还包含一个DSP软件库(CMSIS-DSP)。这个库提供了为Cortex-M4 和 Cortex-M7优化过的各种DSP函数,当然也支持其他的Cortex-M系列处理器。CMSIS-CORE 和 CMSIS-DSP库都是免费的,可以从GitHub (CMSIS 4, CMSIS 5)下载到,并被许多工具厂商支持。

7.2 处理器选择

对大多数微控制器用户来说,微控制器设备的选择标准主要取决于成本和外设的支持情况。但是,你们中间的很多人可能是为下个芯片产品选择处理器核心芯片设计者,这种情况下,处理器 本身会是考虑的焦点。

明显的,在这样的情况下,性能,芯片面积,功耗和成本会是至关重要的因素。同时,还有各种其他的因素需要考虑。例如,如果你在开发一款互联网连接产品,你也许需要选择有TrustZone安全扩展和MPU的处理器,这样你可以用TrustZone保护关键的安全特性数据,运行某些任务在非特权级别并用MPU来保护内存空间。另一方面,如果你需要在某些方面认证你的产品,Cortex-M23, Cortex-M33, Cortex-M3, Cortex-M4 和 Cortex-M7支持的ETM生成的指令跟踪会对代码覆盖率认证非常有帮助。

在其他的芯片设计领域,如果你正在设计可以运行在能量采集设备供电的小传感器,那么Cortex-M23 和 Cortex-M0+会是最好的选择,因为他们非常小并且做了最先进的功耗优化。

7.3 生态系统

使用ARM Cortex-M系列处理器的关键优势之一是广泛的成熟设备,开发工具链和软件库的支持。目前有

- 超过15家微控制器厂商正在销售基于ARM Cortex-M系列内核的微控制器产品

- 超过10种开发套件支持ARM Cortex-M系列处理器

- 40多家操作系统厂商的操作系统支持Cortex-M系列处理器

这给了你大量选择,让你可以获得适合目标应用的最好的设备,开发工具和中间件组合。

8 总结

性能,特性和芯片面积,功耗之间总是需要平衡。为此,ARM开发了各种Cortex-M处理器,拥有不同级别的指令集特性,性能,系统和调试特性。本文介绍了Cortex-M处理器家族各种异同。

虽然存在这差别,但架构的一致性和CMSIS-CORE标准化的APIs都让Cortex-M系列处理器软件有更好的移植性和可重用性。同时,Cortex-M系列处理器非常方便使用。因此,Cortex-M系列处理器很快成为微控制器市场的最受欢迎的32位处理器架构。

额外的资源

Cortex-M系列处理器产品信息可以查找 https://developer.arm.com/products/processors/cortex-m
一系列有用的Cortex-M资源存在下面的网址 https://community.arm.com/processors/b/blog/posts/cortex-m-resources

关于ARMv8-M TrustZone的其他的有用的资源可以查找ARM社区(community.arm.com)的“TrustZone for ARMv8-M Community”。ARM社区是为开发者和开发工具厂商,产品方案商之间提供的一个免费的,开放的,非正式的交流区

本文中出现的商标是ARM有限公司(或其子公司)在欧盟和/或其他地方注册的/或未注册的商标。保留所有权利。文中所有其他标志可能是其他所有人的商标。欲了解更多信息,请访问 www.arm.com/about/trademarks

围观 1260

摘要:故障指示器是一种易于实施、少维护或免维护型低成本解决方案。在32位MCU EFM32JG/PG+射频收发器Si4438 C版本的高度集成解决方案中,实测功耗分别仅为15.45uA和12uA。该方案提供了业界领先的超低功耗性能,使得整个系统信号链范围功耗达到历史新低,且大大降低了设计的复杂性。

在环网配电系统中,特别是大量使用环网负荷开关的系统,如果下一级配电网络系统中发生了短路故障或接地故障,上一级的供电系统必须在规定的时间内进行分断,以防止发生重大事故。因此,越来越多的线路故障指示器被用于配电系统中,用来标出发生故障的部分。

故障指示器是一种易于实施、少维护或免维护型低成本解决方案,因此对于该设备在配电网中的应用需求日益增长。图1是故障指示器及监测系统示意图。

故障指示器会定时将采集到的数据通过无线的方式传输给无线网络通信节点,节点将数据传送给网关后,网关上传到后台的系统平台。通过系统平台可以观察到每一个故障指示器的数据,从而能够有效地监测配电网络。

图1:故障指示器及监测系统

图1:故障指示器及监测系统

故障指示器的系统框图如下图所示,其主要包括能量采集、电源管理、处理器、模拟前端采样电路和通信接口等。在设计中,智能能量采集/管理和超低功耗成为客户对该检测系统的关键要求,因而选择具有低功耗特性的处理器和无线收发器尤为重要。本文为大家介绍Silicon Labs(芯科科技有限公司)的低功耗32位MCU EFM32JG/PG和射频收发器Si4438在故障指示器中的应用方案以及功耗实测情况。

图2:故障指示器系统框图

图2:故障指示器系统框图

32位高性能超低功耗MCU作为处理器,实测功耗仅为15.45uA
Silicon Labs最新推出的超低功耗32位单片机EFM32JG/PG系列,分别基于Cortex-M3和Cortex-M4内核,运行时功耗低至63uA/MHz,内部RTCC工作时,休眠电流只有1.4uA。EFM32JG/PG具有非常广泛的外设选择,并且集成了硬件AES、ECC和SHA加密方式,使其非常适合用于高性能低功耗的应用。

高压线中交流电的频率是50Hz,即周期为20ms,故障指示器要想完整地对其采样,一般在一个周期中至少要采样8次,因此,故障指示器的采样频率要求至少400Hz,周期为2.5ms。而考虑到使功耗尽可能低,MCU需要尽可能多的工作在休眠状态,MCU的工作流程一般是:周期休眠2.5ms后唤醒,启动ADC进行采样,并将采样的结果存到缓冲区,然后继续休眠,采样到第8次时,对这8次的采样结果进行处理。在这种情况下,MCU需要频繁地唤醒,对于产品来说功耗往往不会太理想。

然而,EFM32PG/JG可以更进一步的降低功耗。该MCU的ADC可以工作在EM2和EM3模式下,并且在不唤醒系统的情况下触发LDMA,令其将ADC FIFO中的数据传输到RAM中。EFM32JG/PG的ADC具有4个FIFO可以存放ADC的结果。因此,实现上述同样的功能,EFM32JG/PG的工作流程可以如下:使用内部32.768KHz低频振荡器作为时钟源,定时2.5ms,时间到后通过PRS触发ADC采样,ADC采样结果存放在FIFO中,ADC采样时MCU不会唤醒,依然在EM2模式。当4个ADC FIFO都存满后,通过LDMA将数据传输到RAM的Buffer中,LDMA每隔10ms传输一次。LDMA传输数据时,高频振荡器会自动开启,传输数据结束后会自动关闭。传输数据时,MCU依然不会唤醒执行代码,但开启了高频振荡器,电流会高于EM2模式。每采样8次后,即LDMA传输两次后,MCU唤醒一次对数据进行处理。

这样的工作流程,EFM32JG/PG基本上全部是在休眠模式下将ADC采样的数据保存下来,并且由于EFM32JG/PG在EM2模式下的唤醒时间极短(仅2us),运行功耗非常低,这都大大降低了系统的功耗。图3为使用EFM32PG STK SLSTK3401A实际测试的功耗图,由图中可知,实现上述的功能,MCU平均电流仅为15.45uA。

图3:EFM32PG实际测试功耗图

图3:EFM32PG实际测试功耗图

增加了PSM功能的Si4438C版本,高性能低功耗特性更上一层楼
Silicon Labs针对中国无线市场推出了Si4438的C版本,与B版本相比,C版本突出优化了针对接收功能的功耗。Si4438的工作频段是425MHz到525MHz,发射功率高达20dBm,接收灵敏度在500bps的情况下为-124dBm,因此链路预算最高为144dBm。

Si4438的C版本增加了前缀检测模式(PSM),能够降低preamble和SYC的检测功耗。图4为Si4438的C版本和B版本的功耗对比表格,由图中的数据对比可得出,Si4438 C版本无论在高性能还是低功耗的特性中,都得到了有效的改善。

图4:Si4438 C版本和B版本功耗对比

图4:Si4438 C版本和B版本功耗对比

为了降低功耗和随时接收到发送端的数据,接收端无线收发器的一般工作模式是休眠模式和RX模式周期性转换,发送端需要先发送一个唤醒包将接收端唤醒,进行数据传输。Si4438的这种工作模式叫做LDC模式,当开启PSM功能时,Sleep设置1000ms,RX设置5ms的工作条件,实测Si4438的平均功耗在12uA。图5是Si4438的实际测试功耗图。

图5:Si4438 LDC with PSM功耗图

图5:Si4438 LDC with PSM功耗图

通过上面的分析,我们可以看到,EFM32JG/PG+Si4438C方案提供了业界领先的超低功耗性能,使得整个系统信号链范围功耗达到历史新低。此外,32位MCU EFM32JG/PG的 Cortex-M内核,处理能力和执行效率都比8位和16位的更高效。此高度集成的解决方案对于紧凑型布局极其有利,可减少设计的复杂性。

来源:世强电子

围观 546

来源:周立功单片机

无论您是资深嵌入式工程师,还是怀着满满好奇的嵌入式小白,总会有这样的一些疑惑:Cortx-A、R、M到底什么区别呢?M0、M0+、M3、M4又有什么差异呢?。本文就教您给他们这些亲兄弟算一笔明白账。

ARM Cortex内核系列提供非常广泛的具有可扩展性的性能选项,设计人员有机会在多种选项中选择最适合自身应用的内核,而非千篇一律的采用同一方案。不过ARM的产品线丰富,种类众多,到底该怎样选择适合自己产品的芯片类型?

Cortex系列组合大体上分为三种类别:

Cortex-M—面向各类嵌入式应用的微控制器内核

Cortex-R—面向实时应用的高性能内核

Cortex-A—面向性能密集型系统的应用处理器内核

Cortex-M:

Cortex-M系列基于ARMv7-M架构(用于Cortex-M3和Cortex-M4)构建,而较低的Cortex-M0+基于ARMv6-M架构构建。首款Cortex-M处理器于2004年发布,当一些主流MCU供应商选择这款内核,并开始生产MCU器件后,Cortex-M处理器迅速受到市场青睐。可以肯定的说,Cortex-M之于32位MCU就如同8051之于8位MCU——受到众多供应商支持的工业标准内核,各家供应商采用该内核加之自己特别的开发,在市场中提供差异化产品。

你总得知道你为什么要用Cortex-M

Cortex-M3和Cortex-M4是非常相似的内核。Cortex-M3和Cortex-M4具有相同的架构和指令集(Thumb-2)。然而,Cortex-M4增加了一系列特别针对处理DSP算法而优化的饱和运算和SIMD指令。以每0.5秒运行一次的512点FFT为例,如果分别在同类量产的Cortex-M3 MCU和Cortex-M4 MCU上运行,完成同样的工作,Cortex-M3所需功耗约是Cortex-M4所需功耗的三倍。此外,也有在Cortex-M4上实现单精度浮点单元(FPU)的选项。如果应用涉及到浮点计算,那在Cortex-M4上完成比在Cortex-M3上完成要快得多。也就是说,对于不使用Cortex-M4上DSP或FPU功能的应用而言,其性能和功耗与Cortex-M3相同。

总而言之,如果您使用DSP功能,那就选择Cortex-M4。否则,就选择Cortex-M3完成工作吧。

你总得知道你为什么要用Cortex-M

对于成本特别敏感的应用或者正在从8位迁移到32位的应用而言,Cortex-M系列的最低端产品可能是最佳选择。虽然Cortex-M0+的性能为0.95DMIPS/MHz,比Cortex-M3和Cortex-M4的性能稍稍低一些,但仍可与同系列其他高端产品兼容。Cortex-M0+采用Thumb-2指令集的子集,而且这些指令大都是16位操作数(虽然所有数据运行都是32位的),这使得它们能够很好的适应Cortex-M0+所提供的2级流水线服务。通过减少分支映射,系统就能节约一些整体功耗,而且在大多数情况下,流水线将保留接下来的四个指令。Cortex-M0+还具有专用的总线用于单周期GPIO,这意味着你能够利用位控制的GPIO实现确定接口,就像8位MCU那样,但却以32位内核的性能来处理该数据。

Cortex-R:

Cortex-R处理器针对高性能实时应用,例如硬盘控制器(或固态驱动控制器)、企业中的网络设备和打印机、消费电子设备(例如蓝光播放器和媒体播放器)、以及汽车应用(例如安全气囊、制动系统和发动机管理)。Cortex-R系列在某些方面与高端微控制器(MCU)类似,但是,针对的是比通常使用标准MCU的系统还要大型的系统。

Cortex-A:

Cortex-A处理器为利用操作系统(例如Linux或者Android)的设备提供了一系列解决方案,这些设备被用于各类应用,从低成本手持设备到智能手机、平板电脑、机顶盒以及企业网络设备等。早期的Cortex-A系列处理器(A5、A7、A8、A9、A12、A15和A17)基于ARMv7-A架构。每种内核都共享相同的功能集,例如NEON媒体处理引擎、Trustzone安全扩展、单精度和双精度浮点支持、以及对多种指令集(ARM、Thumb-2、Thumb、Jazelle和DSP)的支持。与此同时,这些处理器也具有极高的设计灵活性,能够提供所需的最佳性能和预期的功效。

围观 468

1、工业标准

ARM Cortex-M处理器是一个全球微处理器标准,已经授权给了超过40个ARM合作伙伴,包括领先的供应商如Freescale, NXP, STMicroelectronics, Texas Instruments,Toshiba, Atmel, Analog Devices, Silicon Labs, Spansion...通过使用一个标准的处理器,ARM合作伙伴可创造对软件开发者有一致架构的出众设备,适用于广泛的应用。

2、指令集

ARM Cortex-M使用高密度的Thumb2指令集,因为其最佳的16/32位指令混合。这样,应用程序很小,减少了需要的flash存储器,从而节省了功耗。Cortex-M的Thumb2指令集比8/16位设备每字节完成更多,因此每兆赫兹提供更多的性能。Cortex-M系列中高性能的Cortex-M3和M4处理器采用哈弗架构,3阶流水,并有乘法、除法和饱和计算的硬件指令。

3、软件设施

ARM Cortex-M用于嵌入式领域的复杂应用。Cortex-M产品系列的4GB存储器映射是固定的,以简化软件移植。内存保护单元MPU通过限制每个任务访问自己的存储器空间以增加系统可靠性。一个嵌套向量中断控制器NVIC处理响应中断所需的低层软件,从而消除了汇编进入和退出例程的需要。NVIC还可处理器各种级别的优先控制和优先级。Cortex-M处理器支持带特权和非特权访问的线程和处理模式。这是增加系统软件可靠性的另一个因素,只有运行在特定状态的授权软件才能访问系统资源。

4、智能电源管理

嵌入式应用一个主要考虑是功耗。能效比最好的系统是设计的软件利用了硬件节能特点的优势。Cortex-M处理器有用于智能电源管理的特定指令。Wait for Interrupt、Wait for Event和SleeponExit是设计有功耗意识软件的基础。这些指令用于创建有功耗意识的软件架构。不再需要使用让处理器清醒的轮询。事件和中断发生后,处理器被唤醒去响应,然后回到睡眠或深睡眠。这样大幅减少了平均功耗。

5、软件和硬件生态系统

ARM有支持Cortex-M系列处理器的非常广泛的第三方生态系统。产品线在设计上是跨处理器有一致性的可简化工具开发者的任务。供开发者选择的有26个实时操作系统,13个IDE包和21个调试器。

Real-Time Operating Systems (RTOS)

还有一个可交换信息的有丰富环境的互联社区,一个出售产品的嵌入式软件商店Embedded Software Store。

ARM Cortex-M处理器在设计上给开发者提供了最先进的软件设施,同时遵循了嵌入式应用能效比的需要。

围观 299

1、理解Thumb-2
  
首先,让我们从一个看起来并不明显的起点开始讨论节能技术—指令集。所有Cortex-M CPU都使用Thumb-2指令集,它融合了32位ARM指令集和16位Thumb指令集,并且为原始性能和整体代码大小提供了灵活的解决方案。在Cortex-M内核上一个典型的Thumb-2应用程序与完全采用ARM指令完成的相同功能应用程序相比,代码大小减小到25%之内,而执行效率达到90%(当针对运行时间进行优化后)。
  
Thumb-2中包含了许多功能强大的指令,能够有效减少基础运算所需的时钟周期数。减少时钟周期数意味着现在你能够以更少的CPU功耗完成手头的工作。例如,假设要完成一个16位乘法运算(如图1所示)。在一个8位8051内核的MCU上执行这个运算将需要48个时钟周期,并占用48字节的Flash存储空间。使用一个16位内核的MCU(例如C166)执行相同的运算需要8个时钟周期,并占用8字节的Flash存储空间。相比之下,在使用Thumb-2指令集的Cortex-M3内核中完成相同运算仅仅需要1个时钟周期,并占用2字节的Flash存储空间。Cortex-M3内核能够通过使用更少时钟周期完成相同任务,节省了能耗;同时也能够通过占用极少的Flash存储空间,减少Flash存储器访问次数,实现最终能耗节省的目标(除此之外,更小的应用代码也使得系统可以选择更小的Flash存储器,进一步降低整体系统功耗)。

2、中断控制器节能技术
  
Cortex-M架构中的中断控制器(Nested Vectored Interrupt Controller or NVIC)在降低CPU功耗方面也起着关键作用。以前的ARM7-TDMI需要“多达”42个时钟周期,Cortex-M3 NVIC从中断请求发生到执行中断处理代码仅需要12个时钟周期的转换时间,这显然提高了CPU执行效率,降低了CPU时间浪费。除了更快进入中断处理程序之外,NVIC也使得中断之间切换更加高效。
  
在ARM7-TDMI内核实现中,需要先花费数个时钟周期从中断处理程序返回主程序,然后再进入到下一个中断处理程序中,中断服务程序之间的“入栈和出栈(push-and-pop)”操作就要消耗多达42个时钟周期。而Cortex-M NVIC采用更有效的方法实现相同任务,被称为“末尾连锁(tail-chaining)”。这种方法使用仅需6个时钟周期处理就能得到允许,进入下一个中断服务程序的所需信息。采用末尾连锁,不需要进行完整的入栈和出栈循环,这使得管理中断过程所需的时钟周期数减少65%(如图2所示)。
  
3、存储器节能注意事项
  
存储器接口和存储器加速器能够明显影响CPU功耗。代码中的分支和跳转可能会对为CPU提供指令的流水线产生刷新影响,在这种情况下CPU需要延迟几个时钟周期以等待流水线重新完成填充。在Cortex-M3或Cortex-M4内核中,CPU配备了一条3级流水线。刷新整条流水线将导致CPU延迟3个时钟周期,如果有Flash存储器等待状态发生,时间会更长,以便完成重新填充过程。这些延迟完全浪费功耗,没有任何功用。为了帮助减少延迟,Cortex-M3和M4内核包括一个被称为推测取指(Speculative Fetch)的功能,即它在流水线中对分支进行取指的同时也取指可能的分支目标。如果可能的分支目标命中,那么推测取指能够把延迟降低到1个时钟周期。虽然这个特性是有用的,但显然不够,许多Cortex-M产品供应商都增加了自己的IP以增强这个能力。
  
4、M0+内核探究
  
对功耗敏感型应用来说每个nano-watt都很重要,Cortex-M0+内核是一个极好的选择。M0+基于Von-Neumann架构(而Cortex-M3和Cortex-M4内核是Harvard结构),这意味着它具有更少的门电路数量实现更低的整体功耗,并且仅仅损失极小的性能(Cortex-M0+的0.93DMIPS/MHz对比Cortex-M3/M4的1.25DMIPS/MHz)。它也使用Thumb-2指令集的更小子集(如图3所示)。几乎所有的指令都有16位的操作码(52x16位操作码和7x32位操作码;数据操作都是32位的),这使得它可以实现一些令人感兴趣的功能选项以降低CPU功耗。

节能性功能选项首要措施就是减少Flash存储访问次数。一个主要的16位指令集意味着你可以交替时钟周期访问Flash存储器(如图4所示),并且可以在每一次Flash存储访问中为流水线获取两条指令。假设你在存储器中有两条指令并对齐成一个32位字;在指令没有对齐的情况下,Cortex-M0+将禁止剩余的一半总线以节省每一点能耗。

此外,Cortex-M0+内核也可以通过减少到两级流水线而降低功耗。在通常的流水线处理器中,下一条指令在CPU执行当前指令时被取出。如果程序产生分支,并且不能使用下一条取出的指令,那么被用于取指(分支影子缓冲器)的功耗就被浪费了。在两级流水线中,这个分支影子缓冲器缩小了,因此能耗得以节省(虽然仅有少量),这也意味着在发生流水线刷新时,仅需要不到一个时钟周期就能重新填充流水线(如图5所示)。

5、利用GPIO端口节能
  
Cortex-M0+内核提供节能特性的另一个地方是它的高速GPIO端口。在Cortex-M3和Cortex-M4内核中,反转一位或GPIO端口的过程是“读-修改-写”一个32位寄存器。虽然Cortex-M0+也可以使用这个方法,但是它有一个专用的32位宽I/O端口,可以采用单时钟周期访问GPIO,使得它能够高效的反位/引脚反转。注意:在Cortex-M0+上,这是一个可选的特性,并不是所有供应商都具备了这个有用的GPIO特性。
  
6、CPU的休眠模式
  
减少CPU功耗的最有效方法之一是关闭CPU自身。在Cortex-M架构中有多种不同的休眠模式,每一种都在功耗和再次执行代码的启动时间之间进行了折中考虑(如图6所示)。它也能够让CPU在完成中断服务后自动进入某个休眠模式,而不需要执行任何代码去完成这个工作。这种方法可以为那些常见于超低功耗应用中的任务节省CPU时钟周期。
  
在深度睡眠模式下,也可以使用唤醒中断控制器(WIC)来减轻NVIC负担。在使用WIC时,为实现低功耗模式下外部中断唤醒CPU,无需为NVIC提供时钟。
  
7、自主型外设可减轻CPU负荷
  
自主型片上外设具有降低功耗的优点。大多数MCU供应商已经在本身产品架构中实现了外设之间的自主型交互。自主型外设能够实现十分复杂的外设动作链(触发而不是资料传输),同时保持CPU处于休眠状态。例如使用有的MCU上的PRS功能,应用能够被配置为在CPU休眠的低功耗模式下,当片上比较器检测电压值超过了其预设的门限值,则触发一个定时器去开始减数。当定时器到达0时,触发DAC去开始输出 — 所有事件发生过程中CPU可以一直保持休眠状态。
  
自动进行如此复杂的交互,这使得外设之间能够完成大量工作而无需CPU参与。此外,带有内建智能的外设(例如传感器接口或脉冲计数器)能够通过预设的条件用于中断唤醒CPU,例如在累积10个脉冲时中断唤醒CPU。在这个例子中,当CPU被特定中断唤醒时,它明确知道需要做什么,而不需要检查计数器或寄存器以判别发生了什么,因此可以节省相当多的时钟周期,更好的完成其他重要任务。
  
我们已经介绍了多种易于实现的减轻Cortex-M设备上CPU功耗的方法。当然,还有其他因素影响功耗,例如用于加工设备的处理工艺或者用于存储应用代码的存储器技术。工艺和存储技术能够显著影响运行时功耗和低功耗模式下的漏电,因此也应当纳入嵌入式开发人员的整体功耗设计考虑之中。

来源:网络(本文仅供学习参考使用,版权归原作者所有)

围观 377

页面

订阅 RSS - Cortex-M