万礼华,但功礼
(重庆金美通信有限责任公司,重庆400030)
基于UDS的ECU在线重编程设计与实现
万礼华,但功礼
(重庆金美通信有限责任公司,重庆400030)
结合国内外OEM厂商广泛采用的诊断协议UDS,对Can总线下的ECU在线重编程进行研究和设计,并对具体的软件实现进行阐述。本方案能防止ECU在线重编程过程中出现异常时,ECU被锁死;可自恢复,刷新功能永不丢失。
统一诊断协议;重编程;引导程序;第一引导程序;第二引导程序
汽车电子产品开发对安全性、可靠性指标要求很高,同时ECU的开发周期较长,所以程序更新的情况在开发过程及售后都可能出现。为了对ECU硬件本身不造成破坏,同时方便售后服务,汽车行业制定了标准的通信协议,采用专门的诊断设备,通过标准的通信接口对ECU控制软件或标定数据更新。当前,汽车上的各个ECU之间都具有一个或多个整车通信网络实现各ECU之间的控制及通信。通常,这些汽车ECU之间都具有标准的诊断协议,能通过诊断仪在整车通信网络实现故障码的读取,在整车通信网络上通过诊断仪实现ECU控制软件更新及标定数据更新,能方便ECU控制软件开发及售后服务。国内外各大汽车厂商广泛使用的一种车载诊断协议是UDS(汽车通用诊断服务)。
汽车ECU重编程分为离线重编程、在线重编程两种方法。在线重编程是在ECU安装在整车网络上的代码更新,离线重编程是在ECU未安装在整车网络上的代码更新。本方案中的代码重编程是采用基于CAN总线UDS协议的在线重编程技术。
ECU的在线重编程是指ECU安装在整车网络中时,通过整车通信网络刷新其中的应用程序、标定数据、以及Bootloader本身(SBL),从而实现改善控制器性能、提高安全性、改善排放、改善燃油经济性。当前,ECU供应商、OEM厂商、授权售后技术中心、技术工程师通过连接到整车网络的诊断仪实现ECU的在线重编程。通过这种方法能方便、安全、经济地实现应用软件、标定数据、bootloader本身的刷新。Bootloader、应用软件采用统一的诊断协议(即UDS)与诊断仪通信。
Bootloader是一段固化在FLASH中的代码,它和标定数据、应用程序位于FLASH中不同的分块中,这样,能够分别单独地擦除Bootloader本身(SBL)、标定数据和应用程序。为了简化ECU复位后的工作流程,本方案中应用程序的复位相量和Bootloader的复位相量相同,上电复位后,ECU首先运行Bootlader,然后跳转到应用程序。
3.1 总体架构
方案实现的ECU在线重编程Bootloader由Bootloader(FBL)和Bootloader(SBL)两部分组成FBL用于更新SBL,其代码放在代码保护区;SBL用于更新标定数据和应用程序。由于FBL放在代码保护区,保证FBL代码永远不会被破坏,FBL通过BDM固化在FLASH中。SBL存放在代码区,能够通过诊断仪进行更新。本方案中所指的Bootloader本身更新指的是SBL更新。采用这种方法能够保证用户在更新Bootloader本身(SBL)的过种中,出现突然复位、供电异常、与诊断仪通讯失败、FLASH擦写错误等异常情况时,ECU不会被锁死,重新上电后通过诊断仪仍然能够更新Bootloader本身(SBL)及应用程序和标定数据。
与传统的离线模式重编程方式不同,由于整车通信数据在整车网络中传输,必须考虑其它控制器的反应,必须对目标ECU作出正确识别,必须保证数据的完整性等。基于UDS协议的ECU在线重编程包括以下步骤:
(1)进入扩展会话(extended session);
(2)识别ECU:识别ECU ID,FBL软件ID,SBL软件ID,应用软件ID,标定数据ID;
(3)关闭网络上所有ECU的故障识别、存储功能,在线重编程期间禁止检测、记录故障;
(4)关闭整车通信数据传递:使网络上只有诊断消息和网络管理消息传递,为在线重编程让出足够的带宽;
(5)解锁ECU,使ECU能够进入编程会话;
(6)进入编程会话(programming session),从bootloader进入编程会话;从应用程序进入编程会话;
(7)擦除FLASH数据:擦除SBL代码或擦除标定数据/应用程序;
(8)下载数据:下载新的程序、数据到ECU的FLASH中;
(9)检验数据:检查下载的数据,如果检验正确,使ECU_Status有效;
(10)复位ECU:软件复位ECU;
(11)开启网络上ECU的故障识别、存储功能:重新开启网络上其它控制器的故障识别与存储功能;
(12)开启整车通信数据传递:重新开启网络上其它控制器实现整车通信数据传递;
3.2 软件设计
3.2.1 ECU工作流程
ECU上电复位后首先进入FBL,测试Ecu_Status标志,如果Ecu_Status=0xE0,ECU跳转到SBL,否则程序在FBL中运行;在SBL中,测试Ecu_Status标志,Ecu_Status>=0xF0,ECU跳转到APP,否则程序在SBL中运行。ECU工作流程如图1所示。
ECU切换到编程会话SBL0x85。ECU可以在应用程序中进入编程会话SBL0x85,也可以在SBL中进入编程会话SBL0x85。程序在应用程序中运行时,ECU收到进入编程会话命令(DSC85),并且ECU未处于工作状态时,ECU进入编程会话SBL0x85,控制权转移到SBL中。程序在SBL中运行时,ECU收到进入编程会话命令(DSC85),ECU直接进入编程会话SBL0x85,控制权在SBL中。
ECU切到编程会话FBL0x85。ECU可以在SBL中进入编程会话FBL0x85,也可以在FBL中进入编程会话FBL0x85。程序在SBL中运行时,ECU收到擦除命令Ecu_Status时,ECU直接进入编程会话FBL0x85,控制权转移到FBL中。程序在FBL中运行时,ECU收到进入编程会话命令(DSC85),ECU直接进入编程会话FBL0x85,控制权在FBL中。
应用程序在线重编程工作流程:诊断仪通过CAN总线向ECU发送S19文件格式的二进制文件,ECU将下载的代码烧到应用程序区域,ECU应用程序代码更新,下次上电或复位后,运行新的应用程序。
3.2.2 ECU中程序更新功能的相关UDS服务
ECU程序更新需要的功能必须与相应的UDS协议一致,这样才能保证ECU能通过诊断仪进行代码更新。ECU程序更新功能的相关UDS服务如表1所示。
图1 ECU工作流程图
表1 ECU程序更新功能相关UDS服务
3.2.3 ECU软件内存映射
采用FreeScale MC9S12XEQ512微控制器,ECU软件的内存映射图如图2所示。FBL程序区为0x780000至0x783fff,大小为16K;FBL中断向量区为0x7ff400至0x7ff7ff,大小为1K;SBL程序区为0x784000至0x787fff,大小为16K;SBL中断向量区为0x7ff800至0x7ffbff,大小为1K;APP程序区为0x7b0000至0x7fbfff,大小为304K;APP中断向量区为0x7ffc00至0x7fffff,大小为1K;标定数据区为0x788000至0x7affff,大小为160K。其中FBL程序区及FBL中断向量区放在代码保护区,在线重编程过程中不会被破坏,以防止在线重编程异常时,重新上电后通过FBL仍然能够重新进行SBL、标定数据/APP程序在线重编程。S12系列单片机通过修改中断向量基地址寄存器IVBR进行中断向量表重映射,为FBL、SBL、APP分别分配不同的中断向量表。SBL和APP中断是指除复位中断外的其它中断。为了简化程序工作流程,SBL中程序复位,APP中程序复位都将调用FBL中的复位中断程序。
Ecu_Status为0x00、0xff时SBL、APP程序被禁止运行,程序控制权在FBL中;Ecu_Status为0xe0时,APP程序被禁止运行,程序控制权在SBL中;Ecu_Status为0xf0时,SBL、APP程序允许运行,程序控制权在APP中。ECU状态“Ecu_Status”管理如下:
图2 ECU软件内存映射图
重编程开始时,Ecu_Status被置为0x00;
FLASH擦除完成时,Ecu_Status被置为0xff;
重编程标定数据/应用程序完成时,Ecu_Status被置为0xf0;
重编程Bootloader(SBL)完成时,Ecu_Status被置为0xe0;
LOG信息为重编程记录信息,其中每条记录包括48字节数据,1K能记录21条重编程记录信息。每一条记录信息包括24字节的ECU识别信息和24字节的重编程版本信息。
3.2.4 ECU的在线重编程请求服务处理
ECU在收到诊断仪发出的请求服务后,首先对请求服务的合法性进行判断,如图3所示,然后对有效的请求服务进行处理,如图4所示。
图3 请求服务过滤处理
图4 有效服务处理
提出了一种基于UDS的ECU在线重编程方案。提出了ECU和双Bootloader方案,FBL放在代码保护区,SBL放在代码区。在APP更新及Bootloader自身更新过程中,出现各种异常,重新上电后,ECU不会死锁,Bootloader可自恢复,刷新功能永不丢失。
[1]ISO15765,2004,Road vehicles—Diagnostics on Controller Aera Networks(CAN)[S].Switzerland:ISO,2004.
[2]ISO14229,2006,Road vehicles—Unified diagnostic services(UDS)[S].Switzerland:ISO,2006.
[3]廖洪良,孙泽昌.基于KWP2000的ECU在线编程研究及应用[J].微计算机信息,2008,24(3):250-253.LIAO Hong lang,SUN Ze chang.Research and application of the ECU on-board reprogramming based on KWP2000[J].CONTROL&AUTOMATION,2008,24(3):250-253.
[4]崔俊锋,袁涛.车身混合网络中CAN/LIN网关的设计与实现[J].微计算机信息,2006,(3Z):201-204. CUIJun feng,YUAN Tao.Design and Implementation of a CAN/LIN Gateway in Automotive Mixing Body Network[J].CONTROL&AUTOMATION,2006,3(2):201-204.
[5]韩鑫,鲍可进.CAN总线网络层协议栈开发测试[J].计算机工程,2011,37(15):232-237.HAN Xin,BAO Ke-jin.Development and Test of CAN Bus Network Layer Protocol Stack[J].Computer Engineering,2011,37(15):232-237.
[6]张宏,詹德凯.基于CAN总线的汽车故障诊断系统研究与设计[J].汽车工程,2008,30(10):934-937.ZHANG Hong,ZHAN De kai,LIN Chang jia.Design of Vehicle Fault Diagnosis System Based on CAN Bus[J].Automotive Engineering,2008,30(10):934-937.
Research and Im p lement of ECU on Board Reprogramm ing Based on UDS
WAN Li-hua,DAN Gong-li
(Chongqing Jinmei Communication Co.,Ltd.,Chongqing 400030,China)
In this paper,the research and design for the ECU on board reprogramming are conducted according to diagnostic protocol UDSwhich iswidely used bymanymajor OEMs in the world,and some software design details are discussed as well.It can avoid dead lock while some abnormal error occurs during ECU on board reprogramming.The ECU can perform recovery itself and the refresh function never loses.
UDS;Reprogramming;Bootloader;FBL;SBL
10.3969/j.issn.1002-2279.2014.06.017
TP19
:A
:1002-2279(2014)06-0058-04
万礼华(1974-),男,重庆市人,硕士,高级工程师,主研方向:嵌入式软件开发,图像处理等。
2014-04-15