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表指针和其它一些启动流程的启动地址。

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

        IVT在外部存储中的读取地址不同,使用SD/EMMC是1000h,使用qspi是0, 在实际开发手动添加IVT时需要格外注意,并且烧写时需要注意避开外部存储器的分区表。

       接下来,我们通过官方编译出的镜像来分析IVT信息。S32G2汽车网关开发(二):启动流程解析,S32G2开发,汽车,arm,arm开发,驱动开发,linux

        如图为官方镜像的IVT表信息。 

前四个字节D1 01 00 60为,是IVT表的头部信息

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

从第五字节到第十六字节没有信息,未使用

第十七字节到第二十字节为DCD表的指针这里为小端模式对齐,所以地址为0x200

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

从第二十一字节到第三十二字节没有信息,未使用

从第三十三字节到第三十六字节为APPbootcode header部分的指针,小端模式,地址为0x1200

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

从第三十七字节到第四十字节没有信息,未使用

从第四十一字节到第四十四字节为boot配置关键字,小端模式,数据为0x01

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

S32G2汽车网关开发(二):启动流程解析,S32G2开发,汽车,arm,arm开发,驱动开发,linuxS32G2汽车网关开发(二):启动流程解析,S32G2开发,汽车,arm,arm开发,驱动开发,linux

0x01代表

  1. 未使用HSE_H固件
  2. 启动目标未使能看门狗
  3. 启动目标为A53_0核心

以上为IVT表的全部内容,接下来分析下各个指针的指向的具体内容。

三. DCD解析

在IVT中给出了DCD表的指针,指向了0x200,DCD主要用来初始化一些启动中必需的硬件外设,如图为官方镜像的DCD数据。

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

第一字节到第四字节为DCD起始的头部信息,可知DCD表长度为28字节

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

第五字节为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

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

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

0x4009d31a

(相对于0x4009c000)偏移131a H)

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

为GPDO25写命令0x00000001

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

当外部GPIO板配置为输出时,将数据存储在由该寄存器控制的外部GPIO板上。

PDO_ n表示PDO[n],其中n是寄存器的实例。

0 - Pad数据输出低。逻辑低值

1 - Pad数据输出高。逻辑高值

以上为DCD配置的寄存器,阅读芯片手册和S32G274ARDB2开发板原理图可知,这两条命令的实际作用是使能PB_09这个IO口的外设,也就是EFUSE.

S32G2芯片中的eFuse用于存储和保护芯片配置、关键数据、安全密钥和加密等信息。它在芯片制造过程中被烧录,之后无法更改,提供了对芯片功能和安全性的保护和控制。

S32G2汽车网关开发(二):启动流程解析,S32G2开发,汽车,arm,arm开发,驱动开发,linuxS32G2汽车网关开发(二):启动流程解析,S32G2开发,汽车,arm,arm开发,驱动开发,linux

四. Application 镜像头部信息解析

0x1200地址保存着app bootcode的头部信息,具体解释如下:

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

前四个字节为application image开始的标志

第五个字节到第八个字节为bootrom加载app bootcode的第一个ram地址

       为0x342fc570

第九个字节到第十二个字节为RESET后使用内核启动时的入口地址(load address)

       为0x34302000

       目前的boot target是a53核,指针对应于代码执行的开始(entry point)

第十三字节到第十六字节为appbootcode长度60930bytes

之后空余若干字节后再0x1240位置为正式appbootcode代码,在bootflow最后一步转移到sram中

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

以上内容就是芯片官方镜像的启动流程,下篇文章我会根据不同的启动方式开启开发板点灯之旅。文章来源地址https://www.toymoban.com/news/detail-626081.html

到了这里,关于S32G2汽车网关开发(二):启动流程解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 20230705点亮STC32G实验箱9.6(STC32G12K128)开发板的跑马灯LED(深入了解)

    08第六集:LED闪烁第六集:LED闪烁和花式点灯上和花式点灯上.mp4 09第六集:LED闪烁和花式点灯下.mp4 【大文哥学习32位8051】20230704【冲哥视频】第六集的晶振时钟的学习困惑 2023/7/5 17:36 delay_ms(3000); 刷机的时候如果使用11.0592M的Fosc,3秒钟的延迟大概7秒钟。 刷机的时候如果使用

    2024年02月12日
    浏览(30)
  • STM32G4 比较器COMPx(寄存器开发)

    STM内部的比较器是模拟量的比较器,其与APB2时钟同步,在RCC时钟控制器中没有COMx时钟使能标志位,其时钟的使能与复位与SYSCLK同步。 比较器的输入端有正负极信号,正极INP通过INPSEL选择输入信号,负极通过INMSEL选择输入信号,其SEL引脚定义如下图表所示。 滞回英文 Hystere

    2024年02月12日
    浏览(30)
  • 国民技术N32G430C8开发笔记二-UART驱动开发

    参考demo E:tfsdatasmartsafeN32G430Nations.N32G430_Library.1.0.0projectsn32g430_EVALexamplesUSARTInterrupt开发uart1和uart3驱动。Uart1用于通信,uart3用于调试。 参考用户手册5.2.5复用功能。Uart1_tx引脚使用PA9,重映射使用AF5,Uart1_rx引脚使用PA10,重映射使用AF5,Uart3_tx引脚使用PB10,重映射使用

    2024年01月25日
    浏览(35)
  • STM32CubeMX配置STM32G031多通道ADC采集(HAL库开发)

    时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向一定要勾选Use Micro LIB  获取ADC通道值 主函数   串口输出

    2024年02月15日
    浏览(39)
  • S32K3系列单片机开发笔记(SIUL是什么/配置引脚复用的功能·)

    今天花时间看了一下,SIUL2模块的相关内容,并参照文档,以及例程作了一些小记录,知道该如何使用这个外设,包括引脚的配置,中断配置,以及常用函数的使用等,但对其中的一些细节还需要跟深入的学习和了解。 系统集成单元:System Integration Unit Lite2 (SIUL2) 提供外部设

    2023年04月25日
    浏览(28)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

     时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  添加DMA  DMA模式选择循环模式  使能DMA连续请求 采样时间配置160.5 转换次数为8  配置好8次转换的顺序  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向

    2024年02月08日
    浏览(42)
  • STM32G4 Simulink FOC开发实战--第八章:MCU内部OPAMP-电流采样

    https://www.bilibili.com/video/BV1nh4y1v72T/?spm_id_from=333.999.0.0 增益具体计算方法请参考附录一:带偏置的差分运放参数设计 R58,R59作用是为了输入的正向端和负向端输入阻抗匹配; R52,R53为分压电阻,作用是将输入正向端电压正向偏置1.65V; R56与R59形成负反馈增益,运放整体增益计算

    2024年04月23日
    浏览(38)
  • 国民技术N32G430开发笔记(9)- IAP升级 Bootloader的制作

    1、上节提到Flash的分区,0x8000000-0x8004000为Boot分区,我们的bootloader就烧录到此分区。 Bootloader很简单,新建一个普通的工程, 也不用初始化外部设备,开机后,直接跳转到 App分区所在的地址即可, 当然App的分区程序也要提前烧录进去, 否则也是跳不过去的。 代码 开机延时

    2024年02月02日
    浏览(52)
  • 国民技术N32G430开发笔记(12)- IAP升级 Settings区域数据初始化

    1、假如,有两个产品,A产品跟B产品,硬件都一样,要求一个软件里的board_name为N32G430C8L7_STB_A,另一个软件里的board_name为N32G430C8L7_STB_B。 那我们如何在不改boot程序跟App程序的基础上,快速的使两个软件看上去不同呢? 这里我们将setting区域的数据提前初始化,通过c语言的文

    2024年02月01日
    浏览(38)
  • 国民技术N32G430开发笔记(18)- I2C1 从机收发数据

    1、将PB6 PB7设置为i2c从机,跟android板卡通讯。 2、Android发送 写命令: 0x05 0x02 0x00 0x00 checksum n32将收到的命令打印出来 读版本命令: 0x01 0x02 0x00 0x00 checksum n32将app_version返回电视端 3、i2c从机配置,采用中断方式收发数据。 主要代码: 从机配置代码: 中断处理函数: 接收到数

    2024年02月03日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包