基于LIN总线ECU远程升级系统的设计与实现

2016-10-25 07:55朱志斌张祥
广东通信技术 2016年9期
关键词:配置文件下位上位

[朱志斌 张祥]

基于LIN总线ECU远程升级系统的设计与实现

[朱志斌 张祥]

LIN总线 MC9S12G128 ISO15765-2 ISO14229-1 两级Bootloader

朱志斌

重庆邮电大学光通信与网络重点实验室,重庆集诚汽车电子有限责任公司,硕士研究生,主研方向为汽车电子。

张祥

重庆集诚汽车电子有限责任公司,软件工程师,主研方向为汽车电子。

引言

随着汽车电子行业的不断发展,LIN总线凭借着其低成本性、配置灵活性、良好的工艺性在汽车网络中占据着不可替代的地位[1]。然而,当对LIN总线上的汽车电子控制单元ECU(Electronic Control Unit)进行固件升级时将会遇到很大阻碍--相关人员需要将待升级的ECU从汽车上拆卸下来然后打开ECU的保护壳,用专门的烧录器把更新好的代码烧写进去,最后再把ECU装回车上。这种方法不仅麻烦而且还很容易造成硬件的损坏。因此,设计出一种通过LIN总线对ECU进行在线升级的系统显得尤为必要。本方案下位机的bootloader亦可称为两级bootloader。第一级bootloader主要实现初始化堆栈指针、分配内存映射、初始化外围硬件设备、判断是否请求升级等功能,该部分程序从flash中加载运行(Load Flash And Execute,LFAE)[2]。第二级bootloader主要实现程序的下载功能,该部分程序直接从RAM中加载运行(Load RAM And Execute,LRAE)[3]。只有当应用程序请求升级时LRAE才会通过上位机下载至下位机的RAM中执行,由于LRAE不常驻在程序中所以在一定程度上增强了程序的安全性。

1 系统升级原理

远程系统升级架构如图1。

图1 系统架构图

LIN网络的节点分为主机节点和从机节点。文中主要针对LIN网络中的主机节点进行升级。采用硬件触发机制使网络中的主机进入一级Bootloader,此时待升级的主机转化为从机。上位机通过CANOE连接到汽车LIN网络中,在升级的过程中上位机临时充当LIN主机的角色,通过调度机制分别将二级Bootloader和待升级的程序下载至待升级的ECU中,从而完成远程升级。

2 Bootloader的设计与实现

Bootloader又称引导加载程序,是单片机通电后首先获得CPU控制权的程序,它主要实现两个功能[8]:

(1)初始化堆栈指针、分配内存映射、初始化外围硬件设备等;

(2)对flash中已存在的程序进行升级;

在汽车LIN网络中,拥有一套在线升级系统不仅可以减少对固件的损坏而且还可以极大提高汽车ECU开发效率[9]。本方案的下位机实现依托于飞思卡尔MC9S12G128实现,G128 拥有128K flash 、8K RAM。其空间划分如图2。

图2 S12G内存划分

S12G 系列微控制器允许在重新编程过程中不需要额外的高压源[10]。LARE中Falsh 擦写函数的工作频率是从总线频率获得的,其大小应在在0.8M-1M之间。通过设置FDIVLD寄存器获得工作频率[10]。S12G系列有一个内存控制器,该内存控制器可以执行有效的flash命令。Flash的相关命令通过两个寄存器(FCCOB和FCCOBIX)的配合实现[10]。由于擦写函数用到的是全局地址,所以局部地址要先转换成全局地址才可以直接被擦写函数使用而且必须在擦除之后才能够写入,否则会造成程序跑飞。在擦除写入的过程是不允许被其他程序打断的,所以在擦写函数执行时尽量关闭所有中断和看门狗。

S12G系列微控制器的中断向量表默认放在0x0F页的0xff80-0xffff处,复位向量在0xfffe-0xffff处。由于S12G系列微控制器有一个中断向量基址寄存器IVBR,所以用户可以通过修改IVBR可以顺利实现Bootloader与APP使用各自的中断向量而互不干扰。需要注意的地方是APP的所有用到的中断向量都必须放在未分页区,而Bootloader使用默认的中断向量表即可。

本升级系统可分为三个时期:编程前期、编程中期、编程后期。根据ISO14229-1下位机有三种运行模式:默认模式、编程模式、扩展模式。三种模式之间的切换关系如图3。

图3 状态转移图

编程前期主要实现下位机进入编程模式的功能,在进入编程模式之前下位机首先要验证上位机的合法性,上位机会根据配置文件的步骤发送0x27 0x01 进行请求安全认证,下位机接收到该信息返回四个随机数sand[4],上位机收到随机数后根据双方统一的加密算法f(sand)进行加密,并把结果通过0x27 0x02 result1 result2 result3 result4 返回给下位机,下位机进行同样加密并对比两个加密结果一致则可以进入编程模式,不一致则拒绝进入。

编程中期上位机主要通过0x34,0x36,0x37,0x31四项服务进行LARE与应用程序数据的下载,更多详细的介绍请读者参考文献[7] 。

编程后期主要任务是校验下载数据的正确性以及复位下位机。进行程序校验时,上位机会把发送的所有数据通过双方统一的算法fcrc(data)获得校验值CRC,通过0x31 01 服务把CRC 传送给下位机,下位机读取写入的所有数据进行相同算法并对比CRC,结果一致回复正响应并写入应用程序有效标志,升级成功,否则回复负响应升级失败。

下位机Bootloader分为两种模式:LARE和LFAE。两种模式不可同时运行[2][3]。LFAE主要实现初始化外围设备、堆栈大小、RAM以及判断请求升级标志是否有效和应用程序是否有效的功能。其软件流程图如图4。

图4 LFAE流程

LARE主要实现程序的擦除写入、校验数据、写入应用程序有效标志和复位下位机。升级结束后LARE命令下位机复位,RAM区被重新初始化从而会清除LARE程序,因此LARE不会常驻在程序中从而在一定程度上保证了flash中程序的安全性。LARE软件流程图如图5。

3 上位机实现

图5 LARE程序流程

本方案上位机是用vs2010 MFC实现。其应用层是在ISO14229-1的架构之上结合自己的需要设计出诊断流程上位机整体实现架构如图6。

图6 上位机架构表

为了提高该系统的通用性,上位机又增加了读取配置文件的功能,配置文件格式如图7。

图7 配置文件截图

系统升级时上位机首先读取配置文件中[init]中的内容从而完成上位机的基本配置,主要包括:上位机物理ID,上位机功能ID,下位机ID,下位机功能ID,波特率。配置结束后上位机根据[stepn](n从1开始依次递增直至升级流程结束)中的内容执行相应的服务,如:request表示终端要发送的数据,respond 表示下位机正确响应,retry 表示如果此步骤失败重试次数,numstep 表示该步骤失败后向前或向后几步开始继续执行。用户可以根据需求自行修改波特率、ID、升级顺序、发送的数据等信息,从而极大的提高上位机的兼容性。

4 功能测试

该功能的测试由三部分组成:PC机、CANOE、待升级ECU。其连接示意图如图8。

图8 升级系统连接图

产品功能测试使用公司已量产的某款BCM(车身控制器)程序。每次下载完成后测试程序功能,正常则表示升级成功否则为升级失败。该测试根据程序大小共分为四组,每组分别进行100次升级,时间取平均值。关于代码的大小通过适当地对该BCM程序删减一些功能或增加一些无效的代码进行控制。其升级用时时间与理论用时时间对比如表1:(LIN的传输速率V = 19.2kbit/s,flash擦写函数擦除16k用时约Td16= 167ms,写入1k字节标准用时约Tw1=32ms)[10]假设需要升级的程序为N K。则理论用时时间:

t = 150*(N*1024)/(19.2*8) +(N/16)*Td16+N*Tw1

表1 升级用时时间

由表1分析可知该Bootloader执行的时间与理论时间差距主要取决于0x27服务的加密算法时间、升级完成后读取flash中的数据并进行校验时间以及升级流程所用到的时间。本实验结果表明该方案具有较强的系统稳定性。本方案的Bootloader总大小为7 354字节,其中LARE 4 893字节 LFAE 2 461字节。若按传统方案设计该Bootloader需全部放入flash中,而按本文的方案只需将LFAE驻留在flash中,Bootloader占用flash空间相比传统方案降低了66.5%。不仅如此,升级完成后由于复位ECU会重新初始化RAM区,在应用程序运行时LARE不会驻留在程序中从而极大地提高了程序的安全性。

5 总结

本文以飞思卡尔MC9S12G1128为系统平台,提出一种基于LIN总线进行升级的系统解决方案,实现了对汽车CLIN总线ECU的在线升级。并且将ISO15765-2顺利移植到LIN网络诊断帧中。 本文的两级Bootloader方案不仅可减少对flash占用空间而且还具有很强的稳定性。而对上位机,用户只需根据自己需要修改配置文件即可获得自己所需升级流程的上位机。该方案在基于LIN总线Bootloader开发设计中具有一定的参考价值。

1LIN Specification Package( Revision 2.2A).Munich,Germany;Motorola,2003

2Daniel M,Scotland E. LFAE bootloader example and interface for use with AN2546[Z].Freescale Semiconductor,Inc.,2004

3Martvn G.HCS12 load RAM and execute bootloader user guide [Z] .Freescale Semiconductor,Inc.,2004

4苏洪.基于LIN总线的车窗防夹控制系统研究[D].黑龙江:哈尔滨工业大学,2015,06

5Swedish Standards Institute.ISO 15765-2 Road Vehicles Diagnosties on CAN-Part2:Network Layer Services[S].2004

6唐乐.基于can总线的通用性汽车ECU故障诊断仪的研究与设计[D].重庆:重庆邮电大学,2012,05

7International Organization for Standardization. ISO14229-2006 road vehicles unified diagnostics services(UDS)Specilica-tionand Requirements(v2)[S].2006

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

9郭凯凯.can总线UDS的研究与设计[D].安徽:安徽理工大学,2013.06

10MC9S12G Family Reference Manual(0.41Revision)[M].Austin,Texas;Freescale Semiconductor,2010

10.3969/j.issn.1006-6403.2016.09.008

2016-08-12)

针对汽车LIN(Local Interconnect Network)节点进行程序更新困难的问题,文章设计并开发出了一种通过汽车LIN总线对ECU(Electronic Control Unit)进行远程在线升级的系统。该系统的应用层采用国际诊断协议ISO14229-1,传输层在ISO15765-2协议的基础上进行改进使其移植到汽车LIN网络的诊断帧中。基于LIN总线设计具有两级Bootloader功能的下位机,该方案设计不仅可以减少CAN 和LIN网络之间数据格式的转换量、提高flash空间的利用率而且增强了系统的安全性。该系统设计已经在某款已量产的基于飞思卡尔MC9S12G128的车身控制器(BCM)中得到充分验证。

猜你喜欢
配置文件下位上位
互不干涉混用Chromium Edge
发射机房监控系统之下位机
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
特斯拉 风云之老阿姨上位
为View桌面准备父虚拟机
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
景洪电厂监控系统下位机数据传输网络改造
围观党“下位”,吐槽帝“登基”