基于CAN总线的车载检测模块固件升级系统设计
2018-02-27陈晓韦杨开欣董海博郭谨玮
陈晓韦 杨开欣 董海博 郭谨玮
摘要:智能车载检测模块是典型的嵌入式设备之一。嵌入式设备的主要特点是同一个硬件采用不同的固件便可以实现不同的功能。为了降低车载检测模块的维护成本,该文设计了一种基于CAN总线的车载检测模块固件升级系统。固件升级系统包括上位机和车载设备固件两部分。车载设备固件将微控制器内部flash区域划分成Bootloader引導区和APP用户程序区。升级采用被动模式,车载设备收到上位机发送的升级命令后,跳转到Bootloader区域并执行对应的操作完成固件烧写。实验证明,此方法在很大程度上提高了车载设备的可维护性,方便稳定可靠。
关键词:嵌入式设备;CAN总线;Bootloader;固件升级
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)35-0252-02
随着科学技术的进步,车联网技术的发展,汽车保有量的持续增加,各种各样的车载设备需求量增加,新能源车辆的出现对智能车载设备需求量进一步增加。智能车载检测模块是典型的车载设备之一,主要用途是借用车辆的OBD诊断接口通过CAN总线实时获取车辆的各种信息,如新能源汽车的电瓶电压,电池温度、电机转速、剩余电池电量、行驶里程等。智能车载检测模块是典型的嵌入式设备之一,模块可以实现的具体功能和模块内部使用的微控制器烧写的固件有关,不同车型可以使用同一个车载检测模块硬件。车载检测模块一旦批量出厂到达客户手中,客户如果想更改模块的功能或是更换使用车型,供应商需要派出大量的技术支持人员前往支持,成本高,效率低。为了解决这一问题,充分利用车载检测模块的外部接口,本文设计了一款基于CAN总线的车载检测模块固件升级系统,车载检测模块通过CAN总线实现固件的升级方法,方便可靠,操作简单,客户只需要简单几步便能够完成对固件的升级,对于模块供应商,在很大程度上节约了工程师差旅成本。对于客户,提高了工作效率。
1 微控制器固件升级方法介绍
微控制器固件升级通常有两种方法,方法一是在系统编程(In-system programming, ISP),利用JTAG等专用工具和特定的协议将固件烧写到内部flash中,通常在产品测试调试阶段使用。由于此方法需要设备留有专用的外部接口和JTAG或ST-LINK下载器,通常成熟的设备部对外不会留有下载接口,所以此方法不适合已经出厂设备的固件升级烧写。另一种方法是在应用编程(in-application programming,IAP),顾名思义就是在应用程序的运行过程中实现对应用程序的固件升级,此方法主要是借用微控制器支持的总线如:SPI,I2C,USART,CAN等实现对内部固件的升级,实现相对灵活、不比用专用的下载器等。使用在应用编程方法烧写固件,工程师通常需要将微控制器的固件分成两个部分,一是引导加载程序Bootloader,另一个是实现具体功能的用户程序[1]。引导加载程序Bootloader通常包含启动加载模式和下载模式两种功能,启动加载模式是引导用户程序APP的正常执行,下载模式可以实现对用户程序APP的更新。初次使用微控制器时,Bootloader部分的固件要通过在系统编程ISP方式烧写到微控制器内,而APP固件部分既可以通过ISP也可以通过IAP方式烧写到微控制器内。基于CAN总线的固件升级方法连接图如图1。PC通过USB线缆连接CAN主机,CAN主机和要升级固件的微控制器之间通过CAN总线进行通讯,根据CAN总线的特点[2]可知CAN主机和微控制器之间要有一个120欧姆的终端电阻。
2 基于CAN总线固件升级系统设计实现
基于CAN总线的固件升级系统包括上位机软件和硬件两个部分。软件是实现发送升级命令和固件文件的上位机,硬件是智能车载检测模块。
2.1 智能车载检测模块
智能车载检测模块使用的微控制器是ST公司的STM32F105RC,此芯片有两路CAN 接口,两路ADC,256KB的Flash。车载模块一路CAN通过OBD诊断接口和车辆通讯,获取车辆的实时信息,第二路CAN将获取的车辆实时信息传到PC端或是用于接收固件实现对固件的更新。CAN遵循ISO/OSI参考模型,分数据链路层和物理层。根据ISO88002-2和ISO8802-3,数据链路层进一步细分为逻辑链路控制(LLC)和介质访问控制(MAC);物理层进一步细分为物理信令(PLS,位编码、定时、同步),物理介质附件(PMA,驱动器/接收器特性)和介质附属接口(MDI,连接器)[2]。数据链路层和物理信令层之间的链接是通过CAN 控制器实现的。物理介质附件是协议控制器和物理线路之间的接口。在车载检测模块中,CAN 收发器选择的是车规级别的恩智浦公司生产的TJA1043,车载检测模块硬件架构如图2所示。主要包括维持MCU 运行的最小外围系统,两路CAN电路,电源转换等其他电路。
2.2 MCU固件升级内部Flash区间划分
STM32F105是基于Cortex-M3内核的互联型微控制器,完成STM32固件升级首先要分析STM32的启动流程,STM32的启动流程封装在启动文件中。Cortex-M3内核[3]通过设置BOOT[1:0]两个管脚的电平定位启动模式[4],启动模式有三种,分别是Main Flash、System memory、内嵌的SRAM。表1显示了BOOT[1:0]管脚和启动模式之间的关系。不同的启动模式有不同的功能,通常我们的用户固件程序是烧写在Main Flash中的。System memory内部存放了内嵌的Bootloader[5]程序,这部分程序在芯片出厂时由ST厂商已经固化在芯片内部,工程师没法修改只能使用。通过芯片厂商提供的此部分Bootloader可以更新芯片固件,可以选择几种外围总线分别是两个通用串行接口USART1、USART2,一个CAN总线接口CAN2和一个USB 接口DFU[6]。由于固件是烧写在Main Flash中的,由表1可知选择System memory启动需要更换BOOT[1:0]管脚的电平,因此选择芯片自带的Bootloader的方法不适合对批量出厂设备的固件更新。因此本文参考芯片自带的Bootloader启动逻辑,通过CAN总线接口,编写自己的Bootloader程序实现对固件的更新。主要方法是在Main Flash区域中划分出一段区域存放自己编写的Bootloader程序引导固件加载和固件升级,而不需要重新设定BOOT[1:0]管脚电平,简单方便实用。
STM32F105内部有256KB的Main Flash ,起始地址是0x0800 0000, 结束地址是0x0803 FFFF,分成了128页,每页2KB。在此升级系統中将整个Flash划分成三个区域,分别是bootloader区域,升级标志flag存放区域,和用户应用程序APP区域。Bootloader区域的起始地址是0x0800 0000, 结束地址是0x0800 FFFF,共64KB,在这64KB中划分出2KB用于存放升级标志,起始地址是0x0800 F800,结束地址是0x0800 FFFF。用户应用程序APP区域的起始地址是0x0801 0000, 结束地址是0x0803 FFFF,共192KB。Main Flash区域划分如图3所示。
2.3 Bootloader程序设计
Bootloader部分的程序没有实际的用户功能,只是引导用户程序APP的启动和固件的更新。MCU上电后首先执行Bootloader部分的代码,先判断升级标志位是不是有效,在此程序中如果升级标志位的值为0xEEEE,则表示需要升级用户程序固件,否则直接运行用户应用程序。当需要升级用户程序固件时,Bootloader接收到上位机发送的固件二进制文件后写入到APP区域,升级过程中开启错误检查机制,一旦检测到错误就重新启动,整个固件程序成功写入后才擦除升级标志位,MCU重启,这样防止将MCU刷成板砖。
2.4 APP用户程序设计
APP用户应用程序主要有三个功能,功能一是实现车辆实时信息的获取和上传,功能二是接收上位机发送的升级固件命令,将升级标志区域置位,功能三是接收上位机其他命令完成固件版本检查,Bootloader程序和APP用户应用程序跳转,CAN总线波特率设置等。APP用户应用程序在运行过程中,如果接收到上位机发送的升级固件命令,则直接将升级标志区域写入0xEEEE,然后重启整个系统。MCU 重启后FLASH内数据不会被擦除,所以重启后进如Bootloader区域后便可以接收固件程序进行升级。
2.5 固件升级系统上位机设计
上位机用MFC编写,运行上位机后首先扫描CAN设备节点,检查是否有CAN 设备节点存在,如果设备节点存在则发送查询设备运行固件类型(Bootloader还是APP)和固件版本的命令,将节点的当前运行固件类型和版本显示出来,之后便可以发送各种命令对车载设备进行控制,如设置CAN总线波特率、运行APP固件、运行Bootloader固件、擦除APPflash区域的数据、对APP固件升级等。上位机发送的命令,见表2。固件升级步骤见图4。
3 结束语
本文设计了一款基于CAN总线的车载检测模块固件升级系统,包括上位机和固件两个部分,固件分成引导加载程序Bootloader部分和用户应用程序APP部分,避免了由于使用芯片自带的Bootloader对固件进行升级时改变BOOT[1:0]管脚电平的操作,操作简单、方便。此系统可以用于STM32任何一款支持CAN总线接口的微控制器的固件升级,对采用STM32做微控制器的嵌入式产品有一定的指导意义。
参考文献:
[1] 陈程杰.基于CAN总线的ECU在线刷新和远程服务系统的开发[D].天津大学,2017.
[2] 罗峰,孙泽昌.汽车CAN总线系统原理、设计与应用[M].北京:电子工业出版社,2017.
[3] Yiu J. ARM Cortex-M3权威指南[M].北京:北京航空航天大学出版社,2009.
[通联编辑:朱宝贵]