基于MC9S12XS128的车载控制器CANBootloader的设计与实现.docx

基于MC9S12XS128的车载控制器CANBootloader的设计与实现.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

基于MC9S12XS128的车载控制器CANBootloader的设计与实现

?

?

田洪杰孔微

【摘?要】飞思卡尔MC9S12XS128控制器刷写程序按照常规做法需要使用BDM下载器通过专用接口进行刷写,在车载控制器的开发过程中需要频繁的进行程序刷写操作,传统的刷写方式操作十分不便。Bootloader技术能够使用通用接口对单片机程序进行刷写,本文基于MC9S12XS128对Bootloader技术进行了应用和验证,并成功的实现了通过CAN接口对程序的刷写操作。

【关键词】Bootloader;單片机;CAN总线

1.技术背景

车载控制器的开发周期长,程序控制逻辑复杂,在开发过程中会经常对控制器的程序进行升级、更改。传统的程序下载接口需要使用专用下载器进行程序的刷写、修改,当控制器装车后,如果需要修改程序,就需要重新拆卸控制器,操作极为不便。bootloader技术是预先在单片机中刷入一个底层服务程序,实现通过通用接口(如串口或者CAN接口)对单片机中的程序进行刷写,无需对控制器进行重复拆装,极大的方便了控制器的开发过程。也为后续产品程序的更新升级提供了更便捷的途径。

MC9S12XS128简介:

MC9S12XS128单片机是Freescale的一款成熟的16位经型通用控制器,满足车载环境要求,在汽车电子、工业控制等领域具有广泛的应用。本文将使用MC9S12XS128单片机并通过其CAN接口实现bootloader功能。

2.CANBootloader总体设计

Bootloader使用CAN接口进行数据通信,因此在单片机上电后需要对CAN接口进行必要的初始化设置,当初始化完成后,bootloader会监听通信接口的指令,如果收到bootloader刷写命令,bootloader程序会跳转到程序刷写模式。接收上位机发送的程序数据并写入到单片机的P-Flash中,即完成用户程序的刷写。在控制器实际使用时,大多数情况下是为了执行控制功能,因此在没有刷写任务时应当自动跳转到用户程序执行。在Bootloader的监听逻辑中,加入了一个延时判定条件,当端口上长时间(2s)没有收到来自上位机的连接指令,Bootloader将会跳转到用户程序的起始地址,并执行用户程序。

3.自定义协议

Bootloader使用的是通用数据接口,在CAN总线上同时还会有其他数据的交互。因此需要给bootloader程序和上位机规定一套通信协议,来区分数据指令和bootloader刷写指令。本次设计中,将上位机的ID设置为02即只有报文的ID为02时才判定为执行bootloader相关的指令,另外还规定了进行flash操作的口令以及进行flash擦除、flash写入等指令操作的代码等,协议规则如下。

4.内存划分

Bootloader程序与用户程序需要分别存储在不同的内存区域,这样在程序执行时才能避免两个程序的数据相互干扰。因为Bootloader程序在程序启动时就需要执行,所以把bootloader划分到存储区域的起始区块,剩余区域划分为用户区域,用于存储用户程序,用户程序存储区域的起始划分为向量表地址。地址的划分可以在程序工程的prm文件中进行,具体的地址划分如下。

0x4000TO?0x43FF;//1kB?用于bootloader

0x4400TO?0x47FFRELOCATE_TO0x3C00;//映射到RAM

0xC000TO?0xDEFF;//用户程序中断向量表

0xE100TO?0xFEFF;//用户程序

划分完成后在编写程序时将程序按照划分的地址进行分配即可。

5.Bootloader运行实现

在Bootloader执行flash刷写操作时,因为刷写的是程序存储区域,需要将程序(bootloader程序)复制到单片机RAM中运行。在bootloader的通信程序中用到了CAN接收中断,在RAM中运行程序时,需要将Bootloader的中断向量表映射到内存中的相应区域,程序复制到RAM和中断向量偏移代码如下。

MoveCodeIntoRam((byte*)0x4400,(byte*)0x3C00,0x400);//代码复制到RAM

IVBR=0x3F;?//偏移中断向量表

*(UINT16*)(0x3F00+0xB2)=(UINT16)CAN_receive;//中断向量重定向

Bootloader程序复制到RAM中运行后,就可以进行P-Flash的刷写操作。通过CAN接口接收上位机发送的数据并将数据写入到对应的地址。需要注意的是MC9S12XS128单片机在执行Flash擦除操作时最小擦除单位是1扇区,写入时是一次写入8个字节。当bootloader

文档评论(0)

159****1290 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档