当前位置:   article > 正文

S32G2汽车网关开发(二):启动流程解析

s32g2

上一篇文章记录了关于系统移植方面的相关心得,本文将对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代表

  1. 未使用HSE_H固件
  2. 启动目标未使能看门狗
  3. 启动目标为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中

以上内容就是芯片官方镜像的启动流程,下篇文章我会根据不同的启动方式开启开发板点灯之旅。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/144442
推荐阅读
相关标签
  

闽ICP备14008679号