袁帅 李瑜 苗坤怡 李凌志
摘 要:目前,汽车ECU的数量越来越多,软件迭代速度越来越快,为解决汽车ECU软件在线更新的问题,遵循标准的BootLoader规范流程,开发了一款支持多种硬件设备,适用于多种ECU的BootLoader上位机,根据ISO11898、ISO 15765、ISO 14229等标准协议,使用统一诊断服务进行ECU软件的在线更新,根据实车实际使用效果显示,该上位机能够快速准确的更新车身域和信息域各个ECU的软件。
关键字:汽车ECU;BootLoader;UDS 诊断服务
中图分类号:U463.6 文献标识码:A 文章编号:1671-7988(2020)15-97-03
Abstract: At present, there are more and more automobile ECUs and the speed of software iteration is faster and faster. In order to solve the problem of on-line updating of automobile ECU software, this paper follows the standard bootloader specification process, develops a bootloader upper computer which supports a variety of hardware devices and is suitable for a variety of ECUs, according to ISO 11898, ISO 15765, ISO 14229 and other standard protocols, use unified diagnosis service to update ECU software online. According to the actual application results of the vehicle, the upper computer can quickly and accurately update the software of each ECU in the vehicle body domain and information domain.
Keywords: Automobile ECU; Bootloader; UDS diagnostic service
CLC NO.: U463.6 Document Code: A Article ID: 1671-7988(2020)15-97-03
引言
目前软件在车辆中扮演的角色越来越重要,汽车上控制器的数量与功能越来越多,软件更新频率快,不管是在研发阶段还是售后服务,主机厂都需要对控制器软件进行在线更新,传统的控制器软件升级方式有通过U盘升级或者是通过JLink升级,但是这些方式都只能针对单个控制器进行升级,无法对整车同一个网段的所有控制器软件进行升级,操作复杂,为了解决ECU软件迭代升级的问题,目前基于UDS服务的BootLoader是各大主机厂在线更新ECU软件普遍使用的方法,本文开发的BootLoader上位机,可以快速的对ECU软件进行在线更新,克服了传统升级方法的缺陷。
1 BootLoader流程
在上电或复位后,ECU 首先執行 Bootloader 代码。Bootloader 首先执行一些基本的初始化,然后检查外部重编程请求标志位是否为有效,如果重编程请求标志位为有效,即使应用程序是有效的,Bootloader 也会继续运行。如果当前没有重编程请求,即重编程请求标志位为无效,则检查应用软件的状态:如果应用程序是有效的,则应用程序代码将被执行;如果应用程序是无效的,则继续执行 Bootloader 代码。
重编程分为三个编程阶段,预编程阶段、主编程阶段、后编程阶段。
预编程阶段用来为要下载的 ECU 做重编程前的 CAN 网络准备,此阶段的请求报文采用的是物理寻址和功能寻址。预编程阶段的流程如图1所示,白色框代表功能寻址,蓝色框代表物理寻址,此阶段的主要步骤如下:
(A)诊断会话控制:使ECU首先进入扩展会话模式。
(B)例程控制--检查编程预条件:通过此例程来检查 ECU 编程条件,从而确保系统安全,如果有任何不安全的因素,ECU 应该拒绝编程。
(C)控制 DTC 设置:诊断工具通过功能寻址发送该请求给同一网段所有的 ECU,将 DTC 设置为关闭,确保在刷写过程中,ECU不再记录故障码。
(D)通信控制:诊断工具通过通信控制服务请求,禁止非诊断报文的发送和接收,以降低总线负载率,确保刷写流程的正常进行。
主编程阶段是对单个 ECU 进行编程,用来将需要更新的软件传输到ECU内部存储器,如图2所示,此阶段的请求都使用物理寻址,主要步骤如下:
(A)诊断会话控制:使ECU进入编程会话模式。
(B)安全访问:编程前必须通过安全访问,确保只有合法的诊断工具才能对 ECU 进行编程操作。
(C)驱动下载:当 ECU 的ROM中没有FlashDriver时,将执行FlashDriver的下载,FlashDriver用来对ECU的ROM空间进行擦除。
(D)写入指纹数据:在擦除内存之前,首先将指纹数据写到 ECU 内存中。指纹数据标识了是哪个诊断工具对 ECU 内存做了修改。
(E)例程控制--擦除内存:为保证应用软件和数据能够正常下载,需要擦除ECU 的内存,通过例程控制服务来执行擦除内存,同时应用软件的标志位将被置为无效。
(F)下载过程:将应用软件或者数据的每一个数据块下载到 ECU 的ROM中,首先执行请求下载的命令,告知ECU将要下载的数据地址和长度,然后使用数据传输服务,传输下载的数据,最后,使用结束传输命令结束数据传输过程。
(G)例程控制--检查编程完整性:所有的数据传输完成后,此例程用CRC32校验算法来校验传输数据的完整性。
(H)例程控制--检查编程依赖性:当完成所有的应用软件或数据的下载后,诊断工具启动一个例程来触发 ECU 检查重编程的依赖性,以确保所有逻辑块的兼容性和一致性。
后编程阶段主要是用来重启ECU,恢复总线通信和故障码记录,此阶段的请求报文采用的是物理寻址和功能寻址,流程如图3所示。
(A)ECU复位:通过请求ECU 复位服务使 ECU 结束重编程过程,并返回到正常的工作模式。
(B)诊断会话控制:将ECU的会话模式切换到扩展会话模式。
(C)控制 DTC 设置:诊断工具通过将 DTC 设置类型设为开启,使能所有的ECU重新开始记录故障码。
(D)通信控制:诊断工具通过通信控制服务请求,启动所有ECU的非诊断报文的发送和接收,以恢复正常总线通讯。
2 上位机软件开发
上位机软件在Visual Studio 2015平台,使用C#语言开发,采用分层的设计方法,将软件分为应用层、中间层和驱动层,使得软件具有清晰的层次结构,如图4所示,同时集成了Kvaser、USBCAN、Vector1600和ValueCAN4的硬件驱动,实现了对多种总线设备的支持,同时预留API接口,使得上位机能够扩展,从而支持更多的设备,并且能够设置波特率,支持两路软件通道,大大增加其使用范围。
整个软件流程是按照BootLoader流程进行开发的,具体流程如5所示,上位机使用多线程的方式接收总线报文,开辟一片新的存储空间来存储接收到的总线报文,使用软件过滤的方式来获取接收到的诊断报文,所有接收到的诊断报文都放进列表类型的数据结构中,上层应用软件调用专门的API接口来获取列表中的诊断报文。
上位机可以支持S19、Hex和Bin类型的文件刷写,通过对这些文件的解析,将地址连续的数据构造成一个数据块对象,保存文件中各段数据的起始地址、数据长度和数据内容,再将所有的数据块按地址排序,构造一个数据块列表。利用34h请求传输服务,将数据的地址和长度发送给ECU,然后用36h数据传输服务将数据传输到ECU中,每块数据传输完后,用37h请求传输退出服务来结束本块数据的传输,数据传输流程如图6所示。
3 总结
该上位机集成Kvaser、USBCAN、Vector VN1600和ValueCAN4等设备的驱动程序,支持多种CAN总线接收设备,具有很强的通用性,同时遵循标准的UDS协议,网络层利用ISO 15765-2进行数据传输,应用层使用ISO 15765-3定义的服务,从而能够对各类ECU进行软件更新,该上位机经过多次实车与台架测试验证,确保能够持续稳定运行,并且快速准确的实现ECU软件更新,加快主机厂控制器的研发和测试速度,同时为车辆的售后维护提供支持。
参考文献
[1] Road vehicles-Unified diagnostic services (UDS). ISO14229-1,2013. 2013.
[2] Road vehicle-Diagnostic on Controller Area Networks(CAN)- Part2Network layer services. ISO. ISO15765-2. 2004.
[3] Road vehicles-diagnostics on controller area networks ( CAN)-part 3:implementation of unified diagnostic services(UDS on CAN). International Standard Organization. ISO 15765-3 . 2004.
[4] 胡學钢.C#应用开发与实践[M].上海:人民邮电出版社,2012.