ECU Bootloader程序设计

简介:

Bootloader是独立于应用程序的一个项目工程,其提供应用程序离线升级的功能,如果没有Bootloader就不能进行程序升级,如果应用软件有缺陷只能拆盖通过仿真器进行烧写(更有严重者甚至需要把硬件看门狗电阻去掉),所以Bootloader使软件更加易于维护。

 

设计Bootloader程序时,一般需要考虑如下3个要点:

  1. 设计Bootloader与升级上位机间的数据交互协议
  2. 提供内部Flash的相关操作(擦除、写入、读取)
  3. 提供程序跳转功能

其中第1点是需要我们发大力气去设计的,第2、3点只要查询相关手册就能实现。

 

在本次的Bootloader程序设计中,数据交互协议将采用广泛用于汽车电子领域的ISO 15765-2和ISO 14229-1协议,底层将采用CAN和串口。

Bootloader程序升级流程:

       本Bootloader升级流程分为3个阶段,分别为:1、前处理阶段;2、主处理阶段;3、后处理阶段。下面将分别介绍这3个升级流程模块。

 

1、前处理阶段:

编程前处理的对象是应用程序,而不是Bootloader程序,其主要是告诉应用程序我要进行程序升级,你看当前状态是否满足升级的条件,如果满足则关闭所有ECU的DTC诊断并静默所有ECU应用报文的收发,否则退出升级流程,其升级流程如下所示:

ECU Bootloader程序设计

2、主处理阶段

主处理阶段是程序升级的最重要阶段,其主要进行程序升级数据传输和Flash擦写等操作。其中有一个比较难处理的点是,应用程序跳转到Bootloader程序并停留在Bootloader程序中进行程序升级。一般我们的操作是在RAM具体空间中分配一个4字节的整形数据ProgramFlag,在收到进入编程会话的指令后,设置ProgramFlag的值为0xaa55aa55,然后复位ECU,Bootloader程序启动读取ProgramFlag的值,如果为0xaa55aa55则等待进一步的程序升级流程。其流程如下所示:

ECU Bootloader程序设计

 

3、后处理阶段

后处理阶段主要用于升级成功后恢复CAN总线上的数据传输及恢复其它ECU的DTC诊断。

ECU Bootloader程序设计

程序升级时会话跳转流程图如下所示:

ECU Bootloader程序设计