基于UDS的控制器在线升级系统设计

2022-04-09 17:48赵天义陈星高熊
机电工程技术 2022年2期
关键词:控制器

赵天义 陈星 高熊

摘要:传统的控制器升级技术存在不能在线升级,升级流程不统一,可靠性与安全性差等问题。针对传统控制器升级技术存在的问题,提出了一种基于统一诊断服务,使用引导加载程序技术的控制器在线升级方案。与传统技术相比,该技术实现了控制器的在线升级,提高了在线升级过程的安全性,稳定性和可移植性。使用MPC5744单片机作为控制器,使用USB-CAN设备作为转换器,在上位机使用VisualStudio作为开发平台,设计了控制器在线升级系统。实现了上位机和控制器的数据通信,完成了控制器的在线升级过程,验证了方案的可行性。结果表明,所使用统一诊断服务的控制器在线升级系统克服了传统技术的缺点,为控制器的在线升级问题提出了新的解决方案,对其他工业控制器的升级问题具有一定的参考价值。

关键词:控制器;BootLoader;UDS协议;在线升级

中图分类号:TP273

文献标志码:A

文章编号:1009-9492 ( 2022)02-0074-04

0 引言

随着电子技术的发展,汽车行业也将电子技术应用于车身的各个位置。开发过程中升级控制器需要频繁拆装,会导致接口松动甚至损坏,也降低开发效率[1]。为了避免上述问题的发生,当前行业内采用一种新的控制器在线升级技术,通过BootLoader完成对控制器的更新[2]。BootLoader的含义是引导加载程序,是汽车控制器在启动运行之前的一段程序代码。通过BootLoader进行更新,不需要将控制器拆下,只需要将控制器连入CAN或LIN等汽车通信网络,就可以完成对控制器的在线升级[3]。直接通过数据总线即可完成整个升级过程,大大提高了开发效率。

对于BootLoader技术已经有学者进行了研究。朱少辉等[4]基于CCP协议进行了控制器升级技术的设计。李娇娇等[5]使用Labview软件设计了一款控制器刷写软件,采用S19文件进行控制器升级。张成雨等[6]详细设计了BootLoader升级技术的Flash驱动与CAN驱动。杨朝阳等[7]通过外部触发方式,设计了基于CANFD的在线升级系统。这些研究成果仅仅完成了对于控制器的升级,缺乏一个统一的流程标准,更新过程的安全缺乏保证。

UDS是Unified Diagnostic Services的缩写,也称为IS0 14229统一诊断服务。是国际标准组织ISO为了实现汽车电子系统故障诊断而确定的一个通用标准[8]。UDS服务大大提高了控制器开发过程中的安全性、规范性和可维护性,已经广泛应用于汽车电子开发过程。UDS标准规定了与控制器升级相关的服务,十分适合应用于在线升级流程中。

本文通过学习UDS统一诊断服务协议,将UDS协议中与控制器在线升级相关的诊断指令应用于传统Boot-Loader技术上。设计了基于CAN总线通信,使用UDS诊断服务实现的控制器在线升级系统。与常规在线升级技术相比,本文提出的基于UDS的在线升级技术符合当今主流汽车电子行业的标准,提高了汽车控制器在线升级流程的规范性和可靠性。满足了今后汽车控制器开发的需求,也为其他工业控制器的升级问题提出了有效的解决方案。

1 目标文件解析

1.1 目标文件格式

刷新控制器所需数据保存在特定格式的目标文件中,通常汽车电子行业内更新采用的文件格式是S19与HEX。上位机需要将文件的数据按照对应的格式解析为底层控制器可以识别的数据,才能完成对于控制器的在线更新。本上位机支持对于S19与HEX两种主流文件格式的解析。在文件内部,数据使用ASCII码格式进行储存,一个字节的数据被拆分为两个十六进制的字符进行表示。S19文件每一行数据格式如图l所示。HEX文件每一行数据格式如图2所示。

(1)记录类型:对于S19文件记录类型分为8种,分别为S0、S1、S2、S3、S5、S7、S8或S9。对于HEX文件记录类型有6种,分别为0x00到0x05。根据记录类型可以确定出该行数据意义以及数据分段位置,正确解析数据。

(2)记录长度:代表该行记录中剩余的字节数,对于S19为储存地址、数据、校验和这3部分字节之和。对于HEX文件代表数据的长度。

(3)存儲地址:表示该行记录数据区域内数据应下载到控制器内存的起始地址。

(4)数据:该段内容为需要下载到控制器的数据。

(5)校验和:该段保存该行记录的校验数据,S19文件校验和计算方法是OxFF依次减去记录长度、存储地址和数据段3个区域内全部数据。HEX文件计算方法是0x100依次减去该行全部数据[9]。

1.2 文件解析流程

上位机解析文件要按照文件规则对数据进行读取解析:上位机每次读取文件的一行内容后首先对文件类型进行判断。继续检查文件记录类型是否合法,不正确则结束文件读取,上位机弹出文件读取错误提示。继续根据记录类型解析一行的记录长度、地址、数据和校验和等信息。按照规则对该行数据进行校验。若正确将文件中的数据按照两个ASCII码为一组,将数据还原为一个字节,将该行数据储存在上位机的临时内存中。继续该过程读取下一行,直到文件读取完毕。

完成上述过程后,该文件所有数据都被保存在上位机内存空间。上位机在发送数据之前还需要对数据进行填充和对齐。写控制器的Flash需要按照固定规则,每次写入Flash的起始地址必须为4的倍数,每次写入的字节数必须为4的倍数,这一过程被称为地址对齐。为方便控制器的在线更新,上位机需要对每次传输给控制器的数据的地址和数据内容进行处理,完成地址对齐工作,这样控制器在收到数据后可以不经过处理直接写入Flash。通常文件的数据并不是对齐的。因此上位机在对文件数据读取时还需要地址对齐,将空位进行填充,不足的数据位填充为0xFF,这样数据才能避免发生校验错误。上位机在每次读取数据时预先将缓存区全部数据设置为0xFF,在读取后将非空位改为读取的数据,实现了对于数据的填充。并且为方便下位机的工作上位机也应该将发送的数据进行分段裁剪为4的整数倍,这样下位机在接收到数据时就不需要设计对数据进行处理的算法,直接将接收后的数据写入Flash中即可,大大减少下位机的工作时间,上位机的文件解析流程如图3所示。

2 目标文件下载

2.1 UDS指令选择

文件解析后开始进行对控制器的更新,更新过程就是上位机与控制器依照UDS协议规则进行数据交互。经过握手识别,数据传输,擦除与写入Flash等一系列过程实现控制器的更新。UDS对于上位机和控制器之间的数据通讯都通过相关服务进行了规定,上位机与控制器端通信必须严格遵循这些格式,在发送不同的指令时应使用对应的诊断服务。

UDS诊断协议对于不同的服务规定了对应的诊断ID、发送和响应数据的格式和内容。例如,数据传输服务的ID为Ox36,该服务功能为下载或上传数据。一些服务还细分子服务,对于0x36服务没有子服务。该服务的报文内定义了两个参数,分别代表数据传输的次数和传输的数据。在实际开发过程中对于不同的实际需求,选择不同的诊断指令[10]。本文在进行控制器在线更新设计时使用了以下UDS指令如表1所示。

2.2 UDS下载流程

本节介绍基于UDS的BootLoader流程,基于UDS的BootLoader就是在原有的BootLoader基础上,将原本上位机在线更新发送的数据使用UDS协议规定的指令进行封装,以UDS指令的形式传输给控制器完成更新,具体实现流程可以根据需要进行设计。汽车控制器的BootLoad-er流程通常分为3个阶段,预编程阶段、主编程阶段和后编程阶段[11]。

2.2.1 预编程阶段

预编程阶段主要包括握手和密钥的检查,首先上位机发送扩展会话指令,请求进入扩展会话,经过控制器肯定响应进入扩展会话模式,才可以进行握手和密钥的检查。预编程过程如图4所示。

预编程阶段依次发送如下诊断指令。

(1) Extend Session:该指令诊断ID为0x10, 属于Diagnostic SessionControl的子功能。上位机发送子功能码0x03,使控制器进入扩展会话模式。这是由于在线更新时需要禁止控制器的部分功能,这些功能的禁用只有在扩展会话才可以进行配置。

(2) ControlDTC:该指令用于控制器设置是否启用DTC服务,诊断ID为0x85。上位机发送子功能码Ox02,表示禁止DTC服务,在线更新时该控制器停止通信,其他控制器不再记录该控制器的故障码。

(3) CommunicationControl:该指令用于控制器设置CAN正常通信,诊断ID为0x28。上位机发送子功能码Ox03,表示禁止非诊断指令以外CAN报文的收发,保证在线更新的正常进行,为进入编程模式做准备。

(4) Request Seed:该指令用于上位机向控制器请求种子,诊断ID为Ox27,属于Security Access的子功能。上位机发送子功能码Ox01,上位机从控制器获取seed,与控制器同时计算生成key,二者一致才可以进行更新。

(5) Send Key:该指令用于上位机向控制器发送key,诊断ID为0x27,子功能码Ox02,属于Security Ac-cess的子功能。上位机与控制器key -致方可继续更新。

(6) Programming Session:该指令用于控制器进入编程会话模式,诊断ID为0x10,属于Diagnostic SessionControl的子功能。上位机发送子功能码Ox02,控制器在收到此指令后可以执行内存编程所需的诊断服务。

2.2.2主编程阶段

主编程阶段主要进行Flash的擦除和写入,将更新所需的数据发送给控制器,完成对控制器的刷写。主编程过程如图5所示。

主编程阶段依次发送如下诊断指令。

(1) Erase Flash:该指令用于控制器进擦除内存,诊断ID为0x31,子功能码0x01,属于RoutineControl的子功能。控制器在收到此指令后擦除指定的Flash。

(2) Request Download:该指令用于上位機向控制器请求下载,诊断ID为0x34。控制器在收到此指令后根据当前的会话模式决定是否允许上位机向控制器写入数据,若允许则在下一过程将上位机传输的数据写入Flash。

(3) Transfer Data:该指令用于上位机向控制器传输数据,诊断ID为0x36。该指令包含一段内存区域的数据,控制器在收到此指令后根据当前的会话模式决定是否将这部分数据写入Flash,若允许则该过程重复执行直到数据全部传输完成。

(4) Request Transfer Exit:该指令用于上位机向控制器通知数据传输结束,诊断ID为0x37。控制器接收到此指令后终止和上位机的数据传输。

2.2.3 后编程阶段

后编程阶段主要完成对于控制器的重启和总线通信和DTC功能的恢复,流程如图6所示。

后编程阶段依次发送如下的诊断指令。

(1) EcuReset:该指令用于控制器硬件复位,诊断ID为0x11。上位机在全部数据传输完成后发送该指令,控制器在收到此指令后结束Flash刷写过程,结束BootLoader过程,恢复到正常的控制器工作状态。

(2) ControlDTC:该指令此处子功能码设置为Ox01表示启用DTC服务,恢复控制器可以正常记录DTC的状态。

(3) CommunicationControl:该指令此处子功能码设置为0x00表示启用控制器正常接收和发送服务CAN数据帧的功能,控制器恢复正常通信模式,重新接入CAN网络。

(4) Default Session:该指令用于控制器进入默认会话模式,诊断ID为0xl0,子功能码Ox03,属于DiagnosticSession Control的子功能。控制器收到这个指令后切换到默认会话模式,系统恢复正常工作状态,在线升级过程完成。

3 系统验证

3.1 系统硬件

整个系统分为上位机,USB转CAN硬件接口,控制器3个部分。上位机通过合适的硬件驱动如USB-CAN,Vector VN1630等可以连接到CAN总线网络上,实现通过CAN总线进行控制器的在线升级。系统架构如图7所示。本文设计的在线升级系统是一种通用的升级系统,只要控制器支持总线通信和自身编程功能即可进行控制器的更新。本文选择的控制器型号为MPC5744,支持内存引导模式,具备自身编程功能,可支持的数据接口有CAN,LIN,UART等,满足在线更新的要求。

3.2 功能测试

本文作者采用Visual Studio开发平台,开发了一款基于UDS诊断的BootLoader上位机。上位机开发基于上述流程,实机运行时,上位机与底层数据帧的接收与发送通过使用与硬件驱动相匹配的软件接口,即可将符合UDS协议规定的数据发送到数据总线上。这种方式不依赖于硬件接口的类型,可支持多种总线设备。

上位机发送对应流程的指令后,通过对底层返回的数据进行解析,确定接下来执行的指令,最终完成整个在线升级过程。

启动上位机后,通过对上位机的通信参数进行设置,完成上位机通信的初始化。之后选择升级文件,点击下载即可开始整个在线升级的流程。上位机有显示区域实现对于整个在线升级流程进度的显示。若某一环节发生错误则给出错误提示,并自动重新进行该环节的自动重发,当重发3次后仍不能进入下一环节则给出错误提示,退出本次在线更新。经过对于MPC5744控制器和其他多款控制器的大量测试,目标文件均能成功下载到控制器中完成在线升级过程,验证了本文的设计方案的有效性。上位机软件界面如图8所示。

4 结束语

本文设计了基于UDS协议的在线升级系统,通过将目标文件下载到控制器的Flash,实现了对于MPC5744控制器的在线更新。实验结果证明,本文设计的在线升级系统上位机能够按照UDS协议标准进行数据传输,实现控制器的在线升级。与传统技术相比,控制器不再需要从台架上拆下进行更新,提高了车身控制器在开发测试时的效率。应用UDS的在线更新技术具有更好的安全性和稳定性,适用于大部分主流控制器;也具备传统技术不具有的通用性,提高了BootLoader程序的可移植性。以上优势都改进了传统在线升级技术的缺点,基于UDS的在线升级技術在汽车电子行业将成为主流,在其他使用微控制器的行业也具有广阔的应用空间,对于解决控制器升级问题具有指导意义。

参考文献:

[1] Bogdan D,Bogdan R,Popa M.Design and implementation of abootloader in the context of intelligent vehicle systems[C]// 2017IEEE Conference on Technologies for Sustainability (SusTech).IEEE.2017.

[2]高峰,王景存,基于ARM9的Bootloader的分析及设计[J].现代电子技术,2010. 33(2): 44-46.

[3]詹克旭.基于UDS协议的汽车ECU升级方案[J].计算机应用与软件,2019,36(1):7.

[4]夏超英,朱少辉.基于CAN总线的ECU在线编程技术[J].单片机与嵌入式系统应用,2014,14(1): 24-27.

[5]李娇娇,张宏伟,陈金干.基于LabVIEW的新能源汽车控制器刷写软件设计[J].软件工程,2020,23(2): 16-18.

[6]张成雨,杨朝阳,单志文,基于CAN总线的车载应用Bootloader设计[J].湖北汽车工业学院学报,2017,31(4): 67-70.

[7]杨朝阳,阮海庭,罗永革,等.基于CAN FD的在线编程系统设计[J].单片机与嵌入式系统应用,2019,19(5):5.

[8]聂幸福,孟晨兴,基于UDS的BootLoader上位机实现[J].汽车工业研究,2018(7):4.

[9]税静,吴长水,发动机控制器在线升级系统的设计与实现[J].农业装备与车辆工程,2020,58(6):5.

[10]马宏伟,吴长水.基于统一诊断协议的控制器在线升级系统设计[J].软件工程,2020,23(8):4.

[11]袁帅,李瑜,苗坤怡,等,基于UDSonCAN的BootLoader上位机开发[J].汽车实用技术,2020(15):3.

猜你喜欢
控制器
基于改进模糊控制算法的分数阶控制器设计
重型卡车门窗控制器射频电路的设计
南京溧水电子3款控制器产品
杀毒控制器
水泥生料立磨压差变参数二型模糊控制器设计
基于NFV的分布式SDN控制器节能机制
用于可编程控制器的监测装置
AR眼镜商Magic Leap发布新专利
让你的骑行更顺畅的头盔
优科推出虚拟控制器,简化小型企业Wi—Fi部署