简介:
Bootloader是独立于应用程序的一个项目工程,其提供应用程序离线升级的功能,如果没有Bootloader就不能进行程序升级,如果应用软件有缺陷只能拆盖通过仿真器进行烧写(更有严重者甚至需要把硬件看门狗电阻去掉),所以Bootloader使软件更加易于维护。
设计Bootloader程序时,一般需要考虑如下3个要点:
- 设计Bootloader与升级上位机间的数据交互协议
- 提供内部Flash的相关操作(擦除、写入、读取)
- 提供程序跳转功能
其中第1点是需要我们发大力气去设计的,第2、3点只要查询相关手册就能实现。
在本次的Bootloader程序设计中,数据交互协议将采用广泛用于汽车电子领域的ISO 15765-2和ISO 14229-1协议,底层将采用CAN和串口。
Bootloader程序升级流程:
本Bootloader升级流程分为3个阶段,分别为:1、前处理阶段;2、主处理阶段;3、后处理阶段。下面将分别介绍这3个升级流程模块。
1、前处理阶段:
编程前处理的对象是应用程序,而不是Bootloader程序,其主要是告诉应用程序我要进行程序升级,你看当前状态是否满足升级的条件,如果满足则关闭所有ECU的DTC诊断并静默所有ECU应用报文的收发,否则退出升级流程,其升级流程如下所示:
2、主处理阶段
主处理阶段是程序升级的最重要阶段,其主要进行程序升级数据传输和Flash擦写等操作。其中有一个比较难处理的点是,应用程序跳转到Bootloader程序并停留在Bootloader程序中进行程序升级。一般我们的操作是在RAM具体空间中分配一个4字节的整形数据ProgramFlag,在收到进入编程会话的指令后,设置ProgramFlag的值为0xaa55aa55,然后复位ECU,Bootloader程序启动读取ProgramFlag的值,如果为0xaa55aa55则等待进一步的程序升级流程。其流程如下所示:
3、后处理阶段
后处理阶段主要用于升级成功后恢复CAN总线上的数据传输及恢复其它ECU的DTC诊断。
程序升级时会话跳转流程图如下所示: