APP下载

电动汽车整车控制器BootLoader功能开发①

2014-06-14乐志国金启前

关键词:上位报文整车

乐志国, 金启前

(1.同济大学,上海 201804;2.吉利汽车研究院,浙江 杭州 311228)

0 引言

在整车控制器(简称VCU)开发过程中需要多次将应用程序烧写到芯片中.传统的烧写方法一般是利用芯片专用下载器通过BDM调试接口下载程序,该方法不仅下载速度慢,而且给后期整车控制器的调试和维护都带来极大不便.因为无论前期开发多么完善,写出来的程序都不可避免会存在一定的bug.对于电动汽车来说,当车辆已投入使用,如何方便快捷的升级主程序,对已知的问题进行改善是急需解决的一个问题.车载CAN总线能很好满足ECU节点升级的需求,可通过CAN网络作为通信介质开发BootLoader解决这一问题[1].BootLoaer为主程序运行之前运行的一段程序,主要完成应用程序的升级更新.基于CAN总线的BootLoader需要在CAN协议的基础上实现一个数据传输和命令执行的协议.本文采用自定义数据传输和命令执行的协议,设计实现了整车控制器BootLoader功能.

1 BootLoader简介

设备上电复位后,立即执行BootLoader代码.Bootloader开始运行后,初始化CPU硬件设备,设置系统所需要的环境变量,并且最后进入C代码的main函数入口,启动内核.一般BootLoader会跳转到主程序运行,当检测到需要烧写程序时,Boot-Loader才会继续运行.在技术层面上说,Bootloader的启动过程可以是单阶段,也可以是多阶段.通常地,多阶段有助于实现更好的可移植特性以及更多复杂函数[2].而在芯片CPU启动的BootLoader大多数分两个阶段完成.首先是外围硬件设备的初始化,如对CPU功能模块、串口、看门狗、时钟 等;其次是内部硬件设备的初始化,即相关寄存器的初始化,设置内核的启动参数.初始化完成后进入通信任务循环,等待接收命令.如循环等待超时,则自动跳转的主程序运行[3].不同的芯片MCU实现Boot-Loader方法各不相同,但是实现思路上基本一致.

2 BootLoader上位机实现

上位机端的BootLoader主要用于为整车控制器读取并下载升级程序代码,即S19文件.整车控制器采用的主芯片为飞思卡尔16位芯片MC9S12XDP512,通过该芯片的集成开发环境CodeWarrior对应用程序编译后,即可生成芯片的下载文件S19文件.S19文件为飞思卡尔推荐使用的标准文件传送格式,是一段直接烧写进芯片的ASCII码.文件中每行最多包含78个字节,包括类型、计数、地址、数据及校验和[4].

2.1 BootLoader上位机功能

BootLoader上位机界面是基于Visual C++6开发,采取多线程机制实现.提供人机交互功能、CAN通信功能、S19文件读取功能以及数据处理功能.相应的模块构成如下:

(1)人机交互模块:人机交互主要包括人机界面和中央控制.通过人机界面,操作人员可以更便捷地了解BootLoader功能实时运行情况;中央控制负责通信功能的开启关闭、文件的读取解析以及程序下载过程中系统状态的监控.

(2)CAN通信模块:通过使用整车控制器现有的CAN接口,上位机把CAN总线作为数据传输的介质,按照既定的CAN协议实现上位机端与整车控制器端的握手、应答、数据传输、校验以及模式控制等功能.

(3)S19文件解析模块:S19文件具有体积小、携带方便、格式易于分析的有点.上位机S19文件解析模块主要包括S19文件的读取程序、解释程序、发送报文生成程序和通信程序.

(4)数据处理模块:为保证CAN通信的正常,数据传输的有效性,上位机会针对读取的S19文件数据、生成的报文数据以及接收到的整车控制器端发送的数据进行监控校验处理,并将处理结果实时显示在人机界面,方便操作人员采取有效的动作.

上位机图形界面如图1所示.

图1 上位机图形界面

2.2 BootLoader上位机发送流程

由于PC机上没有CAN控制器,上位机CAN通信选用周立功CAN卡实现,周立功CAN接口卡提供了CAN驱动所需的动态链接库.上位机启动CAN,打开CAN口后,即自动激活S19文件读取功能,操作人员手动选取被读取文件的路径.上位机将S19文件的所有数据读进来,存放的预先分配的内存中,按照记录地址及记录长度将其分成连续的字节块,每块再分为512 Byte的连续段.根据自定义CAN协议将S19文件的一行记录(地址:连续段的首地址,数据,校验和等)拆分为若干个小的数据包,然后使用单个CAN的数据帧对其逐一传送.

当S19文件内容按照既定格式生成报文,即可向整车控制器发送握手信号请求升级应用程序,若整车控制器工作正常则发送相应的应答信号允许下载程序.数据的传送由CAN通信命令序列处理机制实现.根据不同的处理序列,发送数据封装在CAN消息的数据帧中,通过周立功控制器驱动接口程序,将升级后的应用程序由上位机经CAN接口卡发送给整车控制器.上位机端发送流程如图2所示.数据传输时,整车控制器反馈信息并显示数据校验结果、写入情况等功能.

图2 上位机BootLoader发送流程

2.3 通信协议制定

为防止其他人员通过非正常途径下载、修改整车控制器应用程序,本文开发一套自定义的数据通信下载协议.具体规定了上位机与整车控制器之间如何握手、应答、数据的发送与接收,以及CAN报文校验的机制.同时,在数据下载之前,要求验证操作人员的身份.本文简单实现了验证码解析功能,将整车控制器返回的编码值作为伪码.当连接时,上位机端通过发送编码获取命令得到整车控制器反馈的伪码,经内部解析计算出正确的验证码后把它传送给整车控制器.如果验证码正确,则授权升级应用程序.

图3 主程序流程框图

3 整车控制器BootLoader设计

通常,基于嵌入式的BootLoader开发需要依赖具体的硬件实现,但是针对某一架构的系列芯片,可以实现一定程度上的通用.飞思卡尔16位基于HCS12内核的系列芯片在CPU上电后总是从地址0xFFFE处取第一条指令,可以将BootLoader放在此处使其成为CPU上电后执行的第一条指令.本文所使用的飞思卡尔芯片自带CAN通信模块.整车控制器端BootLoader功能主要分为3个模块:主程序模块,CAN通信模块和Flash数据擦写模块.

3.1 主程序模块设计

整车控制器上电复位后,进入BootLoader程序入口地址,在完成上电初始化后,即等待上位机发送的握手信号.在等待500ms后若没收到上位机信号,系统判别不进行应用程序加载,退出Boot-Loader功能,跳转到应用程序入口地址处,执行应用程序.若系统收到上位机握手信号,则有可加载的应用程序代码,BootLoader向上位机发送应答信号,同时擦除芯片用于存储应用程序代码部分的Flash,等待上位机数据报文的到来.整车控制器接收到上位机发送来得数据后,按照既定的协议对每个数据包解析,每完成一行数据的接收,即进行一次数据的校验,当确认校验正确,调用Flash编程函数将通过校验的数据按照给定的地址写入到Flash中,并将校验和擦写的结果反馈给上位机.数据写入完成,重新执行上电过程,芯片复位,系统跳转到整车控制器应用程序执行.主程序流程如图3所示.

图4 MSCAN初始化流程

图5 MSCAN发送流程

3.2 CAN通信模块设计

通信模块负责与BootLoader上位机的通信,分为CAN控制器初始化、CAN接收和CAN发送3部分.用于实现数据的收发和CAN报文的解包.

3.2.1 MSCAN 初始化

初始化CAN控制器模块,需要对MSCAN模块寄存器进行配置.寄存器的配置在MSCAN休眠模式下完成,寄存器配置完后,通过MSCAN的寄存器使能位使能CAN,并唤醒CAN通信.要求如下:

根据CAN通信协议,选取合适的时钟源.本文根据协议中规定的波特率和整车控制器的硬件设计,选取振荡器作为CAN通信时钟源.整车控制器所使用的晶振为16MHz,经过预分频处理后得到CAN通信的波特率为500Kbps.

设定CAN通信的滤波参数.BootLoader数据的下载通过特定的帧来完成.根据协议,选取标准帧格式,并设置相应的滤波器,使得MSCAN仅接收特定段的CAN报文.MSCAN初始化流程如图4所示.

3.2.2 MSCAN 发送程序设计

要发送的数据打包后,首先选择MSCAN中空闲发送缓冲区,并将报文放置于发送缓冲区.MSCAN具有多个发送缓冲区,可以同时写入多个报文,写入报文后,通过设置相应缓冲区的指针,通知MSCAN模块有需要发送的报文.当总线空闲时,MSCAN会根据存储报文的优先级依次发送写入发送缓冲区的报文.MSCAN发送流程如图5所示[5].

图6 MSCAN接收流程

3.2.3 MSCAN 接收程序设计

MSCAN具有多个数据接收缓冲区,可同时接收多个数据报文.数据报文的读取可采取中断和查询的方式,本文选取采用查询的方式接收报文,每隔一定的时间周期,程序通过读取接收标志寄存器确认接收缓冲区中是否有报文要读取.数据读取后,清零接收标志寄存器释放接收缓冲区.MSCAN接收流程如图6所示.

3.3 Flash擦写模块设计

飞思卡尔微控制器内部集成Flash,可以存储运行所需的代码和数据.芯片的Flash区域被分块处理,内部配有Flash保护配置寄存器,用以确定被保护的区域的大小.系统复位时,首先从此区域加载数据.为了保证整个顺利擦除和写入Flash,必须保证总线时钟和Flash工作时钟在合理范围内.本文所选用的16MHz外部时钟参考,可以保证总线时钟大于2MHz,满足Flash编程的要求.初始化Flash模块时,可通过设置合理的Flash时钟分频寄存器的值,使Flash工作时钟保证在150~200kHz内,否则有可能导致Flash擦除和写入失败[6].

具体来说,对Flash的擦除既可整体擦除,也可以仅擦除一个扇区,但擦除的内容不能小于一个扇区.而针对Flash的写入操作要以字为基础.Flash的擦除和写入操作主要包括以下4个步骤:

(1)设置Flash预分频寄存器,保证Flash工作频率在150~200kHz内;

(2)设置Flash控制寄存器的值,使能擦除或写入命令;

(3)读取状态寄存器值,确认擦除或写入操作完成;

(4)判断命令执行过程有无错误产生.

图7 应用程序S19文件

图8 芯片内存中的数据

4 测试结果

整车控制器端代码完成后,编译源代码生成BootLoader程序的S19文件并下载到整车控制器上运行,并进行测试.芯片复位后对当前状态做出判断,将S19文件中数据按照实际地址写入Flash.测试及结果如下.

如图7为生成的应用程序S19文件,应用程序中集成了CAN通信功能,跑马灯功能,可以用来直观地测试应用程序下载后的结果.图8是通过BootLoader程序下载到Flash中后显示的芯片内存中的数据.通过对比,应用程序可以按照实际的地址下载到指定的芯片内存中,实现了整车控制器的BootLoader功能.

利用CAN测试工具CANoe可以快速实现对整车控制器CAN通信功能的诊断.在线测试如图9所示,测试环境由CANoe、整车控制器、系统电源等组成.系统电源用于整车控制器供电,将CANoe与整车控制器的CAN通信接口相连,启动CANoe软件监控测试界面,系统上电后,即可监控测试结果.

图9 BootLoader功能在线测试

整车控制器在供电后开始运行.通过在线测试可以看到,跑马灯有规律地按固定周期闪烁.利用CANoe工具,随机对整车控制器CAN故障诊断功能进行了测试,测试结果如图10所示,包含了故障代码、故障状态等的描述,CAN通信功能正常.

图10 测试结果

5 结论

一个设计良好的BootLoader既能够加快应用程序的开发,又方便后期使用阶段应用程序的升级、修改.本文实现了基于整车控制器的BootLoader功能的开发,通过自定义的协议,基于CAN通信实现了应用程序S19文件的解析和下载.测试表明,所开发的BootLoader能正确下载应用程序,可稳定擦写芯片Flash,未出现数据丢失,能快速、准确地实现整车控制器升级功能,并可进一步扩展,提高应用程序的开发效率.

[1]王薇.基于嵌入式linux的BootLoader的设计与应用[D].成都:西南交通大学,2006.

[2]孙天泽,袁文菊,张海峰.嵌入式设计与Linux驱动开发指南[M].北京:电子工业出版社,2005.

[3]游侃民.嵌入式系统网络化BOOTLOADER的设计与实现[D].广州:华南理工大学,2010.

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

[5]邹东升,佘龙华.一种基于CAN总线的程序调试技术研究[J].计算机技术与应用,2008,26(5):116-117.

[6]罗胜耘,路安江.串行Flash启动BootLoader的设计与实现[J].化工自动化及仪表,2010,37(8):90-93.

猜你喜欢

上位报文整车
基于J1939 协议多包报文的时序研究及应用
基于六自由度解耦分析的整车悬置设计
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
特斯拉 风云之老阿姨上位
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
ATS与列车通信报文分析
以新思路促推现代农业上位
整车低频加速噪声研究及改进