上一篇文章记录了关于系统移植方面的相关心得,本文将对S32G2芯片的具体启动流程进行剖析和记录。通过上一篇bsp33下载并编译的官方镜像,针对从SD卡启动的启动方式来具体分析下在程序镜像运行之前,BootROM阶段芯片都做了什么,并解析了IVT、DCD信息。
其它由外部存储器(emmc、nor flash等)与SD卡类似,文中会提到差别。但其它启动方式如串行启动本文未作解析。
目录
一. 整体启动流程编辑
二. IVT解析
三. DCD解析
四. Application 镜像头部信息解析
一. 整体启动流程
1.初始化堆栈
2.检查是否使用待机模式启动(未使用)
3.确认boot 接口
4.设置主频
5.配置fuse information(从SD卡)
6.从外部存储复制IVT表
7.读取IVT表
8.拷贝DCD表
9.若IVT表中BOOT_SEQ==0,读取IVT表中的application boot code(u-boot)镜像地址,并将其拷贝到目标存储区域。
10.由于未使用HSE安全启动固件,此时使能application boot code(u-boot)镜像的工作核心(A53)将application boot code(u-boot)复制到SRAM中
11.在启动uboot后,uboot提供了启动M7_0内核的命令,可将M7程序镜像拷贝至SRAM中,使用startm7命令使能M7_0核心。
12.BootROM阶段结束,由uboot引导后续内核启动。
二. IVT解析
首先,芯片的内部BootROM会从镜像中读取IVT表,IVT表中包括了镜像入口指针,镜像加载地址(通过bootcode header),DCD表指针和其它一些启动流程的启动地址。
IVT在外部存储中的读取地址不同,使用SD/EMMC是1000h,使用qspi是0, 在实际开发手动添加IVT时需要格外注意,并且烧写时需要注意避开外部存储器的分区表。
接下来,我们通过官方编译出的镜像来分析IVT信息。
如图为官方镜像的IVT表信息。
前四个字节D1 01 00 60为,是IVT表的头部信息
从第五字节到第十六字节没有信息,未使用
第十七字节到第二十字节为DCD表的指针这里为小端模式对齐,所以地址为0x200
从第二十一字节到第三十二字节没有信息,未使用
从第三十三字节到第三十六字节为APPbootcode header部分的指针,小端模式,地址为0x1200
从第三十七字节到第四十字节没有信息,未使用
从第四十一字节到第四十四字节为boot配置关键字,小端模式,数据为0x01
0x01代表
- 未使用HSE_H固件
- 启动目标未使能看门狗
- 启动目标为A53_0核心
以上为IVT表的全部内容,接下来分析下各个指针的指向的具体内容。
三. DCD解析
在IVT中给出了DCD表的指针,指向了0x200,DCD主要用来初始化一些启动中必需的硬件外设,如图为官方镜像的DCD数据。
第一字节到第四字节为DCD起始的头部信息,可知DCD表长度为28字节
第五字节为DCDcommand的头部标志,为CC,第六七字节为长度0C,代表12字节长度。
之后的内容为DCD命令部分的内容,作用是为芯片内一些寄存器进行初始化。
0x4009c2a4
给MSRC19写了4字节命令0x0021c000
0000 0000 0010 0001 1100 0000 0000 0000
21 OBE gpio输出buffer使能
20 ODE disable开漏输出
19 IBE disable输入
16-14 FMAX设置在(fastpads)100 mhz(1.8v)83mhz(3.3v)
3.3vpads 1mhz
0x4009d31a
(相对于0x4009c000)偏移131a H)
为GPDO25写命令0x00000001
当外部GPIO板配置为输出时,将数据存储在由该寄存器控制的外部GPIO板上。
PDO_ n表示PDO[n],其中n是寄存器的实例。
0 - Pad数据输出低。逻辑低值
1 - Pad数据输出高。逻辑高值
以上为DCD配置的寄存器,阅读芯片手册和S32G274ARDB2开发板原理图可知,这两条命令的实际作用是使能PB_09这个IO口的外设,也就是EFUSE.
S32G2芯片中的eFuse用于存储和保护芯片配置、关键数据、安全密钥和加密等信息。它在芯片制造过程中被烧录,之后无法更改,提供了对芯片功能和安全性的保护和控制。
四. Application 镜像头部信息解析
0x1200地址保存着app bootcode的头部信息,具体解释如下:
前四个字节为application image开始的标志
第五个字节到第八个字节为bootrom加载app bootcode的第一个ram地址
为0x342fc570
第九个字节到第十二个字节为RESET后使用内核启动时的入口地址(load address)
为0x34302000
目前的boot target是a53核,指针对应于代码执行的开始(entry point)
第十三字节到第十六字节为appbootcode长度60930bytes
之后空余若干字节后再0x1240位置为正式appbootcode代码,在bootflow最后一步转移到sram中
文章来源:https://www.toymoban.com/news/detail-626081.html
以上内容就是芯片官方镜像的启动流程,下篇文章我会根据不同的启动方式开启开发板点灯之旅。文章来源地址https://www.toymoban.com/news/detail-626081.html
到了这里,关于S32G2汽车网关开发(二):启动流程解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!