汽车boot loader开发要点

2020年4月26日12:56:12 发表评论 45 次浏览

1. Bootloader 的功能

Bootloader,顾名思义,就是驻留在 ECU 非易失性存储器中的一段程序加载代码,每次 ECU 复位后,都会运行 Bootloader。它会检查是否有来自通信总线的远程程序加载请求,如果有,则进入 Bootloader 模式,建立与程序下载端(通常为 PC 上位机)的总线通信并接收通信总线下载的应用程序、解析其地址和数据代码,运行NVM(None Volatile Memory--非易失性存储器)驱动程序,将其编程到 NVM 中,并校验其完整性,从而完成应用程序更新。如果没有来自通信总线的远程程序加载请求,则直接跳转到应用程序复位入口函数(复位中断 ISR,也称作 Entry_Point()--使用Processor Expert 的 CodeWarrior 工程或者 Startup()函数--普通 CodeWarrior 工程),运行应用程序。

基于此,汽车 ECU 的 Bootloader 三大主要功能如下:

  • 与远程程序下载主机(Bootloader host)建立可靠的总线通信以获取要更新应用程序;
  • 解析应用程序编程文件(S19/HEX/BIN)获得其在 NVM 中的地址和程序代码及数据;
  • 运行 NVM 驱动将应用程序的代码和数据编程到 NVM 中并校验;

2. 如何建立可靠的总线通信?

汽车 ECU 常见的数据总线有 CAN 和 LIN,因此通常汽车 ECU 的 Bootloader 都是通过 CAN 或者 LIN 下载数据的。当然也可以基于其他总线,比如基于 SPI 总线或者 I2C总线(典型如一些带有安全监测的功能安全 ECU,通过主 MCU 对功能安全监测 MCU 的程序进行升级)以及以太网(基于 Enternet 通信的中控或者全液晶仪表的 ECU 以及下一代高速网关和 ADAS ECU)。

3. 解析编程文件(S19/HEX/BIN)

不同的 MCU 软件开发 IDE 编译链接生成的编程文件格式可能不同,但 S19、 HEX 和BIN 文件之间是可以相互转化的,所以只需要在 Bootloader 中开一种编程文件的解析程序就可以了,其他的可以使用相应的转换工具(convert tool)在上位机上进行转换;

对编程文件的解析,目的在于获得应用程序的程序代码和数据及其在 NVM 中的存储地址;

4. NVM 驱动程序开发

ECU 的 NVM 一般包括其 MCU 片内集成的用于存放数据的 EEPROM 或者 Data-Flash 和用于存储程序代码/数据的 Code-Flash/Program-Flash 以及 MPU 扩展的片外 NOR Flash或者 NAND-Flash; NVM 驱动程序包括对 NVM 的擦除(erase)、编程(program)和校验(verify)等基本操作,也包括对 NVM 的加密(secure)/解密(unsecure)和加保护(protection)/解保护(unprotection)操作。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信小程序
  • 我的微信小程序扫一扫
  • weinxin
lichongyang

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: