陈思羽 胡常鑫 杨慧超
摘 要:为解决高电压大功率的直流储能供电系统中BMS模块中的控制程序升级过程过于繁琐,升级时间过长的问题,利用系统现有的CAN通讯总线,通过对现有的程序进行小幅度修改,实现程序的自动分发升级,并在操作过程中充分考虑程序的保密,并充分考虑重要模块不可长时间中断运行的问题,具有快速,便捷,稳定,可靠,易于移植等特点。
关键词:在线升级;CAN总线;批量;加密校验
引言
传统的程序下载升级是由电脑使用程序烧录软件通过程序烧录工具对单片机进行下载和升级(重新下载)来实现的,这种方法操作起来过于繁琐非常不利于产品的后续开发和测试。近年来有厂家推出了脱机烧录工具,这种烧录工具可以实现脱离电脑的程序烧写,比如《具有电压跌落补偿的锂电池储能供电系统研究》一文所在的项目中使用的就是这种方法,对单体BMS设备引出下载线,并使用脱机烧录工具对程序进行升级,但是由于单体BMS设备数量众多,每个储能柜中的每个单体的程序代码各不相同,这就造成了升级时间依然过长。对于设备升级的问题,罗成娥[1]提出了基于CAN总线的STM32F103VET6的程序升级系统。李龙光[2]对改系统进行进一步优化,简述了上位机和单片机的握手机制,但是由于CAN总线传输速度慢,造成了单片机升级时间过长,使得单片机在升级过程中无法进行正常工作,于此,本文对该系统进行改进,提出了一种超短程序中断时间的升级方法。
1 STM32程序运行原理及软件设计
1.1 IAP升级机理及设计
首先STM32f103系列可设置为从ROM启动或FLASH启动,并且在单片机运行时可通过程序对FLASH中内容进行修改,我们应用这一点,通过对意法半导体公司的STM32f103系列启动方式是由BOOT0和BOOT1引脚进行启动的,我们将把BOOT0引脚设置为低电平即由FLASH启动,然后单片机将由boot引脚设置将中断向量表定位于FLASH区即起始地址为0x8000000同时单片机将PC指针指向0x8000000处。Cortex-M3内核规定[3],起始地址必須存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。
1.2 FLASH存储功能划分及功能结构
通过分析上述机制通过对单片机存储划分为BootLoader、标志位、APP、Updata区。在启动时,首先由BootLoader引导启动,通过判断标志位决定是否进行在线升级操作,并执行相应的功能,然后跳转到APP区进行正常的程序运行,具体流程如下图所示:
程序运行时通过校验更新标记位中的校验信息和升级信息来判断是否需要升级和Updata区数据是否正常,如果正常将Updata区数据复制到APP区并跳转到APP区运行,如果升级过充中出错则视情况直接跳转到APP区或重新开始升级。
2 电脑端CAN总线升级程序
由于单片机升级过程中升级包大小达到几K-几十K之间,并且升级过程中需要对数据进行拆分,封包,计算校验值,与单片机程序端在传输数据时需要传输握手包,功能型指令包括清空FLASH、发送校验码、发送大小等操作,所以必须一个与之对应的电脑程序和硬件与CAN总线进行连接,测试过程中使用蓝马a1+型号usb转CAN作为电脑和can总线的桥梁,其升级界面如图2-1所示。
经过试验验证,本文所述升级程序升级过程可靠,对现有程序影响小所以易于对现有程序添加CAN升级功能,十分适合产品研发过程中CAN总线升级功能实现和对现有产品功能的升级。
3 结束语
本文运用STM32系列单片机内部的FLASH擦除功能,设计了一套基于CAN总线的在线升级方案,具有低程序中断时间,升级过程稳定可靠,不易丢失升级数据,几乎不会造成因程序存储过程出错或在升级过程中断电造成单片机无法再次升级等情况,适合对在线升级可靠性要求比较高的场合使用,但是由于本系统所使用的USB转CAN性能不足,造成数据传输比较慢的情况,有待后续的改进。
参考文献
[1]罗成娥,任海强.基于CAN总线的在线升级系统设计与实现[J].数字通信,2013(06):32-36+40.
[2]李龙光,刘振威,乔海强,等.基于CAN总线的STM32F107程序在线升级[J].测控技术,2018,037(009):156-158.
[3]季赛玲.一种利用可控硅实现STM32串口自动下载代码的方法设计[J].电脑知识与技术,2018,014(011):245-246.
作者简介:
陈思羽(1993—),男,黑龙江省鸡西市人,在读硕士,学生,主要研究方向为人工智能和风电故障诊断。