基于UDS协议的CAN BootLoader的开发与验证

2021-01-04 03:59余莹莹王法龙王定庚
客车技术与研究 2020年6期
关键词:下位上位总线

余莹莹, 王法龙, 杨 卓, 王定庚

(安徽安凯汽车股份有限公司, 合肥 230051)

随着汽车电子技术的迅猛发展,电控单元越来越复杂,新技术的出现导致电控产品需要不断更新换代,其在线程序升级就显得尤为重要。采用基于UDS协议CAN总线的BootLoader 来实现VCU软件代码的更新是一种有效的解决方案[1]。本文基于UDS协议中的诊断服务,设计一种CAN BootLoader来完成上下位机之间的通讯以及信息交互,实现对VCU程序代码的在线更新。

1 CAN BootLoader 系统总体设计

BootLoader程序是VCU上电后最先运行的一段代码,首先会对硬件设备进行初始化,同时会为相关的寄存器进行赋值,设置内核启动参数。初始化完成后,BootLoader会进入CAN总线通信循环等待上位机命令,当接收到启动命令后,它会将电控单元FLASH中的应用程序代码加载至系统内存RAM中,并跳转到应用程序入口开始运行;当BootLoader接收到上位机发送的下载命令后,它会通过CAN总线从上位机上将应用程序代码下载下来并烧写到电控单元的FLASH 中存储起来,从而实现VCU的在线程序下载功能[2]。

本文主要是基于UDS诊断服务协议,将上位机发送的数据经 USB转 CAN接口转换器转换成 CAN帧,发送至下位机的 CAN 接收缓冲区,下位机接收到信息处理后作出应答,并将数据帧通过 USB转 CAN接口转换器发送至上位机形成循环,实现信息交互。图1为 CAN BootLoader系统架构图。

图1 CAN BootLoader系统架构图

UDS(Unified Diagnostic Services)诊断服务协议[2]即 ISO 14229 统一诊断服务,是ISO国际标准化组织为实现车辆电子系统故障诊断服务而制定的统一国际标准。通过读取数据流获取 VCU 内部状态信息,是PC上位机与整车VCU 之间通信必不可少的一部分。在诊断规范中,定义了上位机和整车VCU 之间的请求响应规则,以及对于请求报文时整车VCU 的处理行为[3]。

基于UDS协议的CAN BootLoader在线程序升级刷新操作,需要依照 UDS 协议规则来处理会话, 用到相关的 UDS 服务有 VCU 握手识别、 数据之间的交互、 FLASH擦除、 数据写入及擦写保护等。

2 CAN BootLoader各部分具体设计

2.1 CAN BootLoader PC上位机设计

CAN BootLoader PC上位机是一个下载工具,主要用于配合VCU下位机 BootLoader 读取和下载升级应用程序代码。对于本文所使用的 MPC5534 芯片,通过其集成开发环境对应用程序进行编译后,生成下载所需的 S19 文件[4]。本文使用 Microsoft Visual Studio 软件设计 CAN BootLoader 的PC上位机通信界面,如图 2 所示。

图2 CAN BootLoader 上位机通信界面

在PC上位机程序中直接设置好发送帧类型、CAN 通道以及发送 ID 号等参数,在其通信界面上选择相应的目标设备以及波特率后,点击 Connect 按钮,初始化 CAN 成功后,点击界面上的 OpenFile 按钮,在文件路径选择目标 S19 文件,点击 Program 按钮,让PC上位机与VCU下位机建立 CAN 通信连接。当PC上位机和VCU下位机基于UDS协议规则流程成功握手后,PC上位机通过 CAN 总线不断向VCU下位机发送程序下载命令并等待来自下位机的响应,同时在上位机通信界面Record 显示框中观察接收到的 CAN 数据帧及相关信息。当目标 S19 文件全部解析并下载完成后,VCU 的新程序就升级完毕。

2.2 CAN BootLoader下载流程设计

VCU下位机 与PC上位机之间需通过 UDS 协议的下载流程规则来处理会话。本文UDS_BootLoader下载流程如图3所示,主要内容如下:

1) 首先进入待机握手阶段,PC上位机发送诊断会话扩展模式请求,VCU下位机肯定响应后进入BootLoader下载过程[5]。

2) 在程序下载之前,需进入安全访问服务。

图3 UDS_BootLoader流程图

3) 更新主程序之前,PC上位机需请求擦除FLASH服务,VCU下位机给予肯定响应后,此时程序擦除完毕。

4) 上位机发送下载服务请求VCU肯定响应。

5) 上位机接收到下载确认请求后,开始解析应用程序代码,通过CAN总线循环发送给VCU,进行数据传输。

6) 上位机将数据校验码发送给VCU,VCU对接收到的数据进行校验比对后,给予肯定响应,完成数据校验。

7) 上位机向VCU发送下载结束请求,VCU给出肯定应答后,下载数据完毕。

8) VCU复位重启后运行应用程序,程序刷写升级完成。

2.3 CAN BootLoader 的VCU下位机实现

VCU下位机按照UDS协议对PC上位机的请求进行响应。车辆上电后,嵌入式芯片一般都会在 FLASH 存储区首地址寻找程序代码并执行。FLASH 存储空间由 BootLoader 程序和应用程序共同占据[6]。BootLoader 是用户应用程序运行之前运行的一段程序,对硬件进行相应的初始化和设定,最终为操作系统准备好环境[7]。因此,CAN BootLoader 的嵌入式系统会在 FLASH 的起始段为 BootLoader 专门开辟一个较小的存储空间。BootLoader 代码作为芯片上电后需要最先运行的程序[8],其中断向量表首地址会与 FLASH 存储区首地址一致,而应用程序作为被引导的程序代码,则需配置在剩余空间内。

图4 VCU下位机BootLoader整体流程图

CAN BootLoader上位机与下位机的CAN信息交互,均使用标准帧ID[9]。本文中的下位机 CAN BootLoader 主要基于 CodeWarrior 5.1 软件开发,采用UDS协议规则对 BootLoader 存储空间实现读取、写入以及擦除功能。其整体流程[10]如图4所示。

3 CAN BootLoader 功能测试验证

基于 UDS 协议的 CAN BootLoader 开发好后,通过BootLoader上位机下载工具可以对VCU下位机内的BootLoader进行功能测试,具体测试方法如下:

1) 首先将装有上位机软件的 PC 机和事先刷写好 BootLoader 的 VCU 下位机通过 PCAN 卡相连,通过 CAN 总线建立通信,并在上位机上监测 CAN 通信信息。

2) 当VCU下位机上电时,启动上位机,CAN 初始化成功后向下位机发送握手请求。

3) 上位机和下位机建立连接后,将目标 S19 文件加载至上位机中,并对下位机发送下载请求,按照图3所示的UDS_BootLoader流程,将应用程序顺利地下载至 VCU下位机中,此时上位机通信界面上可以实时监测程序下载完成情况以及 CAN 报文信息,部分结果如图 5所示。

图5 下载CAN 报文信息

4) 重启VCU下位机,并下载一个与之前不同的应用程序,下载完成后,VCU下位机重启上电。通过上位机监测 CAN 总线报文,发现下载至下位机中的应用程序已被更换。

经过以上多次反复测试后,验证结果表明该 CAN BootLoader 在不同应用程序的刷写效率、刷写成功率以及稳定性上都满足设计需求,能够很好地实现应用程序的下载和升级功能。刷写测试数据如下:文件大小分别为10 kB、35 kB、133 kB、254 kB,对应的刷写时间分别为3.0 s、10.2 s、38.1 s、72.2 s,刷写次数都为15次,都刷写成功。

4 结束语

本文阐述了基于UDS协议的系统总体架构,设计了UDS_BootLoader通信流程,将应用程序 S19 文件通过 CAN 总线从设计的 BootLoader PC上位机界面下载至所开发的VCU下位机 FLASH 中进行功能测试。结果表明,该 CAN BootLoader 能够快速、稳定地实现对 VCU下位机的软件更新,为以后的升级 OTA 打下了基础。

猜你喜欢
下位上位总线
甲状腺手术中下位甲状旁腺的位置及其临床意义
上位词和下位词在初中英语补全对话中的应用与教学建议
关于CAN总线的地铁屏蔽门控制思路论述
某MT车型无法启动和怠速启停失效问题分析
一场史无前例的乐队真人秀
围观党“下位”,吐槽帝“登基”
基础油“上位”
Q&A热线
PCI9030及其PCI总线接口电路设计
基于VC的PLC数据采集管理系统