Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1053991
  • 博文数量: 178
  • 博客积分: 10222
  • 博客等级: 上将
  • 技术积分: 2215
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-03 11:27
个人简介

有所追求

文章分类

全部博文(178)

文章存档

2012年(1)

2011年(5)

2010年(3)

2009年(78)

2008年(91)

我的朋友

分类:

2009-03-26 10:43:25

作者:廖洪浪 ,孙泽昌 来源:微计算机信息
摘  要:结合国外汽车厂商广泛采用的车载诊断协议KWP 2000,对LIN总线下的ECU在线编程进行研究和方法设计,并对具体的硬件设计与软件实现进行了分析与阐述。
关键词:KWP2000;ECU在线编程;LIN总线;MC9S08AW60

1. 引言

在汽车故障诊断领域,针对诊断设备和汽车ECU之间的数据交换,各大汽车公司几乎都制订了相关的标准和协议。其中,国外汽车厂商,包括大众、通用、奔驰、戴姆勒-克莱斯勒、JEEP、三菱、道奇等广泛使用的一种车载诊断协议标准是KWP2000(Key Word Protocol 2000)。该协议实现了较为完整的车载诊断服务,并且满足OBDII诊断要求。

LIN总线(Local Interconnection Network)是一种单线车载网络,采用类似于标准串口的通讯格式,由于其协议简单,通信可靠性好,实现成本低,近年来得到了迅速的发展。

2.基于KWP2000的ECU在线编程研究

ECU的在线编程指ECU处于工作状态时通过网络通信更新其中的应用程序,从而实现改善控制器性能、提高安全性、改善排放、改善燃油经济性、提高用户满意度等目的,在设计和试制阶段,该功能的实现为程序的更新提供极大的方便。

与传统的一对一的在线编程方式不同,由于KWP2000在网络上传输,必须考虑其它控制器的反应,必须对目标控制器作出正确的识别,必须保证数据传输的完整性等等。基于KWP2000协议ECU在线编程包括以下步骤:

1)       切换到扩展诊断状态:该步骤用于将控制器切换到一个特别的诊断状态,使得系统可以响应扩展诊断命令。

2)       识别ECU:该步骤用于上位机识别特定ECU及相应软硬件和数据的版本信息,上位机由此可决定能否执行FLASH在线编程。

3)       关闭网络上所有控制器的故障码识别和存储功能:该步骤禁止控制器在接下来的编程期间检测和记录故障。

4)       关闭常规信息传递:该步骤禁止所有控制器的常规信息传送,使网络上只有诊断和网络管理消息收发,为在线编程让出足够的总线带宽。

5)       启动在线编程模式:将控制器切换到代码保护区运行Bootloader程序,该模式关闭了中断,因此具有较快的响应速度。

6)       开启安全限制:允许在线编程过程中的安全功能,开启这些安全功能后使得ECU可以执行特定的过程。

7)       下载软件锁:上位机将关键代码下载到ECU,执行这些代码可完成FLASH的擦除和重写。

8)       擦除FLASH:ECU执行上一步骤收到的关键代码,擦除完成后,ECU将清除该段关键代码。

9)       下载数据:该过程下载新的程序到ECU的FLASH。

10)       校验数据:在此过程中ECU检查下载的数据,如果判断为正确,则在FLASH中写入识别码和代码校验数据。

11)       复位ECU:ECU执行复位,恢复到正常工作状态。

12)       开启常规信息传递:重新开启网络上其它控制器上的常规信息传递。

13)       开启故障码识别和存储功能:重新开启网络上其它控制器的故障码识别和存储功能。

3.基于KWP2000的ECU在线编程设计与实现

3.1 硬件设计

系统CPU采用Freescale公司的MC9S08AW60,该芯片内部集成了标准串口控制器,LIN总线驱动器采用了PHILIPS公司的TJA1020,驱动部分电路如图1,由硬件部分实现了通信协议的物理层和数据链路层。

图1. LIN总线驱动部分电路图

3.2 软件设计与实现

3.2.1 内存地址分配

MC9S08AW60的存储空间分配如图2:

图2. 存储空间分配示意图

以下代码实现了上述的芯片配置。

/*设代码保护区为 0xfc00~0xffff */

const volatile NVPROTSTR _NVPROT@0x0000ffbd = {0xfa};

/*关闭芯片后门锁,打开中断向量表重映射,新的中断向量表地址为0xfbc0~0xfbff */

const volatile NVOPTSTR _NVOPT@0x0000ffbf = {0x3e};

3.2.2 软件实现

ECU程序的状态切换流程图如图3:

图3. 程序状态切换流程图

说明:

1)根据上位机的KWP2000指令,程序在以下5种工作状态中切换,如表1:

表1  程序工作状态表

2)通信中用到以下KWP2000命令,如表2:

命令

对应代码

切换到扩展诊断过程命令

10 92

查询目标ECU识别码命令

查询ECU ID

1a 87

查询应用代码ID

1a 9c

查询Bootloader程序ID

1a 9e

查询数据区ID

1a 9d

禁止故障码记录命令

85 02 ff 00 01 01

禁止常规通信数据收发命令

28 02

开启安全限制命令

请求密码种子

27 05

回复安全密码

27 06

切换到编程模式命令

10 85

数据传送命令

请求下载数据

34 xx

数据传送

36 xx

请求结束下载

37 xx   

数据校验

31 e1 01

开启常规通信数据收发命令

29 02

开启故障码记录命令

85 02 ff 00 02

复位命令

11 01

表2: 命令说明表

3)由于芯片结构的原因,程序在写flash时必须跳到RAM中执行,以下代码定义了用于存储关键代码的RAM空间和指向该空间的函数CriticalProcess()。

volatile unsigned char criticalProcess[100];  /* 定义RAM空间用于存储关键代码 */

#define CriticalProcess ((void(*)(void))( criticalProcess)) /*定义函数指向RAM*/

在线编程过程中程序将接收到的目标代码放入RAM中,接收完成后调用CriticalProcess()来实现FLASH擦除和重写。

4)由于应用代码的起始地址是0x1860,我们用如下方法定义应用程序Application()的起始地址为0x1860,在Bootloader程序中直接调用该函数即可实现Bootloader程序向应用程序的跳转。

#define Application ((void(*)(void))(0x1860)) /* 定义0x1860为应用程序起始地址*/

3.3 实现效果

通过以上硬件和软件,实现了ECU的在线编程,并达到了以下的几个效果:

1)  程序每次上电启动都从Bootloader启动区运行并等待一定时间,使得在线编程无论成功与否都始终可以进行编程升级。

2)  程序开始部分先检测复位原因,如果是上电启动则进入Bootloader程序,否则进入用户程序,使得程序在运行过程中受到干扰复位后可立即重新进入应用程序。

3)  ECU在编程过程中进行了状态判断、密码交换和数据校验,有效地保证了整个编程过程的正确性。在线编程完成后当场校验,将特征码写入特定区域,以此来判定应用程序是否合法,正确的特征码保证了应用程序的正确性。

4)  应用程序同样支持KWP2000命令,使得程序无论在Bootloader区或应用程序区均能随时根据KWP2000指令进入编程状态。

5)  由于将FLASH擦除子程序和烧写子程序作为软件锁,在FLASH编程过程中才将其下载到RAM中,并在FLASH烧写完成后将其清除,所以在整个芯片中没有FLASH的改写程序,避免了程序在运行过程中遇到干扰而异常破坏程序的现象。

4. 结束语

从网络的分层结构看,KWP2000属于应用层协议,可以应用在各种底层通信协议上,本文讨论了该协议在LIN总线物理层和数据链路层上的应用。近年来CAN总线得到了全球各大先进汽车厂商广泛的应用,本文中的研究内容对进一步在CAN总线上实现同样的在线编程过程有着一定的借鉴和示范作用。

参考文献:

[1] ISO 14230-3. Road Vehicles- Diagnostic Systems - Keyword Protocol 2000 - Implementation.

[2] Daimler Chrysler. ECU flash reprogramming requirements definition. 2002.8

[3] 常越. M68HC08单片机原理及C语言开发实例 北京航空航天大学出版社 2005.9

[4] 崔俊锋、袁涛,车身混合网络中CAN/LIN网关的设计与实现[J].微计算机信息,2006.03-2,P:201-204

[5] Freescale Semiconductor. MC9S08AW60 datasheet Rev2. 2006.12

[6] Freescale Semiconductor. Developer’s Serial Bootloader for M68HC08 and HCS08 MCUs. 2006.8

阅读(2512) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~