# 嵌入式概念及硬件组成
# 处理器的区分 MCU_MPU_AP
# MPU
目前主流计算机的架构为: CPU + RAM + Stronger
对于微型计算机的 CPU 也被称为 MPU
8086, 80186, 80286 等早期生成的 CPU 芯片都是 MPU
MPU 是一个较为老的概念,现在个人电脑上的芯片被称为 CPU
# MCU
MPU 成长路线的另一个分支为 MCU
MCU: 集 CPU+RAM+FLASH (存储器,FLASH 最为常简)+ 其他模块 为一体的芯片
MCU 的内存 RAM 一般都在 KB 级别,FLASH 一般在 KB ~ MB 级别,资源较少
MCU 可以运行 裸机 或 RTOS, 但是功能基本专一化
# AP
AP (Application processor) 应用处理器一般被视为 MCU 的超级加倍
AP 内部一般会有 CPU+RAM+FLSH+DSP+GPU+LCD, 当内存不够了可以外接极大的 DDR, 存储空间不够可以外接极大的 FLASH
AP 可以运行不同版本的操作系统,例如 Linux,IOS,Windows ..., 功能更加通用化
跟 MCU 进行比较,Application Processors 有以下不同:
- 集成了更多的模块:
Application Processors 内部集成了更多的模块,比如用于数据处理的 DSP、用于图形显示的 GPU, 甚至有多个处理器.
在手机电路板中,可用空间非常小,Application Processors 还需要搭配内存芯片才可以使用.
于是发展出了一种名为 package-on-package (PoP) 的工艺:在电路板上先焊接 Application Processors, 在 Application Processors 上面再焊接内存芯片,即 2 个芯片叠在一起. - 运行的操作系统不同:
MCU 上一般不运行操作系统,或是运行一些资源耗费较小的小型实时操作系统 (RTOS).
MCU 一般用来处理实时性要求高的事情,处理一些比较简单的事情.
Application Processors 基本上都会运行比较复杂的操作系统 (比如 Linux), 在操作系统上运行多个 APP.
上面又引入一个概念 “片上系统”(SoC, System on Chip), SoC 的本意是在一个芯片上就可以搭建完整的系统.
但是这个概念在日常使用中比较宽泛: MCU 芯片也可以称为 SoC, Application Processors 也可以称为 SoC, 即使它们还必须外接内存 / Flash 等外设才可以运行.
在以前的文档中涉及 SoC 时,意指比较复杂的系统;这时候 MCU 不属于 SoC, 因为 MCU 比较简单。但是时代在发展,MCU 也越来越复杂了,所以把 MCU 也当作 SoC 也是可以的.
# 三者之间的的关系
MCU 和 AP 是 MPU 分支成长成不同 处理器
PS: 现在有些公司把和 MCU 相对应的,可以运行 Linux 的处理器 (AP) 也可以称为 MPU, 总之无是 MPU 还是 AP 都是 MCU 的对立面的处理器
# 嵌入式硬件组成
一句话引出嵌入式操作系统: 支持 多种设备启动
补充知识:
XIP: eXecute In Place, 本地执行。可以不用将代码拷贝到内存,而直接在代码的存储空间运行.
# 系统从哪开始执行程序?
# 系统上电一定会执行程序,那么系统从哪里开始执行程序?
一般理解为:系统从哪启动就从哪执行.
如果系统从 SPI FLASH 启动,SPI 设备不是 XIP
设备 CPU 无法直接访问
# CPU 如何执行 SPI FLASH 上的代码?CPU 上电后第一个程序的第一条指令在哪里?
上电后 CPU 只能和 XIP 设备沟通,还需要有存储功能,那么毫无疑问就是 片内 ROM
ROM 中的程序会进行必要的初始化,比如设置时钟、设置内存;再从 "非 XIP 设备" 中把程序读到内存;最后启动这上程序
# 可读可写的变量存储在哪?
上面说过 嵌入式操作系统是支持多种设备启动的,ROM 的 功能会非常强大,一般有由 C 语言来实现
C 语言对变量的操作,必然是由读和写构成的,但是 ROM 是 Read Only Memory, 无法进行写入
如果 ROM 可写,极有可能会导致系统被破坏。那么,这些可读写的变量又该存储在哪呢?
前面提到过 AP 中会有 RAM, 而 RAM 是 Random Access Memory, 随机访问存储器.
RAM 就是专门用于存储 这些易变,需要读写的变量的,但是由于成本过于高昂,所以 RAM 基本很小
随着我们功能越来越复杂,需要内存也就越来越大,这时候就会外置 DDR 内存,当然 DDR 属于 DRAM, 片内 RAM 一般为 SRAM. 二者速度和工作方式还是有较大差别
# CPU 如何管理 这么多控制器呢?
无论是什么外置接口,都会有相应的控制器,例如: SPI FLASH 会有 SPI 控制器,LCD 会有 LCD 控制器,DDR 会有 DDR 控制器 ...
CPU 不可能与他们直连,一般通过寻址的方式来和各个芯片交互
然而 CPU 不可能什么都亲力亲为,所以就有了 内存控制器 来帮助 CPU 管理分发地址
# 嵌入式设备最简硬件组成图
这是最简单的 嵌入式设备的模板
ps: 图片来源于韦东山硬件大全视频
# 嵌入式系统启动流程概述
主芯片内部有 ROM, ROM 程序协助从非 XIP 设备启动.
以 SD 卡启动为例.
我们知道 CPU 只能运行 XIP 设备中的程序,ROM 程序做什么?
显然: ROM 需要把 SD 卡上的程序读到内存里 (片内 RAM 或是片外的 DDR)
# ROM 要做的事情
- 初始化硬件
- 初始化时钟,提高 CPU、外设速度
- 初始化内存:DDR 需要初始化才能使用
- 初始化其他硬件,比如看门狗、SD 卡等
从外设把程序复制到内存
支持那么多的启动方式,SD 卡、SPI FLASH、USB DISK, 怎么选择?
- 通过跳线,选择某个设备
- 通过跳线,选择一个设备列表,按列表顺序逐个尝试
- 不让客户选择,按固定顺序逐个尝试
内存那么大,把程序从 SD 卡等设备,复制到内存哪个位置?复制多长?
- 烧写在 SD 卡等设备上的程序,含有一个头部信息,里面指定了内存地址和长度;
- 不给客户选择,程序被复制到内存固定的位置,长度也固定
程序在 SD 卡上怎么存?
- 原始二进制 (raw bin),
- 作为一个文件保存在分区
执行新程序
# 哈佛架构 和 冯诺依曼架构
CPU 架构可以分为哈弗架构与冯诺伊曼架构
- 哈弗架构中指令与数据分开存放,CPU 可以同时读入指令、读写数据
- 冯诺伊曼架构中指令、数据混合存放,CPU 依次读取指令、读写数据,不可同时操作指令和数据
# 改进的哈弗结构
RM 公司的芯片,ARM7 及之前的芯片是冯诺伊曼架构,ARM7 之后使用 “改进的哈弗架构”
“改进的哈弗结构” 如下所示:
“改进的哈弗架构” 里,指令和数据在外部存储器中混合存放;CPU 运行时,从指令 cache 中获得指令,从数据 cache 中读写数据
# CISC 和 RISC
CISC (Complex Instruction Set Computers, 复杂指令集计算集) 和 RISC (Reduced Instruction Set Computers, 精减指令集计算集) 是两大类主流的 CPU 指令集类型
其中 CISC 以 Intel、AMD 的 X86 CPU 为代表
而 RISC 以 ARM、IBM Power 为代表
开源的 RISC-V 也是 RISC 指令集,RISC 的设计初衷针对 CISC CPU 复杂的弊端,选择一些可以在单个 CPU 周期完成的指令,以降低 CPU 的复杂度,将复杂性交给编译器
在此,总结一下 CISC 和 RISC 的主要区别:
指令集 | CISC | RISC |
---|---|---|
指令能力 | 指令能力强,单多数指令使用率低却增加了 CPU 的复杂度,指令是可变长格式; | 指令大部分为单周期指令,指令长度固定.RISC 内存只有 load 和 store 才做,数据运算由 CPU 完成 |
寻址方式 | 支持多种寻址方式 | 支持的寻址方式少 |
实现方式 | 通过微程序控制技术实现 | 增加了通用寄存器,硬布线逻辑控制为主,采用流水线方式执行 |
研发周期 | CISC 的研制周期长 | RISC 硬件简单,需要优化编译器 |
PS: ARM 公司的芯片都使用 RISC 指令集,对内存只有 load/store 操作,数据的处理是在 CPU 寄存器上进行
# 概念巩固测试
现代主流计算机的三大主件是.
微型计算机 CPU 常常叫做什么.
MCU 又可以叫什么.