跟我一起学RT-Thread之嵌入式发展史

嵌入式发展史简述及一些概念

1.1.MPU、MCU、SoC、Application Processors的概念

在一个电子系统中,处理器占据最重要的位置,被称为中内处理器单元:CPU(Central Processing Unit)。它从IO设备读取数据,处理,然后显示出来。

CPU的发展有两个路线:MPU、MCU。

MPU只是一个处理器(比较老的概念),需要搭配内存等非常多的其他外设才可以构成一个系统;

MCU内部有处理器、内存、Flash及其他模块,仅仅需要搭配少量外设就可以构成一个系统。

MPU这一路线,在上世纪80年代非常流行,那时的微型计算机、游戏机都是使用MPU。比如Motorola公司的68000芯片就是一款主流的微处理器(MPU)。下图是一款Alpha Micro AM-1000系列的微型计算机电路板,电路板右侧中间最大的芯片就是MPU 68000。

在这里插入图片描述

后来MPU逐渐式微,可以认为MPU发现到现在只剩下了intel、AMD公司x86系列CPU。这类CPU也越来越复杂,称之为“微处理器”似乎不恰当了。在个人电脑领域,可以看到类似下图的主板。主板上插上CPU、内存条、声卡等等就构成了一台计算机。整个主板体积庞大、制造复杂:

在这里插入图片描述

MCU这一路线,就是把CPU、内存、Flash都集中在一个芯片上,它再搭配其他外设备就可以构建一个完整的系统。MCU的发展经历过8位8051单片机、16位AVR单片机、32位STM单片机等等:
在这里插入图片描述

扫描二维码关注公众号,回复: 13399428 查看本文章

我们使用的51单片机、STM32单片机,一般都只是用来处理比较简单的事务,应用场景比较单一。我们使用的手机,里面的主芯片更加复杂,它既含有CPU,也含有用于数据处理的DSP、用于图形显示的GPU。使用这类主芯片设计出来的电路板更加复杂,它的性能甚至不弱于个人电脑:

在这里插入图片描述

为了跟个人电脑相区分,这些使用含有CPU电子产品,被称为嵌入式系统、嵌入式产品、嵌入式板卡。

嵌入式板卡就是一台形状不一样的电脑,跟电脑相比,可以引入几个概念:

1.2. CPU(Central Processing Unit):

中央处理器,在PC机它是一个独立的芯片。

在嵌入系统中,它是芯片里的一个单元,跟其他模块比如USB、UART、音频组成一个芯片。

1.3. MPU(Mircro Processor Unit):

微处理器单元,其作用等同于在PC上使用的CPU,它也只仅仅是一个处理器,需要配合内存、Flash等外设才可以使用。你可以认为MPU是增强版的MCU

现在,除了个人电脑上的CPU,基本上找不到MPU了。并且我们一般不把电脑上的CPU当作MPU,毕竟它也是挺大的,并不“微小”。

1.4. MCU(Micro Controller Unit):

微控制器单元,有时又称为单片机。

MCU内部集成了处理器和各类模块,比如USB控制器、UART控制器、内存、Flash等等。只需要外接少量的器件,就可以搭建一个电子系统。

C51芯片、STM32等芯片,都是MCU。

MCU芯片内部的内存或Flash,容量在几KB、几百KB、几MB的量级,一般不再需要外接内存或Flash。

1.5. Application Processors:

手机中的主芯片跟MPU类似,也是集成了处理器和各类模块。但是它的性能已经极大提升,可以外接几GB的内存、几GB的Flash。

在手机中,这个主芯片一般用来处理显示、输入,运行用户的程序,所以称它为“Application Processors”。

“Application Processors”的概念可以扩展到其他场景,不再局限于手机。

跟MCU进行比较,Application Processors有以下不同:

a. 集成了更多的模块:

Application Processors内部集成了更多的模块,比如用于数据处理的DSP、用于图形显示的GPU,甚至有多个处理器。

这里又引入一个概念“片上系统”(SoC,System on Chip),SoC的本意是在一个芯片上就可以搭建完整的系统。

但是这个概念在日常使用中比较宽泛:MPU芯片也可以称为SoC,Application Processors也可以称为SoC,即使它们还必须外接内存/Flash等外设才可以运行

在以前的文档中涉及SoC时,意指比较复杂的系统;这时候MCU不属于SoC,因为MCU比较简单。但是时代在发展,MCU也越来越复杂了,所以把MCU也当作SoC也是可以的

在手机电路板中,可用空间非常小。Application Processors还需要搭配内存芯片才可以使用,于是发展出了一种名为package-on-package (PoP)的工艺:在电路板上先焊接Application Processors,在Application Processors上面再焊接内存芯片,即2个芯片叠在一起。

b. 运行的操作系统不同:

MCU上一般不运行操作系统,或是运行一些资源耗费较小的小型实时操作系统(RTOS)。

MCU一般用来处理实时性要求高的事情,处理一些比较简单的事情。

Application Processors基本上都会运行比较复杂的操作系统(比如Linux),在操作系统上运行多个APP。

c.嵌入式产品和PC的区别

1.最根本也是最主要的区别就是嵌入式产品中Soc的CPU作为一个模块集成在一个芯片上,而PC结构的CPU作为一个单独的芯片集成在计算机的主板上。

2.嵌入式产品的外围设备在Soc中都有对应的设备控制器(模块),以应对复杂的设备驱动协议。而PC的外围设备都需要一个独立的芯片驱动。

2. 哈弗架构与冯诺伊曼架构

在这里插入图片描述

CPU架构可以分为哈弗架构冯诺伊曼架构。

哈弗架构中指令与数据分开存放,CPU可以同时读入指令、读写数据。

冯诺伊曼架构中指令、数据混合存放,CPU依次读取指令、读写数据,不可同时操作指令和数据。

ARM公司的芯片,ARM7及之前的芯片是冯诺伊曼架构,ARM7之后使用“改进的哈弗架构”。“改进的哈弗结构”如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JaKqOJm1-1611845111505)(/C:/Users/Jasper/AppData/Local/Temp/msohtmlclip1/01/clip_image012.png)]

在“改进的哈弗架构”里,指令和数据在外部存储器中混合存放;CPU运行时,从指令cache中获得指令,从数据cache中读写数据。

3.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的复杂度,将复杂性交给编译器。

举一个例子,下图是实现这样的乘法运算:a = a * b。它需要4个步骤:读出a的值、读出b的值、相乘、写结果到a。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yU95fFqy-1611845111506)(/C:/Users/Jasper/AppData/Local/Temp/msohtmlclip1/01/clip_image014.png)]

使用CISC提供的乘法指令,只需要一条指令即可完成这4步操作。当然,这一个指令需要多个CPU周期才可以完成。

而RISC不提供“一站式”的乘法指令,需调用四条单CPU周期指令完成两数相乘:内存a加载到寄存器,内存b加载到寄存器,两个寄存器中数相乘,寄存器结果存入内存a。

按照此思路,早期的设计出的RISC指令集,指令数是比CISC少些。后来,很多RISC的指令集中指令数反超了CISC。因此,应该根据指令的复杂度而非数量来区分两种指令集

当然,CISC也是要通过操作内存、寄存器、运算器来完成复杂指令的。它在实现时,是将复杂指令转换成了一个微程序,微程序在制造CPU时就已存储于微服务存储器。一个微程序包含若干条微指令(也称微码),执行复杂指令时,实际上是在执行一个微程序。这也带来两种指令集的一个差别,微程序的执行是不可被打断的,而RISC指令之间可以被打断,所以理论上RISC可更快响应中断。

在此,总结一下CISC和RISC的主要区别:

  1. 指令能力:

CISC的指令能力强,单多数指令使用率低却增加了CPU的复杂度,指令是可变长格式;

RISC的指令大部分为单周期指令,指令长度固定。

RISC对内存只有load/store操作,数据的运算都是在CPU内部实现。

  1. 寻址方式:

CISC支持多种寻址方式;RISC支持的寻址方式少;

  1. 实现方式:

CISC通过微程序控制技术实现;

RISC增加了通用寄存器,硬布线逻辑控制为主,采用流水线方式执行。

  1. 研发周期:

CISC的研制周期长

RISC硬件简单,需要优化编译器。

ARM公司的芯片都使用RISC指令集,对内存只有load/store操作,数据的处理是在CPU寄存器上进行。

4.嵌入式系统硬件结构与启动

4.1.XIP概念

XIP: Execute In Place, 本地执行。可以不用将代码拷贝到内存,而直接在代码的存储空间运行。XIP devices: Devices which are directly addressable by CPU。就是芯片内部的FLASH。

4.2.嵌入式系统硬件的组成

一句话引出整个嵌入式系统: 支持多种设备启动

  • 系统一上电,cpu一定要执行程序
  • 定义变量或着开辟内存都是在RAM上执行的,不可能在ROM上执行(隐含着Soc中内置RAM)
  • 每一个外部设备在MPU中都有对应的控制器,cpu只需要专注于逻辑控制
  • cpu通过内存控制器访问各个设备控制器,所有设备的集合(所有设备寄存器地址的集合)可以映射为一个内存图。
    cpu发出地址信号,内存控制器就访问该地址信息所对应的外设,然后cpu发出数据信号
  • 为了应对复杂的驱动各种各样的设备的协议,AP中集成了相应的设备控制器

4.3.嵌入式系统启动流程概述

主芯片内部有ROM(XIP设备),ROM程序协助从非XIP设备启动。

以SD卡启动为例。
而CPU只能运行XIP设备中的程序
ROM程序(boot rom)做什么?
显然:ROM需要把SD卡上的程序读到内存里(片内RAM或是片外的DDR)

ROM程序要做的事情:

4.3.1.初始化相关设备

初始化硬件
,初始化时钟,提高CPU、外设速度

初始化内存,DDR需要初始化才能使用

初始化其他硬件,比如看门狗、SD卡等

4.3.2.把程序从外设拷贝到内存

支持那么多的启动方式,SD卡、SPI FLASH、EMMC,那应该 怎么选择?

1.通过跳线,选择某个设备

2.通过跳线,选择一个设备列表,按列表顺序逐个尝试

3.不让客户选择,按固定顺序逐个尝试

内存那么大,把程序从SD卡等设备,复制到内存哪个位置?复制多长? 烧写在SD卡等设备上的程序,含有一个头部信息,里面指定了内存地址和长度

或不给客户选择,程序被复制到内存固定的位置,长度也固定。

4.3.3.程序的存储方式

1.原始二进制(raw bin)

2.作为一个文件保存在分区里

4.3.4.执行程序

执行新程序

5.ALPHA开发板启动流程

由于ALPHA开发板启动流程内容过多,留到下一篇博客中继续讲解。

6.总结

本篇博文主要讲解了嵌入式的发展史以及一些常见的嵌入式相关的概念,最后还大概描述了嵌入式系统硬件结构与启动,具体的单板启动下一篇博文中继续讲述。

猜你喜欢

转载自blog.csdn.net/qq_46359697/article/details/113360424