启动流程
从上电开始到应用程序运行中间到底经历了什么?
- 加电
上电中硬件方面会控制各个部分为芯片依次加电。 - 第一个代码运行,进行BOOT模式选择
通过引脚BOOT_MODE[1:0]来选择BOOT方式,两种方式。正常运行是内部BOOT模式- 01:串行下载 通过OTG1配合厂家提供的软件来为存储代码的设备烧写程序。属于量产模式。类似于单片机ISP
- 10:内部BOOT模式 芯片会执行内部boot ROM 代码段,这段代码会进行硬件初始化(一部分外设),然后从boot设备(代码存放设备,例如SD/EMMC,NAND)中将代码拷贝出来复制到指定ROM中,一般是DDR.
- 内部BOOT ROM代码运行
该代码段为芯片厂商专用,出厂固化。
1.初始化时钟,设置体统时钟为396Mhz。
2.根据I/O口选择的代码段存放设备,初始化外部设备并读取以固定格式存储的起始代码段
2.根据在芯片外部的起始代码段。初始化外部设备,并下载镜像到DDR中
3.跳转到DDR中运行用户代码。 - 外部代码段
外部代码包含以下部分,存放顺序如下。
1.IVT(Image vector table) 包含一系列地址信息,这些地址信息在ROM中按照固定地址存放。包括镜像程序入口点
2.BOOT data 启动数据,包含了镜像的拷贝地址,大小等信息
3.DCD(Device configuration data) 设备配置信息,重点是DDR3的初始化配置
4.用户代码,最终可执行文件