硬件基础概念

ARM 最小系统,是让 ARM 芯片能够运行起来必不可少的最基础硬件电路,分为芯片基础支撑电路存储、外设接口两大部分。

RAM:随机存取存储器

分为 SRAM:静态 RAMDRAM:动态 RAM 两大分支

1. SRAM 静态随机存储器

  • 原理:触发器电路保存数据,不需要刷新
  • 特点:速度极快、电路复杂、成本高、容量小
  • 应用:CPU Cache 缓存、MCU 片内 RAM、寄存器堆
  • 嵌入式:STM32 片上 RAM 就是 SRAM

2. DRAM 动态随机存储器

  • 原理:靠电容存电荷保存数据,必须周期性刷新,否则数据丢失 ,单元结构简单,容量容易做大
    1. SDRAM:同步 DRAM,跟随系统时钟
    2. DDR SDRAM(DDR1‑DDR5):双倍速率 DRAM,PC/ARM 开发板外接内存
  • 特点:容量大、成本低,速度比 SRAM 慢
  • 应用:电脑内存条,ARM 开发板外接内存颗粒

ROM:只读存储器,非易失

  1. PROM(一次可编程 ROM) 用户只能烧录1 次,烧完不能擦除修改。

  2. EPROM(紫外线可擦除 ROM) 紫外线照射芯片窗口擦除全部数据,需要专用烧写器,不方便,淘汰。

  3. EEPROM(电可擦除 ROM) 按字节擦写,电信号擦除,不需要紫外线;适合存少量配置参数;擦写次数高,容量一般很小。

  4. Flash(闪存,EEPROM 进化版,按块擦除) 分为 NOR FlashNAND FlashIEEE Techn...

  • NOR Flash:支持字节随机读,可以 XIP(就地执行,直接跑代码);读快、写擦慢;用于存放固件程序,STM32 片内 Flash 就是 NOR 类型。
  • NAND Flash :按块读写,不能直接运行代码;容量大、成本低;用于大容量存储:U 盘、SD 卡、SSD、eMMC。

1. ALU 算术逻辑运算单元

内核运算核心,负责算术运算(加减)、逻辑运算(与或非移位),所有计算指令都在这里完成。

2. 通用寄存器 R0~R12

R0‑R12:通用数据寄存器,用于临时存放运算数据、函数参数、中间变量。

不同工作模式下,部分寄存器会发生 ** 寄存器影子(banked)** 切换。

3. 程序状态寄存器 CPSR / SPSR

  • CPSR 当前程序状态寄存器:一直有效。记录 CPU 当前状态:运行模式、中断开关、条件标志位 (N/Z/C/V)。即为计算的进位、借位、结果为0、大小端控制位、工作模式控制位。
  • SPSR 备份程序状态寄存器 :异常模式专用。发生中断 / 异常时,保存 CPSR 的值;异常返回时,恢复回 CPSR。用户模式下没有 SPSR

4. 特殊功能寄存器 PC、LR、SP

  1. PC (R15) 程序计数器 :存下一条要取指的指令地址 ,ARM 流水线下 PC = 当前指令地址 + 8。改写 PC 就实现跳转。复位值为0,默认做自加运算。
  2. LR (R14) 链接寄存器:保存返回地址。函数调用、进入异常时保存返回地址;函数返回把 LR 复制回 PC。
  3. SP (R13) 堆栈指针 :指向栈顶地址。压栈出栈操作都依靠 SP,每种异常模式有自己独立的 SP。ARM32 标准 C 语言程序默认:FD 满递减栈(Full Descending),栈从高地址向低地址生长。
  4. R13=SP,R14=LR,R15=PC

5. MMU 内存管理单元

带 MMU 代表可以跑 Linux 操作系统

  • 完成虚拟地址 ↔ 物理地址地址转换;
  • 内存访问权限检查、内存保护;
  • 开启虚拟内存后,配合 Cache 工作。
  • 不带 MMU 的 MCU(STM32)不能运行标准 Linux,只能跑裸机 / FreeRTOS。

6. I‑Cache、D‑Cache 高速缓存

  • I‑Cache 指令 Cache:缓存指令,把常用指令放到高速缓存,减少访问外部 Flash 内存的开销。
  • D‑Cache 数据 Cache:缓存数据,读写变量数据。
  • Cache 速度远快于外部 DDR 内存,解决 CPU 和内存之间速度差距。

1. AHB 高级高性能总线(Advanced High‑performance Bus)

高速总线,带宽高,支持流水线、突发传输

  • 挂载设备:CPU、存储控制器、LCD 控制器
  • 特点:
    1. 速度快,适合大数据吞吐;
    2. 支持突发传输、多主机;
    3. 用于访问存储器、LCD 这类高速设备。

2. APB 高级外设总线(Advanced Peripheral Bus)

低速外设总线,低功耗、接口简单,无流水线

  • 挂载外设:IIC 控制器、GPIO 控制器、定时器控制器、UART 控制器
  • 特点:
    1. 速度慢,功耗低;
    2. 接口简单,适合低速寄存器操作;
    3. 不能直接接 CPU,必须经过AHB‑APB 桥,把 AHB 的高速信号转换为 APB 低速信号。
  • 🔔桥的作用:AHB 和 APB 之间协议转换、速度匹配。CPU 访问 APB 外设时,先访问 AHB 总线,经过桥再转发到 APB 外设。

ARM的7种工作模式:

模式 缩写 说明 进入场景
用户模式 User 普通应用程序运行模式,权限最低 用户程序,正常执行应用代码
高优先级中断模式 FIQ 高优先级中断,优先处理 FIQ 中断触发
低优先级中断模式 IRQ 低优先级中断,最常用 IRQ 中断触发
管理模式 SVC 操作系统内核模式,特权模式 上电复位、软件中断 SWI(系统调用)
中止模式 ABT 内存访问异常 取址中止、数据访问中止(访问非法地址)
未定义指令模式 UND 指令异常 遇到不识别的、未定义的指令
系统模式 SYS 特权模式,和 usr 共用寄存器,无 SPSR 操作系统,特权任务,和用户模式寄存器完全一样

Cortex‑A 在 7 种基础之上,新增Monitor (MON) 监视模式

  • 对应 TrustZone 安全扩展(安全世界 / 普通世界切换)
  • 作用:安全世界 (Secure World) ↔ 普通世界 (Normal World) 之间切换的唯一过渡模式
  • 场景:手机安全加密、可信执行环境 TEE,安全固件运行。
  • 特点:属于特权模式,拥有独立 SP、LR、SPSR;只能通过安全监控调用 SMC 指令进入。

特权模式(除 usr 以外全部 6 种)

  • usr 用户模式:非特权,不能直接修改 CPSR;
  • 其余 6 种都是特权模式,可以读写 CPSR,访问全部寄存器。

寄存器影子(banked)

  • usr、sys 模式:共用一套 R0‑R14;
  • 其他 5 种异常模式,拥有自己独立的 R13(SP)R14(LR)SPSR
  • 中断发生时,自动切换模式,自动使用该模式的 SP/LR,不需要手动保存栈指针。

SPSR 只有异常模式才有,用户模式没有 SPSR

异常发生时,硬件自动把当前 CPSR 保存到 SPSR;异常返回时,SPSR 恢复到 CPSR。

系统模式 sys:没有 SPSR,属于特权模式,寄存器和 usr 完全一样,用于 OS 的特权任务。

CPSR当前程序状态寄存器

名称 含义
31 N Negative 运算结果为负数,N=1;否则 0
30 Z Zero 运算结果等于 0,Z=1;否则 0
29 C Carry 进位 / 借位;加法有进位、减法无借位置 1
28 V Overflow 有符号数运算发生溢出,V=1

M 4:0 模式位(4‑0 位,低 5 位)

M4:0 模式 缩写
10000 User 用户模式 usr
10001 FIQ 快速中断 fiq
10010 IRQ 外部中断 irq
10011 SVC 管理模式 svc
10110 Monitor 监视模式 mon(Cortex‑A TrustZone)
10111 Abort 中止模式 abt
11010 Hyp 超级监视模式 hyp(虚拟化)
11011 Undefined 未定义指令 und
11111 System 系统模式 sys

ARM 异常处理(ARMv7‑A)

异常发生时硬件自动做的操作

当异常触发,CPU 硬件自动完成以下步骤:

  1. 拷贝 CPSR → SPSR_<mode> 把当前程序状态寄存器保存到对应异常模式的 SPSR 备份寄存器。用户模式没有 SPSR。

  2. 修改 CPSR 寄存器:

    • 强制切换到ARM 状态(禁止 Thumb);
    • 修改 M 4:0,切换进入对应的异常模式;
    • 自动屏蔽对应中断(IRQ/FIQ)。
  3. 保存返回地址到 LR_<mode> LR(R14)保存异常返回地址,不同异常 LR 会有偏移

  4. PC 跳转到异常向量表对应地址 PC = 异常向量地址,开始执行异常处理函数。

  5. 异常处理函数执行完,需要返回,完成:

  • SPSR_<mode> 恢复 CPSR
  • LR_<mode> 恢复 PC

需要注意的是,在异常服务函数调用时,会首先将R0-R12寄存器的值入栈SP保护现场,完成异常服务函数后,进行出栈操作,恢复异常前的状态。

异常向量表

偏移量 异常类型
0x00 Reset 复位
0x04 Undefined Instruction 未定义指令
0x08 Software Interrupt (SWI) 软件中断
0x0C Prefetch Abort 取指中止
0x10 Data Abort 数据访问中止
0x14 Reserved 保留
0x18 IRQ 外部中断
0x1C FIQ 快速中断
  • IRQ/FIQ:LR = 中断点指令地址,返回用 SUBS PC,LR,#4
  • SVC / Undefined:LR 已经指向正确返回点,返回用 MOVS PC,LR
  • Data Abort:LR = 出错指令 + 8,返回 SUBS PC,LR,#8
  • Prefetch Abort:LR = 出错指令 + 4,返回 SUBS PC,LR,#4
异常类型 异常发生阶段 LR 保存的值 返回指令
IRQ/FIQ/undef/SWI/Prefetch Abort 取指阶段 PC‑4 MOVS PC,LR
Data Abort 数据中止 执行阶段访问内存出错 PC‑8 SUB PC,LR,#8
相关推荐
Mr_YDK5 小时前
鲲鹏平台开发全链路实战系列 | 博客一:从x86到鲲鹏ARM——DevKit代码迁移工具完全实战
arm开发·信创改造·鲲鹏arm迁移
蓝天下的守望者7 小时前
ARM SOC architecture学习文档整理
arm开发·学习
qq_402995758 小时前
Secure Boot Part 2 —— 安全启动流程
arm开发·mcu·安全
外域速览1 天前
GPT-6 Astra 开放、标普罕见拉响 AI 基建信用警报、三星 Arm 联手 2nm 端侧芯片:算力下半场的三条主线
arm开发·人工智能·gpt
女神下凡2 天前
RISC‑V 对比 ARM,实际项目到底怎么选?
arm开发
珞光电子USRP SDR软件无线电平台4 天前
国产嵌入式SDR平台LW-E320-G详解:射频、FPGA、ARM架构与应用选型
arm开发·fpga开发·架构
Jason_zhao_MR4 天前
Linux与采集MCU通信为什么我们用了双SPI
linux·arm开发·单片机·嵌入式硬件·嵌入式
ARM|X86+FPGA工业主板厂家5 天前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人
一池秋_6 天前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发