• 852查看
  • 0回复

[底层软件] 一篇易懂的Bootloader小结

[复制链接]


该用户从未签到

发表于 30-5-2024 21:51:27 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


之前转载几篇Bootloader文章,一直想稍作总结进一步吸收,契机来了。
    Bootloader开发系列1:初识Bootloader (qq.com)Bootloader开发系列2:为什么需要SBL(Secondary Bootloader)?Bootloader开发系列3:两种刷写方法 (qq.com)Bootlaoder开发系列4:四种App跳入Boot的实现方式 (qq.com)

更多BSW开发内容可以关注开心果 Need Car:



1 什么是Bootloader?
《微处理器系统结构与嵌入式系统系统设计》中是这样定义:Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行。而对于汽车ECU的Bootloader,ISO14229-1给出了定义,如下图所示:
一篇易懂的Bootloader小结w1.jpg

ECU软件包含3个部分,Boot Manager(引导程序)、Reprogramming Software(更新软件程序)和Application Software(应用软件程序)。其中,Boot Manager和Reprogramming Software就是所谓的Bootloader,Boot Manager就是常说的Bootloader的启动加载模式,而Reprogramming Software就是常说的Bootloader的下载模式。Bootloader作用主要是用来更新Application Software,其刷写的机理是这样:先进入启动加载模式,再根据Application Software是否有效来决定进入应用软件还是Bootloader的下载模式。Bootloader的刷写场景主要有两个:一是ECU的应用软件开发过程中,需要频繁刷写进ECU;二是车量产后,应用软件出现bug而需要修复,这时也需要重新将修复的应用软件刷写进ECU(OTA或者到到店刷写形式)。
2 Bootloader 刷写介绍
接下来就主要从OEM需求角度来了解Bootloader的刷写功能,OEM主要对Bootloader的下载模式相关的需求,通常采用CAN或以太网通讯。下面以基于CAN通讯来介绍Bootloader的软件刷写功能,通常需要考虑以下几个点:
2.1 刷写的通讯
基于CAN通讯的ECU软件刷写时,不能被同一网络的其他节点影响,也不能影响到同一网络的其他节点,因此需要采用点对点刷写更新的方式,从而可以看到:在Bootloader刷写规范中,每个ECU 都定义了相关的CAN ID用来软件刷写,通常包括2个接收ID(功能寻址ID和物理寻址ID)和1个发送ID,以此来确保点对点通讯,和其他ECU互不干扰。软件刷写本质是主ECU 把数据有效地传输给从ECU, 然后从ECU 把数据存入自身的存储空间Flash 。为了确保这个过程的数据正确性和有效性,因此对数据及其传输有严格的要求,包括需要确认数据来源的ECU是否已被授权,需要验证传输过程数据有无错误,是否被篡改等操作。因此需要基于ISO14229-1协议的UDS服务来实现主从ECU的数据交互,即通过握手协议和例程控制等服务来实现。2.2 Bootloader的进入方式Bootloader一般有几种进入方式,包括:

    从Application software主动跳转到Bootloader。
    Application software运行异常,自动复位到Bootloader。
    上电启动时,Bootloader 检测Application software无效而停留在Bootloader。

OEM所提的刷写需求主要是针对第一种,规定在Application software中先进行session跳转,再身份验证,最后通过编程会话服务实现跳转到Bootloader。具体实现情况是这样:Application software检测到一定的条件后,就会对某些寄存器或Bootloader 可读的内存空间进行写Flag和Reset操作,Reset完成后进入到Bootloader,从而Bootloader能识别到此次不需要跳转至Application software。

2.3 对Bootloader的需求
OEM对Bootloader需求基本涵盖下列几个方面,包括:

    多次数据更新,差分更新,刷写速度,传输速度

    身份验证,数据格式的标准化,数据的完整性和有效性校验
    对Application software的有效性校验等
当然OEM可能还会对上面几个方面提更细化的需求。OEM一般定义软件刷写过程有3个步骤:前处理,刷写和后处理。前处理主要是避免其他节点或自身节点对软件刷写过程的影响,以及避免自身节点对其他节点的影响。
一篇易懂的Bootloader小结w2.jpg
刷写主要是通过多个UDS服务命令进行点对点通讯,其目的是保证发送数据的ECU可靠,数据传输过程的可靠,数据的有效性和安全性。
一篇易懂的Bootloader小结w3.jpg
后处理主要是解除自身的特殊状态,更新配置参数等,比如ECU需要做Bootloader和Application software的相互校验,包括Bootloader需要判断Application software是否有效,无效则停留再Bootloader模式,Application software运行无效时,能进入Bootloader模式。
一篇易懂的Bootloader小结w4.jpg

3 Bootloader的设计与实现
仅运行Bootloader通常只需要一个无限循环和中断系统顺序执行即可,main函数的实现也不复杂,只需要判断是否进入application software,如果不进,就只需要监测通讯接口的数据,进行相应的操作即可。
一篇易懂的Bootloader小结w5.jpg
基于CAN 通讯的刷写速度要求很快,因此Bootloader的CAN收发会采用中断模式。比较重要的CAN 通讯参数有波特率,收发报文ID和中断模式,因为它们是需要和主ECU进行配合。这些CAN 通讯参数根据芯片手册的原理进行配置,比如波特率需要配置如下关键参数:
一篇易懂的Bootloader小结w6.jpg
另外,对于Bootloader来说,只需要三个接口:初始化,接收,发送。  
一篇易懂的Bootloader小结w7.jpg

刷写的软件通常是Hex 或S19格式,code 和 data 可以根据主机厂需求分为两个或多个Hex,所以这里需要对Pflash 和 DFlash 都进行操作。对于Bootloader来说,需要的接口擦除和写入,其接口函数定义如下:
一篇易懂的Bootloader小结w8.jpg

一篇易懂的Bootloader小结w9.jpg

另外,也需要需要对数据进行CRC校验,需要对数据包进行数据解密用到的加密算法等。总之,根据OEM具体需求来实现,比如配置参数的交换,与APP软件的有效位相互校验等需求。到此以上就给出了Bootloader内容的大致介绍。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 04:44 , Processed in 0.332883 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.