CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
Bootloader介绍
一.引言
二.控制器应用程序升级的基本方式
三.基于CAN的Bootloader实现过程
-3.1.主控芯片FLASH划分
-3.2.Bootloader程序
-3.3.通信协议
-3.4.上位机软件
四.Bootloader小结
回到顶部
Bootloader介绍
一.引言
二.控制器应用程序升级的基本方式
三.基于CAN的Bootloader实现过程
-3.1.主控芯片FLASH划分
-3.2.Bootloader程序
-3.3.通信协议
-3.4.上位机软件
四.Bootloader小结
回到顶部
# Bootloader介绍 ## 一.引言
大多数控制器产品防护等级要求高,在需要进行应用程序升级时要求不拆卸,不开盖。基于CAN/CANFD总线的控制器Bootloader程序,满足了控制器不开盖即可进行应用程序升级的要求,具有较大的实用价值。 ## 二.控制器应用程序升级的基本方式
大多数主控芯片都支持三种类型的应用程序升级方式:通过调试接口升级;通过芯片内置Bootloader功能升级;通过在应用编程即二次Bootloader升级。 1. 通过JTAG调试接口来刷写程序,JTAG接口刷写速度快,但是JTAG接口占用较多芯片管脚并需要专门的静电防护,一般不会把JTAG接口做到控制器的对外接插件上,所以JTAG接口只适合于软硬件调试阶段使用,不适合控制器产品上使用。 2. 通过主控芯片内置Boot ROM功能来刷写程序,主控芯片内置Boot ROM功能提供了并行IO,SCI,SPI,I2C,CAN,RAM,FLASH等多种启动方式,但是使用Boot ROM需要配置芯片的多个IO管脚与寄存器并且刷写程序的数据传输方式是固化的,无法自定义数据传输过程,所以Boot ROM功能只适合于软硬件调试阶段或者控制器生产测试阶段使用,不适合控制器产品上使用。 3. 使用IAP在应用编程,即二次Bootloader来刷写应用程序,IAP将主控芯片的FLASH分为两个部分,一部分存放Bootloader程序,此部分程序固化在FLASH中,另一部分存放应用程序,应用程序根据不同的需求可能要经常升级,升级应用程序时不会影响Bootloader程序。IAP在应用编程启动方式与普通应用程序一样都从芯片FLASH启动,使用CAN总线传输数据不需要增加专门的硬件接口,是一种极具实用价值的控制器应用程序升级方式。 本文所述基于CAN/CANFD总线的Bootloader属于IAP在应用编程。 ## 三.基于CAN/CANFD总线的Bootloader实现过程
基于CAN/CANFD总线的控制器Bootloader基本组成如图3-1所示,包括下位机控制器的Bootloader程序与应用程序,上位机软件以及上下位机之间的通信协议。 ![](images/BootloaderComposition.jpg) 图3-1 基于CAN/CANFD总线的Bootloader组成 ### 3.1.主控芯片FLASH划分
二次Bootloader需要将主控芯片的FLASH分为两个部分,一部分存放Bootloader程序,另一部分存放应用程序。比如某主控片上FLASH分为8个扇区,FLASHA-FLASHH,本文中Bootloader程序位于FLASHA中,应用程序位于FLASHC-FLASHH中。 FLASH划分通常通过链接文件实现,比如.cmd文件或者.lcf文件,这些文件会对整个主控芯片的所有RAM、ROM进行分割,并为每个区域指定特定的功能。 ### 3.2.Bootloader程序
Bootloader程序用于在应用程序需要升级时接收、解析CAN数据并将数据写入FLASH中。Bootloader程序简易流程图如图3-2所示。 ![](images/BootloaderFlow.jpg) 图3-2 Bootloader程序简易流程图 Bootloader程序的主要功能如下。 1. 判断是否需要升级应用程序,判断的方法为利用主控芯片的一个GPIO管脚(或者FLASH中一个地址的数据),当管脚输入为高电平时认为不需要升级应用程序,跳转到用户程序;当管脚输入为低电平时认为需要升级应用程序,进入到后续Bootloader程序。 2. 跳转到应用程序,在前面章节主控芯片FLASH划分部分,应用程序的起始地址已经被固化,那么在Bootloader程序中只需要跳转到这个地址即可实现跳转到应用程序的功能。具体跳转代码需要查阅主控芯片参考手册。 3. 接收、解析CAN数据并保存在RAM中,按照通信协议的规定将上位机发送的CAN总线数据接收、解析并按照一定规则存储在RAM中,由于主控芯片的RAM空间有限,对于较大的应用程序,需要分包处理数据。 4. 调用FLASH驱动擦除并刷写FLASH,FLASH驱动是主控芯片厂家提供的FLASH烧写函数库,可以实现在线烧写FLASH。FLASH驱动可以实现FLASH擦除、编程、读取、校验等各种烧写FLASH必要的功能。 ### 3.3.通信协议
CAN总线通信可靠,抗干扰能力强,但是由于Bootloader需要传输至少几千帧CAN报文,因此存在漏帧或者通信中断的可能性,为了防止漏帧或者通信中断造成应用程序升级失败,需要制定通信协议来处理漏帧或者通信中断造成的故障。 在实际项目中,可以自定义通信协议,也可以参考一些行业通用协议比如UDS协议。本文使用UDS协议作为通信协议,详细通信协议请参见《[刷写协议](./communicationprotocol.html)》。 ### 3.4.上位机软件
上位机软件作为Bootloader功能的人机接口,具备S19/HEX文件选择与解析,请求连接、擦除与刷写下位机,数据传输,故障处理等功能。 上位机软件的主要功能如下。 1. S19/HEX文件解析,上位机软件从S19/HEX文件中提取有用的地址信息与数据信息,按照通信协议的规定将数据填充到CAN报文的数据场中。 2. 请求连接、擦除与刷写下位机,按照通信协议的规定实现连接、擦除与刷写下位机,引导用户按照指定步骤来使用上位机刷写软件。 3. 数据传输与故障处理,将待刷写数据按照通信协议的规定依次发送到CAN总线,当出现断线等故障时,停止发数据并报故障,确保所有待刷写数据全部正确发送。 本文使用MeCa软件作为《[刷写软件](./burner.html)》,软件具备以上主要功能。 ## 四.Bootloader小结
本文介绍了一种基于CAN/CANFD总线的控制器Bootloader,利用Bootloader可以在不拆卸,不开盖,不使用特殊设备的前提下进行应用程序升级,快速、简单、可靠,非常适合于控制器产品使用,解决了控制器装车或者装上系统之后升级困难的问题,提高了控制器的可维护性与可扩展性。