启动流程
从上电开始到应用程序运行中间到底经历了什么?
加电 上电中硬件方面会控制各个部分为芯片依次加电。第一个代码运行,进行BOOT模式选择 通过引脚BOOT_MODE[1:0]来选择BOOT方式,两种方式。正常运行是内部BOOT模式
01:串行下载 通过OTG1配合厂家提供的软件来为存储代码的设备烧写程序。属于量产模式。类似于单片机ISP10:内部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.用户代码,最终可执行文件