APP下载

基于MC9S12XEP100的BootLoader设计与实现

2018-10-21王志强

汽车实用技术 2018年17期
关键词:安全机制CAN总线

王志强

摘 要:程序的引导加载功能已是汽车电控单元中必不可少的部分,基于飞思卡尔16位处理器MC9S12XEP100,采用CAN总线技术,设计了一种BootLoader。介绍了BootLoader的实现方法,包括底层驱动构成、引导机制设计、诊断模块设计、存储模块设计以及FLASH安全机制设计等。实验结果表明,BootLoader能够正确引导程序运行,方便准确的进行控制器软件升级。

关键词:CAN总线;Flash模块;BootLoader;电控单元;安全机制

中图分类号:U462.2 文献标识码:B 文章编号:1671-7988(2018)17-190-04

Abstract: Bootloader function is one of the essential function of embedded system. A BootLoader is designed based on the 16-bit Freescale MCU MC9S12XEP100 and CAN bus. And the application of Bootloader is introduced, which includes driver module design, diagnostic module design, BOOT method design, memory module design, and Flash protected design. Experimental results show that Bootloader could boot the application accurately, downloads and upgrades correctly.

Keywords: CAN bus; BootLoader; FLASH Module; ECU; Safety

CLC NO.: U462.2 Document Code: B Article ID: 1671-7988(2018)17-190-04

1 引言

汽车电子电控单元ECU的开发周期较长,并且汽车电子产品开发对安全性、可靠性的指标要求很高。为了方便软件更新,同时避免对电控单元硬件产品造成破坏,汽车行业按照各种标准采用专门的诊断测试设備,通过标准的通信接口对电控单元控制程序或者数据进行更新。Bootloader是为了完成上述功能,固化在电控单元内部Flash 特定位置的程序,通过特定的通信协议接收上位机客户端发送的程序数据,并且把程序数据烧写到电控单元中Flash 特定地址区域,以完成应用程序及数据的更新[1]。Bootloader刷写方式的结构布局图如图1所示。

本文所设计Bootloader基于CAN总线,采用飞思卡尔16位处理器MC9S12XEP100作为控制核心。MC9S12XEP100具备5路CAN总线通道,片内非易失存储器Flash达到1MB,支持在线编程,能够满足应用程序通过CAN总线下载、更新的要求,是应用广泛的汽车级处理器[2]。

2 BootLoader软件构成

BootLoader是独立于电控单元主程序的功能模块。BootLoader程序可以通过CAN总线通讯,使用上位机软件更新主程序,而不需要使用BDM接口重新加载程序,便于现场产品升级和维护[3]。本文设计的Bootloader软件程序中使用到的处理器功能有时钟、中断、FLASH和EEPROM存储器、CAN等,从软件功能上分为诊断模块、底层驱动模块、存储模块以及安全访问模块四个部分,软件的功能模块结构如图2所示。

电控单元上电后进入Bootloader程序,首先确认主程序的有效性和兼容性,包括主程序以及MAP数据是否完整,软件版本信息是否正确等,如果信息完整正确,检测通过后,将跳转到主程序入口地址。否则,退回Bootloader程序入口地址。Bootloader程序与主程序具有不同的入口地址以及存储区域[4]。Bootloader引导机制流程图如图3所示。

为防止程序发生诸如跑飞等小概率异常,在Bootloader程序中断使能后,预留一定等待时间(约50ms)以确保新的主程序可以正常更新下载到芯片中[5]。部分代码如图4所示。

3 底层驱动模块

底层驱动模块包括CAN、Flash 以及EEPROM、WatchDog、时钟、中断等。CAN总线驱动用于配置CAN总线波特率、ID等参数,实现电控单元与上位机之间的数据接收与发送,完成主程序及MAP图的传输;Flash以及 EEPROM驱动实现内部存储数据读写、擦除以及安全保护功能;WatchDog 驱动监测软件运行状态;时钟驱动用于传输层帧间隔控制和诊断层时间控制[6]。中断向量对应的跳转指令和回调函数被存储在RAM区域中的中断向量映射表中,一旦中断产生将跳转到指定的回调函数。Bootloader程序中只响应CAN接收中断以及Clock monitor复位、COP看门狗复位[7]。CAN接收中断跳转到CAN接收函数CAN_Receive(),Clock monitor复位和COP看门狗复位异常跳转到Bootloader程序入口地址。中断向量表初始化程序如图5所示。

4 存储模块

Flash中的P_Flash区域以及EEPROM中的D_Flash区域是非易失性存储介质,在写入数据之前要进行擦除。在Bootloader 进入编程模式之后,Bootloader等待接收一系列的服务命令,根据这些命令可以完成对Flash 的擦除和在线刷新。刷写的软件块包括主程序以及标定数据等。出于对程序代码安全性考虑,Bootloader以及主程序分别存储在不同的区域[8][9]。系统对D_Flash和Buffer_Ram进行了分段(Sector)处理,分别存储不同的数据,包括用户程序区、系统常量以及MAP数据区等。刷写FLASH时流程如图6示。存储区域数据划分如表1所示。

刷写程序时,上位机具有不同等级的权限,在其通过权限验证后发送请求下载命令,电控单元接收到下载请求,根据相应权限以及下载请求命令中的扇区信息,擦除相应的存储区域,同时向上位机进行应答。上位机接收到正确应答之后,按照格式向电控单元依次发送需要刷写的数据[10]。命令格式如图7所示。

5 诊断模块

诊断模块为电控单元代码更新时提供必要的诊断服务,模块主要用来实现控制、下载程序和Map图数据以及故障诊断等三个功能[11]。协议使用CAN2.0B扩展帧格式,波特率为500kbps,采用的服务功能如表2所示。

来自CAN总线的诊断服务数据通过CAN驱动程序反馈给诊断服务层,通过对上位机的不同请求的识别,诊断模块对不同的请求进行回应,调用相应的服务函数,进而完成命令所要求的动作,实现诊断服务功能。例如,下位机电控单元接收到读取EEPROM /Flash命令,则调用功能EEPROM /Flash读取函数,按照命令中的长度、地址读取数据,并将数据返回给上位机。在一条命令处理完后诊断模块再次进入等待狀态,等待新的命令。电控单元接收到上位机发送的状态切换命令,判断跳转条件允许后,置位跳转标志,然后跳转到主程序入口地址。读取数据功能程序如图9所示[12]。

6 安全保护模块

通过Flash模块本身的读写保护功能和Seed&Key算法共同实现软件的安全保护[6]。FLASH模块本身的读写保护功能可以避免对程序代码的未经授权的读取以及擦写操作。为防止Flash中的程序在未授权状态下被读出,需要将芯片设置为保密状态。涉及的寄存器是安全寄存器FSEC。在处理器复位时,FSEC寄存器从0x7FFF0F地址自动载入值。将KEYEN1/ KEYEN0位的值设为1,表示允许通过后门密钥解密。向Flash中地址为0x7FFF00-0x7FFF07区域依次写入8字节的后门密钥。将FCCOB寄存器值设为0x0C,并写入解锁密码,若密码与Flash中存放的相同,即可将芯片解密[13][14]。

Seed&Key算法通过验证操作者的身份,区别访问权限,不同等级权限对应不同范围的修改区域。操作者在某一权限下申请操作时,上位机向电控单元发送Get_Seed命令获取Seed之后,通过Seed&Key算法计算得到Key并发送到电控单元进行比较,如果相同则可对Flash相应区域的代码进行读写操作[15]。不同登录权限对应不同的Seed&Key算法以实现对不同区域操作权限的划分。

7 结束语

BootLoader 是应用程序和硬件的枢纽,负责初始化硬件和引导加载程序运行。一个功能完备的BootLoader 能够加快程序的开发。本文设计的BootLoader软件经实验验证,能够正确引导应用程序跳转运行,准确方便的实现代码数据下载以及应用程序的现场更新升级。

参考文献

[1] 周文华,管建华,刘巨江,何正胤,徐剑飞.柴油机电控高压共轨喷油系统EOL解决方案.汽车工程,2007,(9).

[2] 王宜怀,刘晓升.嵌入式系统:使用HCS12 微控制器的设计与应用[M],北京:北京航空航天大学出版社,2008.

[3] Deckardt S. Flash Kernel Programming on a HC12 MicroController [Z].Vector Informatik GmbH,2003.

[4] 孙立宁,穆春阳,杜志江,陈燕春,李骏.电控柴油机ECU 编程设备研究与开发[J].内燃机工程, 2008, 29(1).

[5] 王亚刚.嵌入式Bootloader 机制的分析与移植[J].计算机工程. 2010,36(6).

[6] Infineon Technologies.XC2000/XE166 Family Flash Programming via CAN BSL(Bootstrap Loader)[G].Infineon Manual V1.0,2009,10.

[7] 韩鸣,滕勤,唐永琪,王文平.插电式混合动力汽车发动机ECU标定系统设计,北京汽车,2011,(04).

[8] 李睿,张小明.英飞凌车用XC2000系列微控制器Bootloader设计, 汽车实用技术,2016,(7).

[9] 李会,王宜怀,王磊.基于CAN的数据无损代码更新方法设计与应用,电子技术应用,2016,(01).

[10] 孙红磊,蔡雨琦,施镇峰.TMS320C6678 DSP的加载引导研究,微型机与应用,2015,(24).

[11] 吴成加,基于CAN Bootloader的电动汽车远程数据更新系统设计,客车技术与研究,2014,(06).

[12] 张夕杰,李清政,王乔,孟奇,刘晓光.MPC5534单片机在线程序更新系统研制,国外电子测量技术 ,2013,(12).

[13] 于广,孙汉青,王志平,张宏岭.C2000系列DSP在线程序更新研究,单片机与嵌入式系统应用, 2013,(03).

[14] 龚文,张辉,陈超.基于CAN总线的电动汽车车载监控终端,计算机与现代化,2013,(11).

[15] 陈晓聪,游林儒,黄招彬.基于CAN通讯便携式DSP程序下载器的设计,自动化与仪表,2013,(09).

猜你喜欢

安全机制CAN总线
港口安全生产管理问题及对策研究
论网络通信技术
基于嵌入式的汽车辅助制动系统研究
CAN总线通信技术在电梯监控系统中的应用
关于税收应用中的数据库安全机制浅析
Domino安全策略研究
基于CANoe的J1939协议在ECU通信中的应用
铁路信号设备维护与安全机制分析
论10kV配电线路接地故障分析及预防
大数据环境下云存储平台安全机制研究