MCU是将CPU,RAM,FLASH等器件集成在一起的微控制单元
对于不同的嵌入式系统支持很多不同的启动方式,主要可分为XIP设备启动和非XIP设备启动等。
- XIP设备启动:是系统上电之后CPU执行的第一条指令是直接在非易失性存储器中执行的,比如被存储在flash中的启动程序(flash就是XIP设备),便可以直接在flash中执行,而不需要拷贝到内存中运行。
- 非XIP设备启动:如SD卡,USB,UART,网卡等不同的启动方式,这些启动程序一般都是储存在ROM中的,CPU会与ROM直接通信,ROM由于是只读设备,其中的程序需要拷贝到内存中去执行,这个过程称为并非XIP机制。
科普以下XIP这个概念:(35条消息) XIP简介_yangzcc的博客-CSDN博客_xip
系统上电后CPU必须要执行程序!!!
但是如果我们选择了非XIP设备启动,设备上电后CPU无法直接访问非XIP设备中的启动程序,那么CPU需要执行什么程序呢?这些程序被储存在了哪里?
其实我们可以猜到CPU需要执行的第一条指令必定位于CPU可以直接访问的设备中,这个CPU可以直接访问的设备便是集成在MCU中的片上ROM(Chip ROM),设计师们将多种不同的设备启动方式的程序都保存在了ROM中,(这里就产生了一个问题,ROM是只读设备,但是ROM中存储的程序一般都是用C语言来编写的,这会有什么影响呢?举个例子,C语言定义一个变量是可读可写的,但是这变量读写的操作很明显不能在ROM中来干,所以我们读出来的程序需要找个地方运行起来,这便引入了RAM),我们从ROM中读取出来的启动程序都是放到RAM中去运行的。
知道了上面这一点之后,我们发现在MCU中CPU是不用外设进行直接通信的,CPU只与片上ROM通信,而实现CPU与外设通信的中间工作都是由ROM与对应外设的控制器来负责的。
因此,一个MCU,或者更为复杂的SOC的内部原理图可以如下图所示:(来自视频截图)
可见一个SOC内部集成了CPU,ROM,RAM和多种外设的控制器,并且它支持外接内存和硬盘
其中CPU只负责与ROM通信,ROM与各种外设控制器通信,来实现对应外设的各种功能。