目录
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)操作。
- 我的微信
- 这是我的微信扫一扫
-
- 我的微信小程序
- 我的微信小程序扫一扫
-
评论