曙海教育集团论坛DSP专区DSP2000技术讨论 → 基于KWP2000的ECU在线编程研究及应用


  共有3516人关注过本帖树形打印

主题:基于KWP2000的ECU在线编程研究及应用

美女呀,离线,留言给我吧!
wangxinxin
  1楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:青蜂侠 帖子:1393 积分:14038 威望:0 精华:0 注册:2010-11-12 11:08:23
基于KWP2000的ECU在线编程研究及应用  发帖心情 Post By:2010-11-20 12:43:25

.2.2 软件实现

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

图片点击可在新窗口打开查看

图3. 程序状态切换流程图
说明:

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

表1  程序工作状态表

图片点击可在新窗口打开查看

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

图片点击可在新窗口打开查看

表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总线上实现同样的在线编程过程有着一定的借鉴和示范作用。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

基于KWP2000的ECU在线编程研究及应用








签名