ARM 嵌入式系统与内核架构详解
一、计算机系统基本组成
1.1 计算机硬件系统基本组成
CPU(中央处理器):控制单元 + 运算单元 + 寄存器
存储器系统:
内存(主存):RAM、ROM
外存:硬盘、闪存等
输入/输出设备
总线系统
1.2 嵌入式系统定义
以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。
设计考虑因素:功能、体积、环境、稳定性、可靠性、成本、功耗
1.3 处理器分类
| 类型 | 全称 | 特点 | 应用场景 |
|---|---|---|---|
| CPU | Central Processing Unit | 通用处理器核心 | 通用计算 |
| GPU | Graphics Processing Unit | 图形处理单元 | 图形渲染、并行计算 |
| FPU | Float Processing Unit | 浮点处理单元 | 高强度数学运算 |
| MCU | Micro Control Unit | 微控制器 | 单片机,片上集成外设 |
| DSP | Digital Signal Processing | 数字信号处理器 | 数字信号处理 |
| MPU | Micro Processing Unit | 微处理器 | 通用型,性能较强 |
| SoC | System on Chip | 片上系统 | 集成多种处理器和功能模块 |
二、存储器详解![]()
2.1 RAM(随机访问存储器)分类
SRAM(静态RAM)
存储原理:使用晶体管存储0、1(6个晶体管构成1个存储单元)
特点:
速度快(访问时间:10-30ns)
成本高(面积大,制造复杂)
存储密度低
不需要刷新电路
功耗相对较低(静态功耗)
应用:Cache(高速缓存)、片上RAM
DRAM(动态RAM)
存储原理:用电容充放电存储0、1(1个晶体管+1个电容)
特点:
需要定期刷新(防止电容漏电导致数据丢失)
存储密度高
成本低
速度较SRAM慢(访问时间:50-70ns)
需要外部刷新电路
刷新机制:每隔64ms刷新所有行
SDRAM(同步DRAM)
改进:增加同步时钟,与系统时钟同步
特点:
支持突发传输
更高的数据传输率
需要时钟信号
工作模式:单倍数据率
DDR SDRAM(双倍数据率SDRAM)
核心原理:在时钟上升沿和下降沿都传输数据
发展历程:
DDR1:2倍预取,电压2.5V
DDR2:4倍预取,电压1.8V
DDR3:8倍预取,电压1.5V
DDR4:8倍预取,电压1.2V
DDR5:16倍预取,电压1.1V
特点:带宽倍增,功耗降低
iRAM(内部RAM)
本质:SoC内部的SRAM
特点:
访问速度最快(与CPU同频率)
功耗最低
容量有限(通常几KB到几MB)
不需要外部总线访问
用途:关键代码段、实时数据、栈空间
2.2 ROM(只读存储器)分类
传统ROM
MASK ROM:掩模ROM,工厂编程,不可更改
PROM:可编程ROM,一次编程
EPROM:可擦除PROM,紫外线擦除
EEPROM:电可擦除PROM,按字节擦写
Flash Memory
NOR Flash:
支持XIP(eXecute In Place)
随机访问速度快
容量较小(通常≤256MB)
价格较高
用于存储引导代码、关键程序
NAND Flash:
按页/块访问
容量大(GB到TB级别)
价格低
需要坏块管理
用于大容量存储
eMMC(嵌入式多媒体卡):
本质:NAND Flash + 控制器 + 标准接口
特点:简化设计,提高可靠性
与SD卡区别:直接焊接在板上,更稳定
三、ARM内核架构详解
3.1 指令集架构
| 类型 | 全称 | 特点 | 代表架构 |
|---|---|---|---|
| CISC | Complex Instruction Set Computer | 指令复杂,长度可变,微码控制 | x86 |
| RISC | Reduced Instruction Set Computer | 指令精简,长度固定,硬件直接译码 | ARM, MIPS, RISC-V |
ARM特点:Load/Store架构,大多数指令只能操作寄存器
3.2 ARM架构演进
ARMv1-v3:早期版本
ARMv4:引入Thumb指令集(16位)
ARMv5:增强DSP指令
ARMv6:引入SIMD,改进多媒体
ARMv7:支持Thumb-2,引入NEON
ARMv8:引入64位架构(AArch64)
ARMv9:安全性增强,AI加速
3.3 Cortex系列
| 系列 | 应用领域 | 特点 | 典型型号 |
|---|---|---|---|
| Cortex-A | 应用处理器 | 高性能,支持MMU,运行Linux/Android | A53, A72, A76 |
| Cortex-R | 实时系统 | 高可靠性,实时响应,错误检测纠正 | R4, R5, R52 |
| Cortex-M | 微控制器 | 低功耗,低成本,中断响应快 | M0, M3, M4, M7 |
3.4 ARM内核组成器件(以Cortex-A系列为例)
1. 处理器核心(Core)
取指单元:从内存获取指令
译码单元:将指令解码为微操作
执行单元:
ALU(算术逻辑单元)
FPU(浮点单元)
NEON(SIMD单元)
流水线:多级流水线提高效率
2. 寄存器组
通用寄存器(R0-R15):
R0-R12:通用目的
R13(SP):栈指针
R14(LR):链接寄存器(保存返回地址)
R15(PC):程序计数器
程序状态寄存器:
CPSR(Current Program Status Register)
SPSR(Saved Program Status Register,异常模式时保存CPSR)
3. 存储系统
Cache:
L1 Cache:分离的指令Cache和数据Cache
L2 Cache:统一的指令/数据Cache
缓存一致性协议:MOESI/MESI
TLB(Translation Lookaside Buffer):加速虚拟地址转换
MMU(Memory Management Unit):内存管理,虚拟地址到物理地址转换
4. 中断控制器
GIC(Generic Interrupt Controller):
支持多核中断分发
优先级管理
中断屏蔽
5. 调试系统
JTAG/SWD接口
ETM(Embedded Trace Macrocell):指令跟踪
DWT(Data Watchpoint and Trace):数据观察点
ITM(Instrumentation Trace Macrocell):软件跟踪
6. 总线接口
AMBA(Advanced Microcontroller Bus Architecture):
AXI(Advanced eXtensible Interface):高性能
AHB(Advanced High-performance Bus):中等性能
APB(Advanced Peripheral Bus):低功耗外设
7. 电源管理
时钟门控:关闭不使用的模块时钟
电源门控:关闭不使用的模块电源
动态电压频率调整(DVFS)
3.5 ARM工作模式(7种)
特权模式
系统模式(System, sys)
特权级:特权模式
使用寄存器:与用户模式相同
用途:运行操作系统任务
快速中断模式(FIQ, fiq)
特权级:特权模式
专用寄存器:R8_fiq-R14_fiq
用途:高速中断处理
特点:中断自动屏蔽,有独立寄存器组
外部中断模式(IRQ, irq)
特权级:特权模式
用途:普通中断处理
特点:比FIQ优先级低
管理模式(Supervisor, svc)
特权级:特权模式
进入方式:复位、SWI指令
用途:操作系统保护模式,处理软件中断
中止模式(Abort, abt)
特权级:特权模式
进入方式:数据/指令预取异常
用途:内存保护、虚拟内存管理
未定义模式(Undefined, und)
特权级:特权模式
进入方式:执行未定义指令
用途:软件仿真、扩展指令集
非特权模式
用户模式(User, usr)
特权级:非特权模式
限制:不能访问受限资源,不能直接切换模式
用途:运行应用程序
模式切换
自动切换:异常发生时自动切换
手动切换:修改CPSR模式位(只能在特权模式下)
返回用户模式:通过恢复CPSR(从SPSR)或直接修改CPSR
3.6 异常向量表
异常向量表位置
地址 异常类型 进入模式 0x00000000 复位 管理模式 0x00000004 未定义指令 未定义模式 0x00000008 软件中断(SWI) 管理模式 0x0000000C 预取中止 中止模式 0x00000010 数据中止 中止模式 0x00000014 保留 - 0x00000018 外部中断(IRQ) 外部中断模式 0x0000001C 快速中断(FIQ) 快速中断模式
异常处理流程
异常发生:CPU检测到异常条件
保存状态:
将下一条指令地址保存到相应模式的LR(R14)
将CPSR保存到相应模式的SPSR
模式切换:切换到对应的异常模式
PC跳转:跳转到异常向量表对应地址
中断屏蔽:根据需要屏蔽某些中断
异常处理:执行异常处理程序
异常返回:
恢复CPSR(从SPSR)
恢复PC(从LR,需要调整)
异常优先级
复位(最高优先级)
数据中止
FIQ
IRQ
预取中止
未定义指令、SWI(最低优先级)
FIQ与IRQ的区别
| 特性 | FIQ | IRQ |
|---|---|---|
| 优先级 | 高 | 低 |
| 向量位置 | 0x1C(向量表末尾) | 0x18 |
| 专用寄存器 | R8-R14有专用备份 | 与用户模式共享 |
| 中断屏蔽 | 自动屏蔽FIQ | 不自动屏蔽 |
| 使用场景 | 实时性要求高 | 普通中断 |
3.7 寄存器组织细节
Banked寄存器
不同模式有自己的专用寄存器:
R13(SP):每个模式都有自己的栈指针
R14(LR):每个模式都有自己的链接寄存器
SPSR:除用户模式外,其他模式都有
CPSR寄存器格式(32位)
31 30 29 28 27 ... 8 7 6 5 4 ... 0 N Z C V 保留 I F T 模式位
条件标志位:
N(Negative):结果为负
Z(Zero):结果为零
C(Carry):进位/借位
V(Overflow):溢出
控制位:
I:IRQ中断禁止(1=禁止)
F:FIQ中断禁止(1=禁止)
T:Thumb状态位(1=Thumb模式,0=ARM模式)
模式位[4:0]:指定当前处理器模式
3.8 内存管理
MMU功能
地址转换:虚拟地址→物理地址
内存保护:设置访问权限
Cache控制:设置缓存策略
总线优先级:设置访问优先级
页表结构
一级页表:粗粒度划分(1MB sections)
二级页表:细粒度划分(4KB pages)
TLB:缓存最近使用的页表项
内存访问属性
访问权限:无访问/只读/读写
域(Domain):16个域,控制访问权限
缓存策略:
可缓存/不可缓存
写回/写通
分配/不分配
3.9 调试与跟踪
调试接口
JTAG:标准调试接口,引脚多(5线)
SWD:串行调试,引脚少(2线)
SWO:串行线输出,用于跟踪
跟踪组件
ETM:实时指令跟踪
ITM:软件插装跟踪
DWT:
数据观察点
性能计数
程序流跟踪
四、编程模型细节
4.1 指令流水线
典型的3级流水线:
取指(Fetch):从内存读取指令
译码(Decode):解码指令,读取操作数
执行(Execute):执行操作,写回结果
流水线冲突:
结构冲突:资源争用
数据冲突:数据依赖
控制冲突:分支指令
4.2 异常返回指令
| 指令 | 功能 | 说明 |
|---|---|---|
| MOVS PC, LR | 从异常返回 | 最简单方式 |
| SUBS PC, LR, #4 | 标准返回 | 调整LR值 |
| LDMFD SP!, {PC}^ | 从栈恢复 | 恢复CPSR和PC |
4.3 中断延迟
最佳情况:3个时钟周期
1周期:检测中断
2周期:流水线刷新
3周期:跳转到向量表
最坏情况:取决于当前指令和流水线状态
4.4 电源管理状态
运行状态(Run):全速运行
睡眠状态(Sleep):时钟门控
停止状态(Stop):部分电源关闭
待机状态(Standby):仅保持必要逻辑
关机状态(Shutdown):完全断电
五、总结要点
ARM是RISC架构,采用Load/Store模型
7种工作模式中,6种为特权模式,1种为用户模式
异常向量表固定在低地址空间,每个异常对应4字节
FIQ有专用寄存器,中断响应更快
CPSR是关键寄存器,包含条件标志和控制位
MMU实现虚拟内存,提供内存保护和地址转换
多层次存储体系:寄存器→Cache→主存→外存
异常处理需要保存上下文,包括PC和CPSR