汽车电子中BootLoader的理解

什么是BootLoader

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序

以上来自百度百科,那么汽车电子中,某些ECU要满足OTA的需求,也需要具备BootLoader的功能。

简单概括一下汽车电子中的BootLoader,即Boot:对App的引导,使PC指针跳转到App的Main函数。Loader:通过某种协议将新的App程序下载到Flash中。

相关法规或者是客户要求,在Boot或者是Loader的过程中,需要对App进行验证

这个有点类似于Android的“线刷”

Boot的实现

1. 设置地址

BootLoader程序设置为0x00000000;App程序根据芯片手册自己去定义一个,我这里以0x00010000为例。

每个编译器设置的方法不同,同一个编译器也可能有不同方法,这个请自行搜索。

2. 判断是否可以跳转到App

正常上电,代码会跑到BootLoader的main函数,在这个函数中我们需要做硬件初始化(Can、定时器等),协议栈的初始化等等,然后就是要判断当前是否要跳转到App还是驻留在BootLoader中等待App的下载。

最基本的判断条件就是当前的Falsh中有没有App或着App是否有效,比如你在每一次通过BootLoader下载App成功之后都向某一片固定的Flash写一串数据,然后在每一次启动BootLoader都会判断这一片Flash中有没有这个数据即可,前提是每一次下载之前都会清空Flash,一般不清空写不进去。具体方法有很多,更为安全一点的比如每次启动Boot都对App程序进行一次CRC校验,麻烦一点 稍微有点耗时

除此之外要判断是不是外部有下载请求(来自诊断仪或其他上位机)

这里又要分两个,当App运行正常时,判断是不是用户在App中进入了编程会话,并且发送了重启指令,怎么实现 和上述方法一致(在APP程序重启之前,判断当前是否是编程会话,如果是则向Flash中存标志位)

当App不正常时,比如我们的App一运行就跑飞了,我们可以在BootLoader中设置一个强刷指令,当BootLoader跳转的App之前收到了这一帧指令(我这里是通过can)就驻留在Boot里面等待新的App程序刷入,当然时间要把控好,不可以太长,等待100ms足够了

3. 跳转

Easy

(*(void (*)(void))(APP_StartAddr))();

当然在此之前你要做点事情,例如关闭所有中断

Loader的实现

1. 前提

前提是你已经驻留在BootLoader里面。一般有三种情况没有App、从App跳转过来下载新的App、App无效通过强刷指令驻留在BootLoader。

2. 请求下载

UDSONCAN的0x34服务,具体详见ISO-14229

3. 下载

UDSONCAN的0x36服务,具体详见ISO-14229

4. 请求退出下载

UDSONCAN的0x37服务,具体详见ISO-14229

5. 校验

UDSONCAN的0x31服务,具体详见ISO-14229

这个0x31服务在UDS中定义的比较广泛,他就类似于让ECU执行一段特殊的代码,它可以是一个测试用例,比如通过0x31服务让ECU某一个灯亮一下,也可以用来校验CRC,只要通讯双方的格式对的上就可以。

除了程序CRC校验(程序完整性检查)之外,还可以有程序依赖性检查(例如检查常电电压等)

6. 重启

拓展

  1. Flash驱动独立下载

    正常通过BootLoader烧录App的时候,只需要拿到App的hex文件即可,但是市场上有很多ECU是将Flash驱动和Bootloader分开。

    当需要下载App的时候,要先下载Flash驱动,下载到RAM里,再通过这个Flash驱动把App下载到Flash里,这么做的目的是对Falsh的保护。也就是说一次成功的下载需要两份Hex文件。

  2. 两级Boot

    在BootLoader中可以更新BootLoader,暂时还没有实现过,有待尝试

以上是我对BootLoader的理解,望指正

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 汽车电子控制单元(ECU)是现代汽车必不可少的电子设备之一,它负责管理发动机、变速器、车辆稳定性控制系统等多个重要部件。而ECUbootloader则是支持ECU软件更新的重要组成部分,它具有一个特殊的启动程序,用于将新的软件加载到ECU。 ECU bootloader的工作原理主要是将新的软件程序通过CAN总线或其他通信方式,发送到ECU进行更新。具体步骤如下:首先,ECU bootloader会检查当前系统的软件版本是否需要更新。如果需要更新,则它会在系统启动时自动进入bootloader模式,并等待接收新的软件程序。接下来,ECU bootloader将通过通信接口接收新的程序,并将其存储在特定的flash存储器。然后,ECU bootloader会进行程序校验和解压缩等动作,以确保接收到的程序没有任何问题。最后,ECU bootloader将新的程序加载到内存,并将控制权交给新程序,完成软件更新过程。 在进行ECU bootloader的开发时,需要注意以下几个要点:首先是要选择适当的存储器,并确定软件程序的大小。其次,需要实现通信接口,确定通信协议和数据传输方式。然后,需要设计和实现程序校验和解压缩等安全和稳定性相关的功能。最后,还需要进行一系列的测试和验证,以确保软件更新功能的正确性和可靠性。 总之,ECU bootloader是现代汽车非常重要的一个电子组件,它支持汽车ECU软件更新,保证了车辆的正常运行和安全。在进行ECU bootloader开发时,需要充分考虑软件大小、通信接口、安全性等方面的因素,确保实现出稳定可靠的功能。 ### 回答2: 汽车电子ECU Bootloader是一种可以更新车辆控制器软件的重要工具,本文将介绍汽车电子ECU Bootloader的工作原理和开发要点。 汽车电子ECU Bootloader的工作原理主要是通过分区管理技术将存储器划分为Bootloader和应用程序两个区域,Bootloader负责车辆控制器的引导和固件更新,而应用程序则实现车辆控制器的各项功能。当车辆控制器出现故障或升级需要时,Bootloader通过CAN总线接受来自外部设备的控制命令,对存储器的数据进行读写操作,完成软件更新等任务。 开发汽车电子ECU Bootloader需要考虑以下几个要点: 1.安全性:保证Bootloader在更新过程不会遭到外部攻击或出现故障,同时需要遵守汽车规范和安全标准,确保车辆控制器的安全性和稳定性。 2.可靠性:Bootloader需要对存储器的数据进行正确的读写操作,避免数据丢失或损坏等可能出现的问题,同时需要实现固件校验技术,确保固件的完整性和正确性。 3.灵活性:Bootloader需要支持多种协议和接口,以适应不同车辆控制器的要求,同时需要支持多种固件格式,以避免与其他系统不兼容的问题。 4.可测试性:Bootloader需要为软件开发人员提供方便的测试和调试工具,以便快速迭代和改进,同时需要支持错误日志和故障诊断技术,以帮助分析和解决问题。 综上所述,汽车电子ECU Bootloader是进行车辆控制器软件更新和管理的重要工具,其开发需要考虑多个要点,包括安全性、可靠性、灵活性和可测试性等,以确保车辆控制器的安全性、稳定性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值