首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

汽车电子ECU bootloader工作原理及开发要点有哪些?本文告诉你

汽车电子ECU bootloader工作原理及开发要点有哪些?本文告诉你

[导读]MCU内部集成的逻辑功能外设随着半导体技术的不断进步(按照摩尔定律),变得越来越多,存储器也越来越大。消费者对于汽车节能(经济和法规对排放的要求)型、舒适性、互联性、安全性(功能安全和信息安全)的要求越来越高,
MCU内部集成的逻辑功能外设随着半导体技术的不断进步(按照摩尔定律),变得越来越多,存储器也越来越大。消费者对于汽车节能(经济和法规对排放的要求)型、舒适性、互联性、安全性(功能安全和信息安全)的要求越来越高,特别是近年来新能源电动车、车联网和自动驾驶技术的兴起,更大大加速了汽车电子技术的发展。汽车电子ECU(Electronic Control Unit--电控单元)集成的功能日益复杂,为了应对软件远程(在线)功能升级(增加新的功能)和bug修复的需求、对bootLoader(启动加载程序)的需求越来越多。本文详细介绍了汽车电子ECU bootloader的一般性工作原理和开发要点,其适用于所有的汽车电子ECU bootloader开发。


一、bootloader的功能
BootLoader,顾名思义,就是驻留在ECU非易失性存储器中的一段程序加载代码,每次ECU复位后,都会运行bootloader。它会检查是否有来自通信总线的远程程序加载请求,如果有,则进入bootloader模式,建立与程序下载端(通常为PC上位机)的总线通信并接收通信总线下载的应用程序、解析其地址和数据代码,运行NVM(None Valitale Momory--非易失性存储器)驱动程序,将其编程到NVM中,并校验其完整性,从而完成应用程序更新。如果没有来自通信总线的远程程序加载请求,则直接跳转到应用程序复位入口函数(复位中断ISR,也称作Entry_Point()--使用Processor Expert的CodeWarrior 工程或者Startup()函数--普通CodeWarrior 工程),运行应用程序。
基于此,汽车ECU的bootloader三大主要概念如下:
与远程程序下载端建立可靠的总线通信以获取要更新应用程序;
解析应用程序编程文件(S19/HEX/BIN)获得其在NVM中的地址和程序代码及数据;
运行NVM驱动将应用程序的代码和数据编程到NVM中并校验;
二、如何建立可靠的总线通信?
汽车ECU常见的数据总线有CAN和LIN,因此通常汽车ECU的bootloader都是通过CAN或者LIN下载数据的。当然也可以基于其他总线,比如基于SPI总线或者I2C总线(典型如一些带有安全监测的功能安全ECU,通过主MCU对功能安全监测MCU的程序进行升级)以及以太网(基于Enternet通信的中控或者全液晶仪表的ECU以及下一代高速网关和ADAS ECU)。
TIps:
a、不同的ECU通信总线不一样,具体需要用到某种通信总线取决于实际应用;
b、通信总线有ECU的MCU外设实现,所以在bootloader中必须开发相应的通信总线外设驱动程序,实现基本的数据发送和接收功能;
c、为了保证通信的可靠性,必须开发一个基于通信总线完善的通信协议,应用程序下载端和bootloader之间需要建立请求命令(request command)、确认(acknowledge)、等待(block wait)、错误重传(error re-send)等机制----bootloader根据不同的请求命令完成不同的任务并确认操作是否完成(ACK)以及数据是否正被确完整的传输,若出现数据错误(通过校验和或者ECC实现),需要进行自动重传;
d、应用程序下载端通过需要在PC上基于VC或者C#、QT、Labview等开发GUI软件,实现c中要求的总线通信协议,一般在其底层都是通过调用相应的总线设备,如USB转CAN/LIN的转发器设备的动态库(DLL)的API接口来实现数据的收发,相应的总线USB转发设备都会提供相应的驱动库(DLL)。因此bootloader开发者一般还需具备一定的PC上位机软件开发能力;
e、为了实现数据的可靠传输,一般在总线通信协议中添加信源编码,即在发送是对有效数据进行校验和或者ECC计算并将结果在通信数据帧中和有效数据一起发送,bootloader接收端,接收到数据帧后对有效数据域进行发送端同样的校验和或者ECC计算,得出结果与接收到的校验和或者ECC计算结果值进行比较从而判断数据的完整性。应用程序编程文件(S19/HEX/BIN)都具有相应的校验和机制,所以可以采取直接传送程序编程文件行的方式;否则,用户需要在上位机软件中首先解析编程文件,再将其中的地址和数据及代码封装打包成某种定制的通信协议,在bootloader中还得对其进行解包,这样一来,略显麻烦,但有些主机厂(Car OEM)为了知识产权保护,有自己的bootloader协议,这种情况下,bootloader开发者就必须按照主机厂的要求来开发;
f、一些正规的大主机厂要求其ECU供应商开发放入ECU bootloader必须基于UDS等总线诊断协议,在UDS中规定了相应的CAN ID给bootloader使用,那么久必须在该类ECU中的bootloader工程中加入相应的UDS协议栈;

三、解析编程文件(S19/HEX/BIN)
不同的MCU软件开发IDE编译链接生成的编程文件格式可能不同,但S19、HEX和BIN文件之间是可以相互转化的,所以只需要在bootloader中开一种编程文件的解析程序就可以了,其他的可以使用相应的转换工具(convert tool)在上位机上进行转换;
对编程文件的解析,目的在于获得应用程序的程序代码和数据及其在NVM中的存储地址;
为了解析编程文件必须先了解其中的编码格式和原理,常用的S19、HEX和BIN文件的格式说明请参考如下维基百科链接:
S19文件:https://en.wikipedia.org/wiki/SREC_(file_format)
HEX文件:https://en.wikipedia.org/wiki/Intel_HEX
BIN文件:https://en.wikipedia.org/wiki/Binary_file
TIps:
S19和HEX文件都是可以直接使用文本编辑器(比如记事本,notepad++)打开的,只需要将包含地址和数据代码的S1、S2和S3开始的S19文件行合并即可,可以手动拷贝,也可以编写window批处理脚本来处理;当然也有专门的可以支持两个S19文件的合并,网上可以找到很多开源软件,比如常见的Srecord等;
MCU的软件开发IDE一般都集成不同编程文件之间的转换工具:比如S32DS的objcopy(Create Flash Image )
四、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)操作。
返回列表