1. ARM架构概述:从8位机到万亿级生态
大家好,我是你们的嵌入式系统讲师。今天咱们聊聊ARM架构。说实话,我接触ARM已经有十几年了,从最早的ARM7TDMI到现在的Cortex-X系列,看着这个架构一步步统治了移动端、嵌入式,甚至杀进了服务器和AI领域。嗯,这确实是个值得好好梳理的话题。
1.1 ARM发展史:一家不造芯片的芯片公司
ARM的故事很有意思。1985年,英国Acorn公司想做一款比Intel 80286更强的处理器,结果搞出了ARM1。你想想看,那时候Intel如日中天,谁会想到一个英国小公司的RISC架构能走到今天?
我个人觉得,ARM最聪明的决定是1990年独立出来,成立了ARM公司。而且它不自己造芯片,只卖IP授权。这招太狠了——让全世界都帮你卖芯片,你只管收版税。我在项目中用过至少七八家不同厂商的ARM芯片,从ST、NXP到TI、瑞萨,内核都是ARM的,但外设各有千秋。
关键节点我列一下:
- 1985年:ARM1诞生,26位地址总线,简单得像个玩具
- 1993年:ARM7系列发布,这代产品生命力极强,我十年前还在工业设备上见过它
- 2002年:ARM11系列,首次支持ARMv6架构,多媒体能力大幅提升
- 2005年:Cortex系列横空出世,分成了A、R、M三条线
- 2011年:ARMv8架构发布,64位时代开启
- 2021年:ARMv9架构发布,安全性和AI能力全面升级
1.2 Cortex系列分类:A、R、M各司其职
Cortex系列分三条线,说白了就是三个不同的战场:
| 系列 | 定位 | 典型应用 | 我常用的型号 |
|---|---|---|---|
| Cortex-A | 应用处理器 | 手机、平板、服务器 | A72、A76、A55 |
| Cortex-R | 实时处理器 | 汽车、工业控制 | R5、R52 |
| Cortex-M | 微控制器 | IoT、传感器、电机控制 | M4、M7、M33 |
Cortex-A系列:这是性能担当。我做过一个智能摄像头项目,用的就是Cortex-A72,跑Linux系统,处理1080p视频流毫无压力。A系列支持MMU,可以跑完整的操作系统。
Cortex-R系列:这个系列比较特殊。它没有MMU,但中断响应极快。我在汽车电子项目中用过R5F,那个实时性真不是盖的——中断延迟能控制在几个时钟周期内。如果你做刹车系统、安全气囊这类东西,R系列是首选。
Cortex-M系列:这是嵌入式工程师最熟悉的。M系列功耗低、成本低、开发简单。我最早接触的是M3,后来用M4做数字信号处理,再后来M7的性能已经接近低端A系列了。M33加入了TrustZone安全扩展,IoT设备用起来很安心。
1.3 ARMv7/v8/v9架构差异:从32位到64位再到安全增强
这三个架构版本,我按时间顺序说说我的理解。
ARMv7架构:这是32位的巅峰。Cortex-A8、A9、A15都是基于ARMv7的。我记得2012年做平板电脑时,用的就是A9双核,跑Android 4.0。ARMv7支持Thumb-2指令集,代码密度比纯ARM指令高30%左右。但有个硬伤——内存寻址只有4GB,现在看确实不够用了。
ARMv8架构:这是革命性的升级。2011年发布,引入了AArch64执行状态,也就是64位模式。你想想看,从32位跳到64位,寄存器从16个通用寄存器扩展到31个,地址空间从4GB变成16EB。我在2016年做服务器项目时,用的就是Cortex-A72(ARMv8),跑数据库查询,性能比上一代提升了将近一倍。
ARMv8还有个好处——兼容32位。AArch32模式可以跑老的ARMv7代码。我有个老项目,代码是ARMv7写的,直接在新芯片上编译就能跑,省了不少移植功夫。
ARMv9架构:2021年发布,重点在安全、AI和向量计算。ARMv9引入了几个关键特性:
- CCA(机密计算架构):硬件级别的隔离,防止恶意软件偷数据
- SVE2(可伸缩向量扩展第二代):AI和多媒体处理加速
- MTE(内存标记扩展):检测内存越界访问,减少安全漏洞
我还没在项目里正式用ARMv9,但看过一些评测。说实话,MTE这个功能对嵌入式安全太重要了。以前做IoT设备,最怕的就是缓冲区溢出攻击。有了MTE,每个指针都带标签,越界了硬件直接报错,省心不少。
1.4 SoC基本组成:一颗芯片就是一个系统
SoC,说白了就是把CPU、内存、外设全部集成到一颗芯片上。我刚开始做嵌入式时,用的还是CPU+北桥+南桥的分离方案,现在想想真是又大又费电。
一个典型的ARM SoC包含以下部分:
- 处理器核心:一个或多个Cortex-A/R/M,负责运算
- 内存控制器:管理DDR、SRAM等,我踩过DDR时序的坑,后面会细说
- 总线互联:AMBA/AXI/AHB/APB,连接各个模块
- 外设接口:UART、I2C、SPI、USB、Ethernet
- 存储控制器:eMMC、NAND Flash、SD卡
- 安全模块:TrustZone、加密引擎、OTP
- 电源管理:PMU、DVFS、时钟门控
举个例子,我做过一个基于Cortex-A55的智能家居网关SoC:
// 简化的SoC内存映射示例
#define UART0_BASE 0x1C090000
#define GPIO_BASE 0x1C100000
#define I2C0_BASE 0x1C200000
#define SPI0_BASE 0x1C300000
#define TIMER0_BASE 0x1C400000
#define DMA0_BASE 0x1C500000
// 初始化UART
void uart_init(void) {
volatile uint32_t *reg = (uint32_t *)UART0_BASE;
reg[0] = 0x00000001; // 使能UART
reg[1] = 0x00000080; // 设置波特率
}
你看,每个外设都有固定的基地址,通过总线访问。这里要注意,不同SoC的地址映射可能完全不同。我换芯片时,第一件事就是看数据手册的memory map。
嗯,ARM架构的内容今天就聊到这儿。下一章咱们深入AMBA总线协议,看看这些模块之间是怎么通信的。有问题随时问我。