电 子 测 量 技 术
ELECTRONIC MEASUREMENT
TECHNOLOGY
第 40 卷 第 2 期
2017 年 2 月
基 于 CAN 总 线 UDS 服 务 BootLoader 应 用 开 发
汪春华 白稳峰 刘胤博 张玉稳
(中国汽车技术研究中心 汽车工程研究院 天津 300162)
摘 要 : 在车身控制器的开发及生产过程中 ,针对已安装控制器更新程序困难的问题 ,设计提出基于 UDS 协议并应
用于英飞凌 16 位单片机平台的在线升级方案 。 该方案采用 CAN 总线完成上下位机的通讯及数据交互 ,结合 UDS 中
的诊断服务和下载流程 ,实现基于 UDS 协议 BootLoader 开发 。 该功能为汽车电子产品开发提供更好的可扩展性 ,节
约开发周期 ,为整车厂软件管理和升级提供更快捷 、可靠手段 。 实验结果表明 ,系统能够很好的完成软件在线升级 ,并
在刷写效率 、成功率 、稳定性上都很好的满足了设计需要 。
关键词 :CAN ;UDS 协议 ;BootLoader 流程
中图分类号 :TP23 ;TN409 文献标识码 :A 国家标准学科分类代码 :
Boot loader application and development based CAN bus UDS service
(China Automotive Technology and Research Center ,Automotive Engineering Research Institute ,Tianjin 300162 ,China)
Wang Chunhua Bai Wenfeng Liu Yinbo Zhang Yuwen
Abstract :In the process of body control module development and design ,according to the difficult problem to update
the program for installed controller ,the design based on UDS protocol put forward the online upgrade scheme which
applied to infineon 16bit microcontroller platform .The scheme adopts CAN bus complete upper machine and lower
machine communication and data interaction ,based on diagnostic services and download process in the UDS ,it
implemented the development of BootLoader based on UDS .This feature provides better scalability for automotive
electronics product development ,saves development cycle ,and provides faster and more reliable means for software
management and upgrading of OEMs .The experimental results show that the software can be upgraded on‐line ,and it
can meet the design requirements in the efficiency ,success rate and stability .
Keywords :CAN ;UDS protocol ;BootLoader flow
1 引 言
汽车电子在 电子技术和汽车集成 技术发展下迅猛发
展 ,为汽车安全性和舒适性升级提供可靠技术支持 。 目前
几乎所有乘用车和商用车都应用 CAN 总线 [1]技术 ,作为整
车系统间信息流交换的核心系统 ,CAN 总线的发展和应用
日渐普及 。 CAN 总线能适应比较大容量数据交换 ,并有可
靠技术保证 ,这为诊断服务和 BootLoader 提供技术支撑和
物理通道 。
UDS (unified diagnostic services )诊断 服 务 [2] 协 议 有
一套完善的国际体系标准 ,在 CAN 总线应用日益广泛的
基础上 ,其在整车厂和零部件厂商应用也得到推广 ,为整车
厂面对各种不同的零部件和开发厂商 ,采用一套完整的诊
断服务提供手段 ,提升整车厂汽车电子产品管理能力和效
率 ,也为汽车电子零部件开发相关诊断部分提供高复制性 ,
减少开发周期和成本 。 BootLoader [3] 是基于 UDS 服务 的
程序软件下载方式 ,在 CAN 总线和 UDS 没有广泛应用之
前 ,程序下载有多种方式 ,如 RS232 、SPI 、JTAG 等协议方
式 ,这些方式没有统一标准和流程 ,下载数据可靠性也没有
完善保证 ,目前逐步被基于 CAN 的 UDS 服务 BootLoader
代替 ,这种下载方式有比较好国际参考标准 ,针对国际参考
标准 ,制定在规范和流程上相对统一下载模式 ,每个整车上
只需要在数据流细节上根据自己的需要定义不同的数据结
构 。 该软件更新方法基于 CAN 和 UDS 服务 ,CAN 有可靠
数据性保 护 机 制 ,UDS 有 安 全 服 务 流 程 ,故 在 该 机 制 上
BootLoader 快 速 、可 靠 、安 全 、可 复 用 、易 管 理 的 特 点 明
显 [4] ,在主机厂应用处于优势地位 ,并随汽车电子技术进步
与产品换代 ,逐步统一到该机制只是时间问题而已 。
收稿日期 :2016‐12
·661·
万方数据
汪春华 等 :基于 CAN 总线 UDS 服务 BootLoader 应用开发
第 2 期
2 Bootloader 应用 UDS 服务
基于 UDS 的 BootLoader 在 线 程 序 刷 新 操 作 需 要 按
UDS 协议规则流程来处理会话 [5] ,其用到的 UDS 服务会
话如下 :
1)诊断会话控制(DiagnosticSessionControl 0x10)
诊断会话控制服务由 TESTER 发起请求 ,ECU 响应
请求 ,请求第一个字节 0x10 ,第二个字节模式定义字如表 1
所示 ,表示 ECU 处于不同的诊断 会 话 模 式 ,在 TESTER
请求不同模中 ,其中 1 代表默认会话模式 ,2 代表编程模
式 ,3 代表扩展会话模式 ,BootLoader 是在编程会话模式下
完成 ,ECU 回应肯定回答 ,则 ECU 处入编程模式下 ,会话
请求如表 1 所示 。
表 1 诊断会话控制
Byte
0
1
TESTER(ECU [Service] :Request
10H
Service Identifier
Contents
Hex Value
DiagnosticSessionType
0x01\0x02\0x03
2)读取数据(ReadDataByIdentifier 0x22)
读取数据由 TESTER 发起请求 ,ECU 响应 ,并通过肯
定答返回 TESTER 所需要的 信息 ,和 Bootloader 相关 的
ECU 信息主要有车辆 VIN 号 ,已下载软硬件版本 ,已下载
次数 ,最后一次下载时间 ,该 信息主要用在 Bootloader 下
载过程中 TESTER 对比 ECU 信 息 ,信息对比正确 ,则下
载软件进入下一步流程 ,否则下载终止 ,该服务是保证下
载软件可靠性和安全性重要保证 。
3)安全访问(SecurityAccess 0x27)
该服务请求被用于通过改变不同的安全级别来访问
受保 护 的 功 能 。 在 Bootloader 下 载 模 式 下 ,操 作 步 骤
如下 :
a) TESTER 请求种子 (Seed) ,ECU 返回随机种子数
(Seed) 。
b) TESTR 过加密算法算出密钥并发送密钥 (Key ) ,
ECU 发送肯定响应 (Key 有效 )然后通过 Bootloader 安全
级别访问 。
4)请求下载(Requestdownload 0x34)
请求下载服务是开始启动从 TESTER 到 ECU 的数
据传输(请求下载 ) 。 当 TESTER 接收到该服务有效的请
求报文后 ,ECU 应根据软件下载要求 ,准备擦写前逻辑条
件工作 ,并做相应软件下载前地址校验工作 ,在返回肯定
应答报文后做好接收据的准备 ,下载服务包含主要信息有
下载数据块址和大小 ,各占 4 Byte 。
5)传输数据服务(Transferdata 0x36)
传输数 据 服 务 用 于 TESTER 向 ECU 传 输 数 据 (下
载) 。 该服务是 UDS 多包连续传输机制 ,是软件下载主要
万方数据
过程 ,传输服务请求报文包含下载数据块序列号 ,该序号
用于保证 连 续 多 包 传 输 过 程 中 数 据 的 位 置 和 错 误 识 别
能力 。
6)请求退出传输(Requesttransferexit 0x37)
该服务用于退出 TESTER 和 ECU 之间的数据传 输
(下载 ) ,当 TESTER 完成所有软件数据下载后 ,就启动该
命令 ,当 ECU 接 收 到 该 命 令 后 ,在 完 成 软 件 完 整 性 检 查
后 ,给出肯定应答 ,下载数据过程完成 。
7)电控单元复位(Ecureset 0x11)
电控单元复位在所有 BootLoader 过程正常完成后 ,该
服务用于复位 ECU ,使得 ECU 通过逻辑执行应用程序 。
3 BootLoader 下载流程
Bootloader 通过 UDS 协议实现 ,其有特定流程 ,每家
整车或零部件都有其不一样的流程 [6] ,在本项目 中 ,采 用
流程如图 1 所示 。
图 1 Bootloader 下载流程
·761·
第 40 卷
电 子 测 量 技 术
步骤 1 :
刷新事件由诊断会话控制 ,子服 务为程序刷新服务 ,
物理寻 址 /功 能 寻 址 的 诊 断 会 话 控 制 ( $ 10 )服 务 开 始 ,
ECU 响应为肯定应答 ,进入 BootLoader 下载过程 。
步骤 2 :
TESTER 获 取 电 控 单 元 的 物 流 数 据 ,该 数 据 存 在
FLASH 存 储 器 中 ,BootLoader 上 载 车 辆 识 别 代 码 、ECU
单元硬版本 、ECU 软件版本 、最后下载日期和下载次数 ,逻
辑对比软件 是 否 是 本 车 型 安 装 版 本 ,软 硬 件 版 本 是 否 匹
配 ,下载时间和次数逻辑正确 ,通过这些校验信息 ,保证软
件下载匹配可靠性 [7] 。
步骤 3 :
TESTER 在软件 下 载 过 程 中 ,需 要 种 子 匹 配 解 锁 过
程 ,TESTER 首先向 ECU 请求种子数 ,一般种子数为一随
机数字 ,得到种子数后 ,TESTER 根据密钥算法算出密钥 ,
同时 ECU 也根据密钥算出密钥 ,TESTER 把计算出来的
密钥发给 ECU ,由 ECU 去识别是否密钥匹配 。
步骤 4 :
现在汽车电子产品程序一 般都较大 ,需要 UDS 多包
传输协议实现软件下载 ,大块数据传输以 3 个 UDS 协议实
现 [8] 。
第一步通过请求下载 (MYM 34)启动软件下载 ,并把
软件首地址和大小信息下载给 ECU 。
第二步通过传输数据 (MYM 36)实现软件数据传输 ,
数据块使用多个传输数据请求完成软件数据下载 ,在每个
数据传输过程中 ,需要做数据校验 。
步骤 5 :
ECU 接收到 TESTER 请求退出传输服务 (MYM37 )
的请求报文时 ,应算法计算下载到 FLASH 存储器的数据
的校验值 ,并在肯定应答报文中将该值发送给 TESTER 。
TESTER 将 ECU 发送校验值与本地的校验值相比较 ,若
二者相等 ,需要检查软件完整性 ,检验和完整性正确则软
件下载成功 ,更新软件有效标志位 [9] 。
步骤 6 :
ECU 使用软件 复 位 使 下 载 的 应 用 软 件 /应 用 数 据 生
效 ,并在复位后运行应用程序 。
4 BootLoader 下载 FLASH 配置
BootLoader 在 Infineon 单片机 16 位控制器平台实现
功能 ,这里采用 Infineon16 位单片 机 XC2265 ,XC2265 是
Infineon 车身平台一款 MCU ,满足汽车电子性能和成本要
求 ,在 车 身 控 制 上 应 用 广 泛 ,在 软 件 下 载 前 ,需 要 对
Infineon 单片机 16 位单片机 XC2265 的程序存储器进行配
置 。 XC2265 的程序储存器地址如表 2 所示 。
如表 2 所示 ,XC2265 有两块 Flash 存储器 ,在此应用
过程中 ,把这两个存储空间分成 3 个数据储存部分 ,分别
存放应用程序 、BootLoader 程序 、产品参数存储空间 ,软件
·861·
万方数据
表 2 存储器地址表
起始地址
XC2265 程序存储器地址表
C4FFFFH
C40000H
C00000H
C3FFFFH
结束地址
大小/KB
64
256
名称
Flash0
Flash1
配置默认启动地址为 Flash0 的 C00000H ,分配地址表如表
3 所示 。
表 3 程序储存表
名称
起始地址
XC2265 程序存储器数据分配表
结束地址 大小/KB
C4FFFFH
C2FFFFH
C3FFFFH
Bootloader 程序 C40000H
C00000H
C30000H
应用程序
参数存储
64
191
64
5 应用和 BootLoader 程序功能实现
在汽车电子产品软件开发过程中 ,一般包括应用程序
和 BootLoader 程序 ,应用程序是产品正常使用过程中执行
的程序 ,实现满足产品正常功能 。 BootLoader 程序是在正
常应用程 序 需 要 更 新 时 ,在 不 需 要 其 他 工 具 手 段 ,通 过
CAN 总线实现正常应用程序的更新和升级 。 两个程序在
同一 个 MCU 中 ,就 需 要 一 套 转 换 程 序 逻 辑 [10] ,如 图 2
所示 。
图 2 应用和 BootLoader 程序流程装转换
针对开发的 BootLoader 程序选择不同大小的应用程
序进行刷写测试表明 ,该设计方案在程序刷写效率 、刷写
汪春华 等 :基于 CAN 总线 UDS 服务 BootLoader 应用开发
第 2 期
成功率 、刷写稳定性上都满足了设计需求 ,实验数据如表 4
所示 。
表 4 刷写测试数据
文件大小/KB 平均时间/s 刷写次数/次 是否成功(Y /N )
50
100
150
200
15
28
43
57
.0
.2
.5
.7
10
10
10
10
Y
Y
Y
Y
1)产品 ECU 上电后复位启动 ,软件从 C00000H 地址
开始执 行 程 序 ,初 始 化 中 断 向 量 表 ,硬 件 内 存 ROM 和
RAM 资源 ,配置相关功能寄存器和输入输出硬件接口寄
存器 。
2)软件从参数存储地址读出 BootLoader 程序执行标
志 ,标志有效 ,则执行 BootLoader 程序软件入口 ,否则执行
应用程序软件入口 。
3)执行 BootLoader 程序之前 ,先检测 BootLoader 程
序的有效性 ,如有效则执行 BootLoader 程序软件 ,否则执
行应用程序软件 [11] 。
4)运行进入 BootLoader 程序后 ,按 BootLoader 下载
流程下载更新软件 ,软件更新完成后 ,清除 BootLoader 下
载标志 ,最 后 通 过 UDS 协 议 Ecureset 软 件 复 位 MCU ,
MCU 复位后 ,通过 BootLoader 下载标志无效进入执行应
用程序 。
5)在应用程序执行过程中 ,需要通过 BootLoader 下载
软件更新应用程序 ,先通过应用程序 UDS 服务启动会话
服务 ,会话服务开始后 ,通过密钥解锁程序下载 。
6)解锁程序下载解锁后 ,置位 BootLoader 下载标志 ,
最后通过 UDS 协议 Ecureset 软件复位 MCU ,MCU 复位
后 ,通过 BootLoader 下载标志有效进入 BootLoader 下载
过程 。
配合基于 CAN 总线 UDS 服务的 BootLoader 下载过
程 ,项目编写基于 PC 上位机 软件下 载 界 面 和 程 序 ,通 过
PC 连接具有 USB 接口的 CAN 接口卡 ,实现 BootLoader
下载功能 ,并用于汽车电子产品开发 ,实现功能界面和实
例如图 3 所示 [12] 。
5 结 论
基于 CAN 总线 UDS 服务的 BootLoader 下载过程应
用开发 ,实现了基于 CAN 总线应用程序在线更新 ,在不需
要附加目标产品外加附件或工具情况下 ,在产品正常应用
工作过程中更新应用程序 ,方便车零部件产品升级 ,解决
汽车电子产品程序升级快捷性 ,同时该软件下载更新是基
于 UDS 服务 ,保证零部件产品软件更新统一性 ,为升级和
售后服务减少工作量 ,提高效率 。 基于 UDS 服务的软件
更新 ,有一套严格流程 ,保证软件更新可靠性 。
万方数据
图 3 BT 下载功能界面和实例
参考文献
[1] 姜晓梅 ,李祥和 .基于 ARM 的 IAP 在线远程升级技
术[J] .计算机应用 ,2008 ,28(2) :519‐521 .
[2] 蒋建春 ,陈洪霞 ,郑太雄 .基于 CCP 的 ECU 在线编
程技术 的 实 现 [J ] . 计 算 机 工 程 , 2011 , 37 (5 ) :
241‐243 .
[3] 朱少辉 ,夏超英 .基于 CAN 总线的 ECU 在线编程
技术[J] .单片机与嵌入式系统应用 ,2014 ,14(1) :
24‐27 .
[4] 张艳 ,鲍可进 .整车控制器 BootLoader 的设计与实
现[J] .计算机工程 ,2011 ,37(12) :233‐235 .
[5] ISO 14229 : 2006 Road vehicles‐Unified diagnostic
services(UDS ) - Specification and requirements [S ] .
Switzerland :ISO ,2004 .
[6] ISO 15765‐3 : 2004 Road vehicles‐Diagnostics on
controller
3 :
Implementation of unified diagnostic services (UDS
on CAN) [S] .Switzerland :ISO ,2004 .
[7] 殷树明 ,王宜怀 .嵌入式系统中多用户程序在线编
程技术[J] .计算机工程 ,2009 ,35(5) :37‐39 .
[8] 廖洪良 ,孙泽昌 .基于 KWP2000 的 ECU 在线编程
研究及 应 用 [J ] . 微 计 算 机 信 息 , 2008 , 24 (3 ) :
250‐253 .
[9] 张宏 ,詹德凯 .基于 CAN 总线的汽车故障诊断系统
[10] 曹传云 ,陈志刚 .汽车电控发动机诊断服务功能的
研究设计[J] .2011 ,37(15) :232‐237 .
( CAN )‐Part
area
networks
·961·
第 40 卷
电 子 测 量 技 术
开发与应用[J] .汽车工程师 ,2010(8) :43‐45 .
[11] 王琦 , 黄 悦 鹏 , 邢 正 阳 , 等 . 基 于 CAN 总 线 的
BootLoader 设 计 与 实 现 [J ] . 微 型 机 与 应 用 ,
2015(18) :14‐16 .
[12] 司宝锋 ,孟鹏花 .基于 CAN 总线的 BootLoader 设
计[J] .仪表技术 ,2010(3) :30‐32 .
作者简介
汪春华 ,1974 年出生 ,中国汽车技术研究中心汽车工
程研究院高级工程师 ,主要研究方向为汽车电子 。
E‐mail :chunhw @ 163 .com
·071·
万方数据