本篇我们探究 Bootloader里Main函数都做了些什么?首先,在没有看到参考之前,简单地想一想:

  • 本系列第一篇所言,在跳转至Main函数之前,英飞凌的启动文件对core进行了初始化和配置,接下来应该是要初始化MCAL的,不然没法让MCAL的驱动正常工作;
  • 第二个是进行一些判断逻辑,从而决定是留在BOOT还是跳转至APP;
  • 如果是留在BOOT,则持续进行循环,等待UDS诊断请求;
  • 如果是跳转至APP,需要检查一下APP代码的有效性和完整性,无误则跳转。

Step 1:Mcal_Init( )

MCU
MCU模块是MCAL中最重要也是最核心的模块,负责:SCU, GTM, CCU6, GPT12 and STM 外设的配置。主要功能:
• Configuration of Clock, Reset and static low power mode functionalities as specified by AUTOSAR
• Configuration of Trap functionality
• Configuration of global features of GTM, CCU6 and GPT12 required by the BASIC drivers
• Provide library support for other drivers for timer IPs - GTM, CCU6, GPT12 and STM
• Configuration of phase synchronizer necessary for analog converters
• Runtime APIs requested by AUTOSAR for clock, reset, low power management and RAM initialization
• Runtime APIs for Trap management
根据MCAL手册MCU_UserMannual里的示例应用,MCU Driver的配置分为两步:

  • MCU初始化在这里插入图片描述
  • 时钟和分频器的初始化e0a103cdd4754ac4e3cb5e2875185.png)

McalLib
MCAL库(MCALLIB)提供了一组实用程序例程供MCAL驱动程序使用。提供的服务包括ENDINIT管理、全局-本地内存地址转换、基于定时器的延迟、检索CPU ID,tricore固有指令的抽象和自旋锁。无需初始化,引用头文件即可。
常用Func APIs:

uint32 Mcal_DelayGetTick(void):The API retrieves the current value of the lowest 32-bits of the register STM0.TIM0.
uint32 Mcal_DelayTickResolutio(void):The API retrieves the resolution of a STM in nanosecond

PORT
PORT驱动程序配置和设置端口引脚的属性。同样从UM 里获取参考示例:在这里插入图片描述
DIO
DIO驱动程序对端口引脚进行读写操作。DIO驱动程序为内部通用IO端口提供基于端口、通道和通道组的读写访问。无需初始化。
CAN
在这里插入图片描述

CRC
CRC驱动程序提供api来计算由AUTOSAR规定的8位、16位、32位和64位多项式的CRC。
FLsloader
FLSLOADER驱动提供以下服务:
•Flash的初始化和去初始化
•将程序和数据写入Flash
•擦除Flash中的内容
•锁定和解锁Flash
在这里插入图片描述

Gpt
在这里插入图片描述

IRQ
IRQ全程为:Interrupt ServiceRequest,不同的模块配有自己独有的中断服务请求,而在Bootloader中用到了CAN和GPT,因此初始化操作为:IrqCan_Init(); IrqGpt_Init();
在这里插入图片描述

题外话:一般来说,MCAL有哪些模块是由板子外设决定的,一版来说,用到的有:ADC,CAN,DIO,DMA,ETH,Flsloader,GPT,ICU,IRQ,Mcallib,MCU,PORT,Pwm,SMU,SPI,UART等,至于他们之间的依赖关系,各自作用,其实我还没有完全搞清楚,就不在这献丑了。

Step2:其他初始化

由于Bootloader需要诊断功能,而其以来的基础则是UDS,因此也要进行UDS_Init()。
另外,如果使能看门狗,则也需要Wdg_Init()

Step3:开启定时器

StartGptTimer();

Step4:无限循环

在此无限循环里,进行UDS服务的实现和CAN的Mainfunction,然后就是判断是否跳转至APP。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐