目 录CONTENT

文章目录

汽车电子笔记:BootLoader升级过程疑难问题解决方式(Bootloader响应10 02 + 刷死拯救机制)

moke
2024-07-25 / 0 评论 / 0 点赞 / 105 阅读 / 0 字

1、概述

        BootLoader作为升级APP程序必不可少的一环,作为固件烧录在MCU的固定地址(一般地址的较为考前位置),记录一下在日常工作中遇到的有关BootLoader的疑问点、比较值得记录点、一些使用方法等。

2、如何在BootLoader响应10 02

2.1、实现流程图

        部分客户需求、刷写APP的时候,编程会话10 02 需要响应在BootLoader里面,之前一直对如何响应在BootLoader存疑,毕竟响应是Can发出去的,BootLoader没接收,怎么响应的呢?

        响应流程如下

 2.2、实现方式(代码思路)

        前置条件:已经判断了重刷写标志位置位。

static const uint8 Boot_ReprogrammingResponse[8]=
{
    0x06u,0x50u,0x02u,ADPT_SESSION_RESPONSE0,ADPT_SESSION_RESPONSE1,
    ADPT_SESSION_RESPONSE2,ADPT_SESSION_RESPONSE3,CANTP_FRAME_PADDING_VALUE
};
 
(void)Canif_Write(ADPT_UDS_TX_HANDLE, (uint16)sizeof(Boot_ReprogrammingResponse),Boot_ReprogrammingResponse);

伪代码如下

void Fun(void)
{
	If(Reprogramming  == true)
		{
			Canif_Write(Handle,size,buff);
        }
}

3、刷死拯救机制(100%能救活,适配各类控制器的方法)

        目前项目中遇到一个问题,将英飞凌的Hex刷写进了NXP的芯片里面,上电就死机,由于BootLoader做法比较简单,刷错有时候也是不可避免。所以一般需要留一些后门比较好点。

3.1、强留Boot流程图

大概思路如下,软件流程图如下

3.2、实现方式(代码思路)

  1. 每次上电,前50ms不执行跳去初始化与跳APP的操作,执行诊断服务这一层的代码
If((stayinboottime == 0)&&(stayinbootFlag == 0)&&(AppValidFlag == 1))
{
    X_DeInit();
    Clear_Ram();
    Go_App();
}
else
{
    CanTp();
    Uds();
}

        在上电前的50ms,诊断服务判断会话模式,检测到10 03 将stayinbootFlag = 1,此时就会一直停留在Boot里面了,实现正常升级其他程序。

博主关闭了所有页面的评论