一种基于CAN总线的分布式BMS固件安全升级方案设计

发表时间:2021/3/4   来源:《科学与技术》2020年10月29期   作者:张振
[导读] 针对分布式BMS(电池管理系统)的固件更新问题
        张振
        宝星智能科技(上海)有限公司,上海,201415

        摘要:针对分布式BMS(电池管理系统)的固件更新问题,提出了一种基于CAN总线和IAP(在应用编程)技术的固件安全升级方案。PC上位机通过CAN总线将需要升级的固件传输到主控BMS,主控将升级固件校验正确后存放在内部Flash的预升级区域,并根据固件的类别给自身升级或通过CAN总线传输给从控BMS依次升级。该方案已经在STM32为MCU的分布式BMS系统中得到验证,实践证明该设计具有升级稳定、安全、快速等特点,解决了分布式BMS升级的难题,在新能源汽车及储能领域具有广阔的应用前景和较大的实用价值。
        关键词:BMS;CAN;IAP;新能源;安全升级
        中图分类号:TM911

        A design of distributed BMS firmware security upgrade scheme based on CAN Bus
        Zhang Zhen
        Abstract: To solve the firmware update problem of distributed BMS (battery management system), a firmware security update scheme based on CAN bus and IAP (in application programming) technology is proposed.The PC host computer transmits the firmware that needs to be upgraded to the master BMS through CAN bus. The master will store the updated firmware in the internal Flash preupgrade area after correct verification, and upgrade itself according to the type of firmware or transmit it to the slave BMS through CAN bus in turn.The scheme has been verified in the STM32 MCU distributed BMS system. The practice proves that the design has the characteristics of stable, safe and fast upgrade, solves the problem of distributed BMS upgrade, and has broad application prospect and great practical value in the field of new energy vehicles and energy storage.
        Key words: BMS;CAN;IAP;new energy;security update

        0引言
        随着碳中和愿景的提出,能源结构正发生着深刻的变革,新能源的占比逐步提升。新能源汽车和储能领域的发展如火如荼,动力电池系统及储能系统关键部件之一的BMS,随着产品性能的完善及功能的增加,甚至故障的修复,固件升级变的越来越普遍[1]。由于BMS使用数量较多、分布分散,且受限于电池箱体的封闭性,使BMS软件的现场升级变的异常困难,而且还会大大增加企业的运维成本;因而BMS固件的安全升级就显得尤为重要。
        
1升级方案
1.1固件升级原理
        STM32微控制器的固件更新方法通常有两种:1)使用特定的仿真器[2]通过JTAG或SWD接口进行在系统编程(In System Programming,ISP);2)使用微控制器支持的USART、IIC、SPI、CAN、USB等外设接口并配合boot loader[3]进行在应用编程(In Application Programming,IAP)。由于在产品设计中JTAG或SWD等调试引脚占用资源较多,一般都不会留出,产品的对外接口基本上都是RS232、RS485、CAN等。故该方案采用IAP方式,将Flash存储区划出4个区域:BOOT区域、FLAG区域、APP1区域、APP2区域,如图1和图2所示。BOOT区域用于存放boot loader程序;FLAG区域存放与升级相关的标志信息;APP1区域为APP程序(用户应用程序)的存储及运行区域;APP2区域为预升级区域,用来下载及备份APP程序。微控制器复位之后首先运行boot loader程序[4],检测APP软件是否需要升级,如果不需要升级,就直接跳转到APP1区域的APP程序运行;如果需要升级,就替换掉APP2区域的旧版软件,待APP2区域程序更新完成并且校验正确后,再将APP2区域的程序写入到APP1区域,然后跳转到APP1区域的APP程序运行。
        


1.2系统整体设计
        系统框图如图3所示,由PC上位机和基于STM32F427VGT6微控制器的BMS主控和基于STM32F103VCT6微控制器的BMS从控组成。当BMS主控软件需要升级时,PC上位机将需要升级的BMS主控固件通过CAN总线传输到主控BMS,主控将收到的主控固件程序写入到内部Flash的APP2区域进行预升级操作,预升级成功后再将APP2区域的程序代码写入到APP1区域完成固件升级。当BMS从控软件需要升级时,PC上位机先将从控升级固件通过CAN总线传输给BMS主控,主控BMS再将收到的从控固件依据BMS ID号依次通过BMS主从之间的CAN总线传输给BMS从控,从控接着进行APP2区域的预升级,若预升级完成则进行APP1区域的正式升级。
        

2软件设计
2.1 PC上位机设计
        由于该方案是通过CAN总线给BMS进行固件升级,故需要设计一个基于CAN通信的PC上位机。上位机设计主要分为用户界面设计和功能设计。上位机界面如图4所示,具有CAN设备类型、CAN设备通道选择,支持周立功的USBCAN-E-U、USBCAN-2E-U,支持珠海创芯科技的CANalyst-II和沈阳广成科技的USBCAN-II C;具有BMS升级对象选择,支持BMS主控和BMS从控升级;升级方式可以选择Inner CAN或External CAN,使用Inner CAN升级固件时CAN ID固定为默认CAN ID,使用External CAN升级固件时,可以根据需要在配置文件里修改CAN ID(需要和BMS的boot loader中使用的CAN ID一致即可),满足不同场合的多样化需求。界面还设计有“CAN启动指示灯”,用以指示CAN设备的连接或断开状态。该方案的烧录固件格式为Hex格式,点击“选择Hex文件”按钮即可选择需要升级的目标文件。升级流程主要分为三个阶段:握手阶段、Hex文件数据传输阶段和结束阶段。设置好相应升级对象及方式,点击“升级”按钮即可开始BMS的固件升级,当升级过程中出现错误时,“故障指示灯”会亮红色,提醒用户升级出现错误;若升级成功则“升级成功指示灯”会亮绿色,指示升级完成。


        上位机的功能设计主要采用三个线程:主线程、CAN通信线程和异步定时器线程[5]。主线程主要是用户界面上的各种控件的回调函数及事件的响应与执行。CAN总线通信波特率为250kbps,默认使用扩展帧(29位标识符),当使用External CAN时,上位机启动CAN设备时会读取配置文件信息,根据用户配置的CAN ID自动判别是标准帧(11位标识符)还是扩展帧。Hex文件的读取、解析及数据组帧任务、数据发送与接收任务、升级流程的执行任务均在CAN通信线程中执行。异步定时器线程主要是启用一个100ms的异步定时器中断,在异步定时器中断中周期性的检查超时信息,例如上位机和BMS的升级握手是否超时、Hex文件数据下发是否超时等。

2.2 BMS boot loader设计
        主控BMS和PC上位机通过CAN总线连接,当按下上位机“升级”按钮后,上位机会下发升级握手帧,主控BMS收到此帧后会进行软件复位,进入boot loader运行。200ms后上位机会再发一次握手帧来和主控boot loader建立通信,boot loader 收到后返回准备就绪的应答帧。上位机收到应答帧后就开始按协议给boot loader传输升级固件,boot loader根据BMS_ID字节的数据来判别是主控的升级固件还是从控的升级固件;若是主控的升级固件,
就给自身升级;若是从控的升级固件就将固件校验正确后存放在主控Flash的APP2区域,然后开始根据BMS ID号依次给从控BMS进行升级。主控BMS的升级流程和从控BMS的升级流程基本一致,boot loader程序流程图如图5所示。
        从控BMS与主控BMS通过CAN总线连接,从控BMS的固件升级需要主控BMS将收到的从控BMS固件再通过CAN协议转发给对应的从控BMS。从控BMS收到主控BMS的升级握手帧后进行软件复位,开始运行自己的boot loader程序,检测500ms内是否再次收到主控BMS的握手帧。从控boot loader若没有收到握手帧,则跳转到APP1区域的APP程序入口地址,运行原来的程序;若收到,则立即返回准备就绪的应答帧,请求主控BMS下发升级数据。该方案使用的烧录固件为Hex格式文件,从控boot loader接收完每行Hex数据就会对其进行校验,若校验正确就将该行数据进行解析,然后把解析后的数据按一定格式写入APP2区域的对应地址,依次循环直到所有的Hex数据写入到APP2区域中;若行数据校验出现错误,则请求主控BMS重发本行数据。当Hex文件数据下发完成后,从控boot loader对写入APP2区域的数据进行回读操作并计算校验和,该校验和与主控下发的校验和一致则认为APP2区域固件升级成功,将APP2区域的数据依次写入APP1区域;若APP2区域数据校验和与主控下发校验和不一致,则不往APP1区域写入固件数据。最后程序跳转到APP1区域的APP程序入口地址,开始执行APP程序。


        Boot loader程序需要和APP程序配合使用,才能实现固件的IAP升级。在APP程序开发时需要注意以下两点:1)在软件开发环境中设置BMS主控APP程序的起始地址为0x08020000,设置BMS从控的APP程序的起始地址为0x08010000;2)在Main函数的入口处使用函数NVIC_SetVectorTable (uint32_t NVIC_VectTab,  uint32_t Offset)来设置嵌套中断向量表的偏移地址,这个需要和APP程序的起始地址保持一致。

3升级测试
        首先将BMS通过CAN设备连接到PC,然后给BMS上电,如图6所示;打开升级上位机,启动CAN设备,选择升级BMS对象和升级方式,选择需要升级的目标Hex文件,最后点击“升级”按钮,BMS就开始升级了,升级结果如图7所示。本次测试的hex文件大小为36K,使用秒表测试单个BMS的升级时间为33秒左右,当然升级时间的长短还取决于升级固件的大小。按照上述操作流程,分别对主控BMS和从控BMS进行升级测试,升级完成后使用Jlink-V9仿真器读取微控制器Flash里的程序代码并保存为Hex文件,将该Hex文件与使用Jlink-V9仿真器下载固件后读出的Hex文件做比对,比对的结果显示两种方式升级的APP1区域代码完全一样,说明使用该方案升级固件与使用仿真器升级固件的效果一样。

4结语
        针对分布式BMS数量多、现场升级维护成本较高的困扰,本文提出了一种基于CAN总线的升级方案,设计了相应的主控BMS boot loader、从控BMS boot loader及PC上位机软件。该方案中主控BMS和从控BMS的boot loader均使用APP2区域作为固件的预升级区域,只有固件预升级成功后才会正式升级APP1区域,而用户应用程序均是从APP1区域启动;这样保证了升级的安全性,即使出现意外情况升级中断,也不会使BMS系统瘫痪,BMS还可以运行以前的程序。该方案可以实现分布式BMS的便捷、快速、安全升级。
        
[参考文献](References)
[1]李白龙.光伏逆变器系统远程升级的设计应用[J].数字技术与应用.2015(12).
[2]孙立新.基于Bootloader的嵌入式软件通用更新机制[J].电视技术,2011,35(15):89-90.
[3]ST公司.AN2606 Application note[S].www.st.com,2020.
[4]徐洋,郑继敏.面向电动车车载监控终端的嵌入式软件远程升级系统研究与设计[J].Automobile Parts 研究与开发,2018(02):8-11.
[5]王建新,隋美丽.LabWindows/CVI虚拟仪器测试技术及工程应用.北京:化学工业出版社,2011.



       
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: