目录
0 前言
最近在做刷写相关的工作,顺便搞懂了StayInBOOT和FlashDiver,写出来作为分享,如果有哪里不对也请多多指正。
1 StayInBOOT
StayInBOOT在整个流程中的位置如下图所示,从图中可以看到,当ECU重启时会先检查是否有外部请求,这部分的内容在这篇文章有做介绍:UDS干货之编程会话与软件复位的相似与区别_uds 1002-CSDN博客
在APP是否有效时,进入15ms的延时,如果再次期间收到了StayInBOOT的命令,则使ECU直接进入BootLoader的编程会话,如果成功进入编程会话后,5秒钟没有任何报文,ECU将会自动复位。
主要作用:当APP跑飞,卡死时想要更新APP,只需要不断发送StayInBOOT的命令,然后下电再上电,这时ECU就可以进入boot的编程会话,继续正常的刷写。
这一般是刷写测试中一个容易被忽略的测试点, 需要注意。
2 Flash Driver
使用过上位机刷写的朋友应该都知道,我们做刷写的时候是需要放两个文件的,一个是Flash Diver,一个是APP文件。APP文件显而易见,就是我们要使用的APP,但不知道大家是否有这样的疑问:Flash Driver是干什么用的呢?是BOOT吗?如果不是boot的话,那BOOT中是否也有两个文件,一个BOOT,一个Flash Driver?
揭晓答案:FlashDriver在某种程度上是BOOT,从下图也可以看出,刷BOOT的时候是没有另外的Flash Driver的。
Flash Driver是一段基本擦除内存数据功能的程序,出于安全考虑,Bootloader中不能包含 Flash Driver,避免程序跑飞时进入Flash Driver,对ECU造成不可逆的破坏,因此为了避免上述情况,Flash Driver一般放置在上位机中与APP一起刷入他,通过Bootloader调用Flash Driver的程序,实现内存擦除的功能。
所以在我们平常的刷写流程中,需要先下载Flash Driver,然后31擦除时,其实是软甲内部调用Flash Driver的程序去擦除APP需要的内存。现在再看下图是否就变得更清晰明朗些了,也明白了为什么擦除只需要擦除APP,下载Flash Driver前不需要擦除了。