APP下载

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

2020-11-23田洪杰孔微

理论与创新 2020年18期
关键词:CAN总线

田洪杰 孔微

【摘  要】飞思卡尔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. 内存划分

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

0x4000 TO   0x43FF ;//1kB  用于 bootloader

0x4400 TO   0x47FF RELOCATE_TO 0x3C00;//映射到RAM

0xC000 TO   0xDEFF ;//用户程序中断向量表

0xE100 TO   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完成Flash刷写后,需要将程序的运行位置跳转到用户程序,程序代码如下。

asm LDX  startaddr;

asm JMP   0,X ;

上位机发送的跳转指令和启动后的超时跳转判断条件都能激活上述的跳转语句。

6. S19文件解析及上位机通信实现

控制程序在CodeWarrior软件中编译完成后会自动生成S19格式的文件,文件记录了刷写到MCU中的数据和对应的地址。S19文件中的数据由很多行(又称为记录)组成,根据每行的起始标注了记录的类型、数据长度、存储区的起始地址、数据以及数据校验。根据S19文件的规则,上位机可以解析出程序要刷写的地址和要写入的数据。上位机解析完数据后按照通信协议将刷写指令和刷写数据通过CAN接口传送给单片机,bootloader对相应的存储区域进行刷写操作,上位机的编写过程本文不再赘述。

7. 结束语(功能、不足等)

本次设计通过实际验证,可以进行控制器程序的刷写,用户程序正确运行,并在某型控制器的开发过程中进行了成功应用。较传统的程序刷写方式节省了大量的时间。当然,本次设计的bootloader通信指令较为简单,仅对flash的基本读写操作做了规定,并没有对接收到的S19文件数据进行校验,后续会继续完善这部分的功能。

参考文献

[1] 发动机控制器在线升级系统的设计与实现[J]. 税静,吴长水.  农业装备与车辆工程. 2020(06).

[2] 混合动力汽车电机控制器硬件设计与CAN通信[J]. 彭朝亮,冯国胜,袁新华.  农业装备与车辆工程. 2017(03).

[3]王宜怀,曹金华. 嵌入式系统设计实战——基于飞思卡尔S12微控制器 [M]. 北京:北京航空航天大学出版社,2011:289-313.

[4]王亚刚.嵌入式 Bootloader 机制的分析和移植[J].计算机工程,2010,36(6):267-269.

猜你喜欢

CAN总线
论网络通信技术
基于嵌入式的汽车辅助制动系统研究
CAN总线通信技术在电梯监控系统中的应用
基于CANoe的J1939协议在ECU通信中的应用
利用MC9S12(X)单片机构建CAN总线网络的研究
基于CAN总线的智能微喷灌监控系统中下位机的硬件电路组成与设计
基于CAN总线的变电站通讯网络设计
一种航空交换机中CAN总线的自动化测试方法