当前位置:首页 > 汽车电子 > 汽车电子技术文库
[导读] 随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大。消费者对于汽车节能(经济和法规对排放的要求)型、舒适性、互联性、安全性(功能安全和信息安全)的要

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

以及Keil的Motorola S-Record to BINARY File Converter

四、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)操作。

Tips:

a、MCU片上集成的NVM中EEPROM/D-Flash和C_Flash/P-Flash一般属于不同的block,所以可以直接在Flash上运行NVM驱动对EEPROM/D-Flash进行擦除和编程操作;

b、NVM驱动一般都是通过运行一个NVM command序列,在其中通过NVM控制器寄存器给出不同的NVM操作命令代码、NVM编程数据和目标地址的方式完成,典型的NVM command序列如下(Freescale的S12(X)系列MCU Flash write command 序列):

c、由于NVM的工作速度一般较CPU内核频率和总线频率低,所以运行NVM驱动前必须对NVM进行初始化,将设置分频器其工作频率设置为正常工作所需频率范围;

d、MCU片内的NVM同一个block上不能运行NVM的驱动对其自身进行擦除和编程操作,否则会传出read while write的总线访问冲突(每个NVM block只有一条数据总线,一个时刻只能进行读出或者写入,不支持同时读出和写入)。因此对于仅有一个block Flash的MCU来说,就必须在RAM中调用其NVM驱动,来对其自身进行擦除和编程操作,同时在launch Flash command到等待command完成期间必须关闭CPU全局中断,禁止外设中断响应,否则取中断向量和运行中断ISR都会访问Flash。要使能中断,就必须将中断向量表偏移到RAM或者NVM block(EEPROM/D-Flash)并将响应的中断ISR也拷贝到其他RAM或者NVM block上(当然该中断向量表也必须更新指导新的中断ISR);

e、由于以上b的要求,通常需要将bootloader的NVM驱动拷贝到MCU的RAM中运行,其可以将其完成的NVM拷贝到RAM中运行,也可以只拷贝NVM command launch到等待command完成的几条指令到RAM执行即可,因为NVM驱动中其他操作(比如填写NVM操作命令、写入编程地址和数据等)并不会往占用数据总线上往NVM中写入数据;

f、NVM的驱动程序驻留在Flash中,如果出现堆栈溢出等意外程序跑飞意外运行NVM驱动程序则会造成NVM内容意外擦除丢失或者修改的情况。因此需要对关键数据或代码(比如bootloader本身)进行保护以防止意外修改,或者更为安全的方法是不将NVM驱动程序存放在NVM中,而是在bootloader最开始通过上位机将其下载到RAM中运行,bootloader结束后将该区域RAM清除,从而避免由于意外运行NVM驱动程序造成的NVM数据丢失和修改。(PS:后续我会专门写一篇文章介绍相关的方法,尽请关注阅读)

g、一般MCU厂商都会给出其MCU的NVM驱动库,用户可以使用该类库实现NVM操作,如果是Freescale/NXP的汽车级MCU,还可以使用CodeWarrior IDE集成的Processor Expert生成相应的NVM驱动程序;

五、bootloader开发的其他要点

a、bootloader与应用程序的关系

bootloader和应用程序分别是两个完整的MCU软件工程,各自都由自己的启动代码、main()函数、链接文件、外设驱动程序和中断向量表;

因此bootloader和应用程序的链接文件中,对NVM的地址空间分配必须分开独立,不能重叠(overlap),但其RAM分配没有约束,两者都可以使用整个RAM空间,因为跳转到应用工程后,

[1] [2]

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

应用材料公司实现营收66.5亿美元。基于GAAP(一般公认会计原则),公司毛利率为47.4%,营业利润为19.1亿美元,占净销售额的28.8%,每股盈余(EPS)为2.06美元。

关键字: 半导体 电动汽车 清洁能源

当地时间5月15日下午,台积电位于美国亚利桑那州北凤凰城的厂区,突然发生爆炸,造成至少1人重伤。目前,现场详细情况仍待进一步确认。

关键字: 台积电 半导体 晶圆厂

● 创新实验室V2.0设备再更新、能力再升级; ● 助力产业升级,主打开放性,先进性,本地化协作共赢; ● 线上线下多元化互动,直击测试痛点。

关键字: 半导体 功率器件 测试测量

随着向无碳社会的推进以及能源的短缺,全球对可再生能源寄予厚望,对不断提高能源利用效率并改进逆变器技术(节能的关键)提出了更高要求。而功率元器件和模拟IC在很大程度上决定了逆变器的节能性能和效率。通过在适合的应用中使用功率...

关键字: 半导体 功率元器件 模拟IC

深爱人才,共赴"芯"程 深圳2024年5月15日 /美通社/ -- 5月11日,深圳国资国企"博士人才荟"半导体与集成电路产业专场活动在深圳市重投天科半导体有限公司(简...

关键字: 半导体 集成电路产业 BSP 人工智能

首尔2024年5月14日 /美通社/ -- 盈球半导体科技有限公司(SurplusGLOBAL),传统半导体设备领域的领军企业,在"以传统半导体设备和零配件建设绿色...

关键字: 半导体 AC 零部件 半导体设备

5月15日消息,谷歌在其2024年I/O开发者大会上宣布了一项名为“AI Overviews(AI概览)”的新搜索体验功能。

关键字: 谷歌 AI 芯片 半导体

5月15日消息,谷歌在I/O大会上发布了第六代TPU芯片Trillium,并透露能够在明年初用上英伟达最新的Blackwell架构GPU。

关键字: 谷歌 AI 芯片 半导体

在AI时代,技术变化日新月异,为了更好地服务客户、共同创造未来,我们诚邀您参加新唐科技 2024 未来创新峰会,与我们一起探索人工智能、智能工业物联网、汽车电子、新能源等领域的最新技术和发展趋势

关键字: AI 新能源 汽车电子

战略投资和持续进展为未来增长铺平道路

关键字: 半导体 电气化 数字化
关闭
关闭