Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

1. 概述

CPU的架构》一文中我们介绍了指令集架构的三大家族:x86 家族ARM 家族RISC-V

你知道ARM指令集还有Cortex-ACortex-RCortex-M三个不同的系列吗?你三个系列处理器核心之间区别和关系吗?本文将带你详细了解一下。

这三个系列分别针对不同的应用领域而设计,可以通俗地理解为:

  • Cortex-A: 负责“思考”和“交互”的大脑。追求高性能,运行复杂的操作系统。
  • Cortex-R: 负责“反应”和“控制”的脊髓。追求高实时性和可靠性,用于关键任务控制。
  • Cortex-M: 负责“感知”和“动作”的周围神经。追求极致的能效比和低成本,用于微型嵌入式控制。

注意: 你会发现一个有趣的事情是这三个系列字母(ARM)的组合,正好是ARM

下面我们从多个维度进行详细的对比。

2. 核心定位

系列 全称 核心定位 典型应用场景
Cortex-A Application 应用处理器。专注于高性能、高计算能力,以运行复杂的操作系统和丰富的用户应用程序为目标。 智能手机、平板电脑、智能电视、机顶盒、服务器、汽车信息娱乐系统、单板计算机(如树莓派)。
Cortex-R Real-time 实时处理器。专注于高实时性、高可靠性和容错能力,用于对响应时间有严格要求的关键任务。 汽车制动系统、动力总成、安全气囊、硬盘/固态硬盘(SSD)控制器、工业控制、网络设备基带处理。
Cortex-M Microcontroller 微控制器。专注于极低的功耗、极小的芯片面积和低成本,用于资源受限的嵌入式系统和物联网(IoT)设备。 智能手表、智能家居设备(传感器、灯泡)、无人机飞控、电机控制、物联网终端、玩具、键盘鼠标。

3. 架构与技术特性

特性 Cortex-A Cortex-R Cortex-M
架构 通常为 ARMv7-AARMv8-A / ARMv9-A(支持64位) 通常为 ARMv7-RARMv8-R 通常为 ARMv6-M, ARMv7-M, ARMv8-M
内存管理
(MMU/MPU)
完整的MMU(内存管理单元) 可选的MPU(内存保护单元) 通常只有MPU(甚至在低端型号上没有)
中断处理 使用GIC(通用中断控制器),中断响应延迟较高 优化后的中断控制器,中断延迟极低且可预测 集成NVIC(嵌套向量中断控制器),中断延迟极低,入门级
流水线 长且复杂(多发射、乱序执行、超标量)以提升性能 中等长度,深度优化以实现确定性(指令执行时间可预测) 非常短(3级流水线很常见),简单,追求能效和确定性
操作系统支持 Linux, Android, Windows 等丰富操作系统 RTOS(如FreeRTOS, VxWorks),确定性是关键 RTOS(如FreeRTOS, Zephyr, μC/OS),甚至直接裸机编程
开发模式 类似于PC/服务器开发,应用运行在操作系统之上 通常是基于RTOS的固件开发,强调时序和可靠性 绝大部分是裸机(Bare-metal)或轻量级RTOS
性能 极高 (但侧重于实时性能,而非绝对峰值算力) 低到中(但能效比极高)
功耗 极低(许多型号支持休眠模式,功耗低至微安级)
成本与面积 高(核心复杂,通常需要外挂DRAM) 极低(核心简单,常与Flash、SRAM集成为单芯片MCU)

4. 关键区别

4.1. 内存管理

4.1.1. MMU(内存管理单元)

MMU(Memory Management Unit)是内存管理单元,其核心功能是虚拟内存,能将虚拟地址映射到物理地址。这是运行像Linux这样具有进程隔离、动态加载等特性的完整操作系统必要条件

除了虚拟内存内,MMU还具有以下特点:

  • 地址转换: 应用程序看到的地址(虚拟地址)和实际硬件使用的地址(物理地址)是不同的。MMU 负责即时地将虚拟地址翻译成物理地址。这就像你只知道一个公司的部门名称(虚拟地址),而前台管家(MMU)负责帮你找到这个部门在大楼里的具体房间号(物理地址)。
  • 内存保护: 它可以为每个内存页设置权限(如可读、可写、可执行)。如果一个用户程序试图写入操作系统的代码区域(只读),MMU会触发一个异常(段错误),阻止非法访问。
  • 进程隔离: 每个进程都有自己独立的虚拟地址空间。进程A和进程B可以使用相同的虚拟地址,但它们会被MMU映射到不同的物理地址上,从而完全隔离,互不干扰。这是现代多任务操作系统稳定性的基石。
  • 按需分页: 允许操作系统使用硬盘作为虚拟内存(交换空间),当物理内存不足时,将不常用的内存页换出到硬盘,需要时再换入。

4.1.2. MPU(内存保护单元)

MPU(Memory Protection Unit)是内存保护单元,只能设置内存区域的访问权限(如只读、禁止执行)。它更简单,开销更小,主要用于保护关键代码和数据(例如,防止一个任务意外覆盖另一个任务的数据),从而增强系统的可靠性和安全性。它无法实现虚拟内存,因此不能运行Linux。

4.1.3. 两者的关系

  • MMU 是 MPU 的超集。MMU 提供了 MPU 的所有功能(内存保护),并增加了虚拟内存管理这个至关重要的高级功能。
  • 关系:你可以把 MPU 看作是一个功能阉割版的、轻量级的 MMU。它只负责“保安”的工作(保护区域),而 MMU 既当“保安”又当“高级管家”(管理虚拟地址映射)。

4.2. 实时性(Real-Time)

  • Cortex-RCortex-M 都强调实时性,但侧重点不同。
  • Cortex-R 的“实时”是硬实时(Hard Real-Time),意味着必须在严格确定的时间 deadline 内完成响应,否则会导致灾难性后果(如刹车失灵)。它的所有设计,从流水线到内存访问,都为此优化。
  • Cortex-M 的实时性通常是软实时(Soft Real-Time) 或对硬实时要求不那么极端的场景。它也能快速响应中断,但其设计首要目标是低功耗和低成本

4.3. 生态系统与开发

  • Cortex-A:支持Linux, Android, Windows等复杂的操作系统。开发环境复杂(交叉编译、内核移植、驱动开发),更偏传统的应用软件开发。
  • Cortex-M/R:同城只支持RTOS等实时操作系统。开发环境相对简单,常用IDE(如Keil MDK, IAR Embedded Workbench, STM32CubeIDE)进行固件开发,更贴近硬件。

5. 如何查看芯片的核心类型?

有以下方法可以查看设备所使用的ARM核心类型(Cortex-A/Cortex-R/Cortex-M)。

5.1. 软件查询(最简单、最常用)

5.1.1. Cortex-A设备

Cortex-A设备同城会运行Linux或Android系统,可通过以下方法来查询。

1. 使用 lscpu 命令

在终端中输入这个命令,输出信息非常详尽。

1
2
3
4
5
6
7
8
9
10
11
$ lscpu
Architecture: aarch64 # 这表示是ARMv8-A 64位架构
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 2
Vendor ID: ARM
Model name: Cortex-A72 # 这里直接给出了核心型号!
Model: 3
...

2. 读取 /proc/cpuinfo 文件

在终端中输入 cat /proc/cpuinfo

1
2
3
4
5
6
7
8
9
10
11
$ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 4 (v7l) # 架构和版本
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7** # ‘7’ 代表 ARMv7
**CPU variant : 0x0
CPU part : 0xc07 # 这个代码是关键!
CPU revision : 4
...

3. 如何解读 CPU part

你需要将 CPU part 的十六进制代码(如 0xc07)与ARM官方列表对照。

Part Num (Hex) CPU 内核名称 ARM 架构版本 典型特性与应用备注
0x920 ARM920T ARMv4T 带MMU,用于早期智能手机、嵌入式设备
0x922 ARM922T ARMv4T ARM920T的变种,缓存大小不同
0x926 ARM926EJ-S ARMv5TE 带Jazelle、MMU,广泛应用于功能手机、微控制器
0x940 ARM940T ARMv4T 带MPU,用于实时嵌入式应用
0x946 ARM946E-S ARMv5TE 带MPU、可配置TCM,用于游戏机、嵌入式控制
0x966 ARM966E-S ARMv5TE 无缓存,带TCM,用于深度嵌入式应用
0xb02 ARM11 MPCore ARMv6K 支持1-4核SMP,用于智能手机、应用处理器
0xb36 ARM1136J(F)-S ARMv6 带SIMD、Jazelle,用于移动设备
0xb56 ARM1156T2(F)-S ARMv6T2 带Thumb-2、MPU,用于实时嵌入式应用
0xb76 ARM1176JZ(F)-S ARMv6KZ 带TrustZone技术,用于安全应用处理器
0xc05 Cortex-A5 ARMv7-A 高效能应用处理器,支持多核
0xc07 Cortex-A7 ARMv7-A 高能效应用处理器,常用于大小核架构中的小核
0xc08 Cortex-A8 ARMv7-A 高性能单核应用处理器
0xc09 Cortex-A9 ARMv7-A 高性能支持多核的应用处理器
0xc0c Cortex-A12 ARMv7-A 中高端应用处理器
0xc0f Cortex-A15 ARMv7-A 高性能应用处理器,常用于大小核架构中的大核
0xc14 Cortex-R4 ARMv7-R 高性能实时处理器
0xc15 Cortex-R5 ARMv7-R 实时处理器,支持双核锁步
0xc17 Cortex-R7 ARMv7-R 高性能实时处理器
0xc20 Cortex-M0 ARMv6-M 超低功耗微控制器
0xc21 Cortex-M1 ARMv6-M 专为FPGA设计的微控制器
0xc23 Cortex-M3 ARMv7-M 高性能微控制器
0xc24 Cortex-M4 ARMv7E-M 带DSP指令的微控制器
0xc27 Cortex-M7 ARMv7E-M 高性能带DSP和FPU的微控制器
0xc60 Cortex-M0+ ARMv6-M 极致能效微控制器
0xd01 Cortex-A32 ARMv8-A 32位-only, 高效能应用处理器 (AArch32)
0xd03 Cortex-A53 ARMv8-A 高能效64位应用处理器,常见于大小核中的小核
0xd04 Cortex-A35 ARMv8-A 极高能效64位应用处理器
0xd05 Cortex-A55 ARMv8.2-A 高能效AI增强型应用处理器 (常见于中端手机)
0xd07 Cortex-A57 ARMv8-A 高性能64位应用处理器,常见于大小核中的大核
0xd08 Cortex-A72 ARMv8-A 高性能64位应用处理器
0xd09 Cortex-A73 ARMv8-A 高性能高能效64位应用处理器
0xd0a Cortex-A75 ARMv8.2-A 高性能64位应用处理器
0xd0b Cortex-A76 ARMv8.2-A 高性能64位应用处理器
0xd0c Cortex-A77 ARMv8.2-A 高性能64位应用处理器
0xd0d Cortex-A78 ARMv8.2-A 高性能高能效64位应用处理器
0xd0e Cortex-A710 ARMv9-A 高性能64位应用处理器 (ARMv9)
0xd41 Cortex-A78AE ARMv8.2-A 适用于汽车电子的Cortex-A78版本
0xd44 Cortex-X1 ARMv8.2-A 极致性能64位应用处理器
0xd4a Cortex-A510 ARMv9-A 高能效小核 (ARMv9)
0xd4b Cortex-A715 ARMv9-A 高性能高能效大核 (ARMv9)
0xd4c Cortex-X2 ARMv9-A 极致性能核 (ARMv9)
0xd4d Cortex-A720 ARMv9-A (2023年发布的高效大核)
0xd4e Cortex-X3 ARMv9-A (2023年发布的极致性能核)
… (持续更新)

5.1.2. Cortex-R设备

这类处理器通常深嵌入在专用设备中(如硬盘主控、汽车ABS系统),不向用户开放访问接口。普通用户几乎无法直接查询,只能通过:

  • 查阅该设备的技术白皮书芯片规格书
  • 询问设备制造商。

5.1.3. Cortex-M设备

Cortex-M设备(微控制器)通常没有通用的操作系统,所以无法运行 lscpu。方法如下:

  • 查看芯片型号: 这是最直接的方法。MCU芯片上会印有型号,例如 STM32F407VGT6
    • “ST”代表意法半导体(STMicroelectronics)。
    • “M32”代表ARM Cortex-M内核。
    • “F4”代表产品系列。F4系列通常使用Cortex-M4内核
  • 查阅芯片数据手册(Datasheet): 这是最权威的方法。去芯片制造商(如ST, NXP, Microchip, TI)的官网找到该型号的官方数据手册(Datasheet)。在首页或内核介绍章节一定会明确写明是 Cortex-M0, M3, M4, M7 等。
  • 通过IDE识别: 当你使用Keil、IAR等IDE为芯片开发程序时,在选择设备型号时,IDE会明确列出该芯片的内核。

6. 与ARM指令集的版本对应关系

6.1. 版本对应关系

这是一个大致的对应关系表,可以帮助你理解它们的演进。需要注意的是,一个架构版本(如ARMv7)可以衍生出适用于不同场景的Profile(A, R, M)。

ARM 架构版本 (ISA) 发布重点 Cortex-A 应用处理器 Cortex-R 实时处理器 Cortex-M 微控制器 关键特性
ARMv4 / v5 早期经典 ARM9, ARM11 - - 首次推出Thumb指令集
ARMv6 优化与扩展 - - Cortex-M0 / M0+ / M1 引入Thumb-2,能效比极高
ARMv7 Profile 分类 Cortex-A5, A7, A8, A9, A15, A17 Cortex-R4, R5, R7 Cortex-M3, M4, M7 NEON SIMD (A系列), Thumb-2, 硬件除法
ARMv8 64位革命 Cortex-A53, A57, A72, A73, A75, A76, A77, A78, X1 Cortex-R52, R82 Cortex-M23, M33, M55, M85 A64/ARM64指令集,TrustZone安全扩展
ARMv9 安全与AI Cortex-A710, A715, A510, X2, X3, X4 - (未来M系列会跟进) SVE2矢量扩展,机密计算领域

6.2. 如何理解这张表

  1. Profile(应用领域细分):从ARMv7开始,架构明确分为三个Profile:

    • **A-profile (Application)**:用于高性能应用处理器。我们手机里的CPU基本都是ARMv7-A或ARMv8-A/ARMv9-A。
    • **R-profile (Real-time)**:用于高实时性处理器。
    • **M-profile (Microcontroller)**:用于深度嵌入式的微控制器。
  2. 向后兼容:ARM架构是向后兼容的。例如,一个支持ARMv8-A的处理器(如Cortex-A53)可以运行为ARMv7-A编译的32位程序。

  3. 举例说明

    • 你的 lscpu 命令显示 **Model name: Cortex-A72**,那么它使用的指令集架构就是 ARMv8-A
    • 你的芯片型号是 STM32F103,查阅数据手册知道它是 Cortex-M3 内核,那么它使用的指令集架构就是 ARMv7-M
    • 你的芯片型号是 RP2040(树莓派Pico),它的内核是 **Cortex-M0+**,那么它使用的指令集架构就是 ARMv6-M

评论