掌桥专利:专业的专利平台
掌桥专利
首页

一种微控制器的高可靠程序升级实现方法

文献发布时间:2023-06-19 16:04:54



技术领域

本发明属于电源控制器技术领域,特别是一种适用于电源模块用微控制器的高可靠程序升级实现方法。

背景技术

随着现代电子系统的发展,高功率密度、高效率开关电源变换器的需求日益增多,为满足开关电源变换器的控制要求及通信等功能需求,采用微控制器作为电源主控芯片得到了学术界和工业界广泛研究和应用。微控制器作为电源主控芯片具有可升级代码,可通信等功能而极大的提高了灵活性,但电源模块出厂后受限于体积和应用场合的限制,传统通过仿真器更新代码的方式已不再适用。采用Bootloader进行程序升级是解决该问题的业内主流方案,目前Bootloader方案通常采用MCU上电时检查外部引脚电平状态或在规定时间内等待命令等方式选择进入Bootloader模式,不适用于电源模块场合。

程序升级的关键技术在于如何可靠的将正确的应用程序写入到MCU正确的存储空间中,同时保证Bootloader在各种异常状况下不被破坏。中国发明专利CN111061499A给出了一种基于文件系统的ECU更新方法及系统,利用车载以太网进行文件传输,并增加文件安全性、完整性验证、可以更新部分模块代码等功能,该方法较为复杂不适用于电源模块等轻量级程序使用场合。中国发明专利CN112346769A给出了一种基于TMS320F28335的DSP软件在线升级方法,该方法将Bootloader程序和应用程序放置在存储器不同的位置来提高软件升级的可靠性,该方法未对上位机选择应用程序进行处理且未对传输过程加密,存在安全性风险。中国发明专利CN113741940A提出了一种在线升级电动汽车整车控制器Bootloader的方法,该方法设计了一套应用层Bootloader,可对原Bootloader进行擦除和重新写入及校验,该方法提高了Bootloader的安全性但增加了应用程序的复杂性。

发明内容

本发明的目的在于针对上述现有技术存在的问题,提供一种微控制器的高可靠程序升级实现方法。

实现本发明目的的技术解决方案为:一种微控制器的高可靠程序升级实现方法,所述方法包括以下步骤:

步骤1,提高上位机对应用程序的可靠性;

步骤2,提高上位机与MCU之间传输过程的可靠性;

步骤3,提高MCU对应用程序写入过程的可靠性。

进一步地,步骤1包括:上位机对选择的应用程序文件格式、MCU型号以及文件的完整性进行校验,同时对应用程序进行加密。

进一步地,所述上位机对选择的应用程序文件格式、MCU型号以及文件的完整性进行校验,具体包括:

步骤1-1,上位机初始化;

步骤1-2,上位机选择MCU型号;

步骤1-3,选择更新的应用程序文件路径及格式;

步骤1-4,将应用程序文件加载到缓冲区队列中;

步骤1-5,解析应用程序;

步骤1-6,对应用程序文件格式进行校验,判断步骤1-5解析的格式类型与步骤1-3选择的格式类型是否符合,若不符合,则上位机弹出告警框,并返回执行步骤1-3,否则执行下一步;

步骤1-7,对应用程序文件要烧录的MCU型号进行校验,若型号错误即与选择的MCU型号不符合,则上位机弹出告警对话框,并返回执行步骤1-3,否则执行下一步;

步骤1-8,对应用程序文件进行校验,判定程序文件是否完整,若是则结束校验过程,否则返回执行步骤1-3。

进一步地,步骤2具体包括:上位机对传输的文件进行CRC校验,并对传输过程的数据流进行加密,建立上位机与MCU的通信信道。

进一步地,所述建立上位机与MCU的通信信道,还包括:

MCU初始化;

校验结果存储空间数据是否正常,若数据异常,系统判定MCU需要更新程序,进入Bootloader模式,将与上位机建立通信信道,与上位机交互完成应用程序升级;否则运行MCU电源控制程序即运行应用程序。

进一步地,MCU与上位机建立通信信道后,两者按照通信协议进行交互;

上位机进行应用程序传输,通过通信协议将应用程序文件分批传送给MCU;

MCU收到通信数据后对数据流进行解密;

MCU进行CRC校验,校验码相同则认为数据正确否则将丢弃数据;

MCU利用解密算法对应用程序进行解密,解密完成后的应用程序存于MCU的RAM中;

MCU接收到应用程序后执行步骤3,开启升级和校验;

运行MCU电源控制程序。

进一步地,步骤3包括:MCU对接收到的应用程序文件进行CRC校验及解密,检查写入地址的合法性,校验存储空间与应用程序大小以及校验程序升级是否成功。

进一步地,步骤3具体包括:

校验应用程序写入地址的合法性,若不合法,则重新确定写入地址,否则执行下一步;

校验存储空间与应用程序大小,若应用程序的大小超过存储空间,则重新确定写入地址,否则执行下一步;

擦除校验结果存储空间;

将应用程序写入到特定的程序存储空间;

程序从Bootloader跳转到运行应用程序;

进行存储器加密;

MCU接收上位机的验证命令,对通信数据进行校验,若校验结果为接收的数据正确,则判定应用程序升级成功,将校验成功标志写入到结果存储空间中,否则重新进行程序升级。

本发明与现有技术相比,其显著优点为:

1)本发明可以提高Bootloader本身代码的可靠性,防止被意外擦除。

2)通过上电检查应用程序可以大幅缩短电源模块启动时间,并且在应用程序损坏时自动进入Bootloader防止电源模块变“砖”而极大提高可靠性。

3)上位机对应用程序加密,校验以及通信信道加密都极大提高了应用程序在选择和传输过程中的安全性和可靠性。

4)MCU在写入过程前对应用程序大小和地址校验及写入过程后对应用程序校验及加密都提高了应用程序在MCU中更新过程的可靠性。

5)本发明方法极大的提高了程序升级全过程环节的可靠性,降低了电源模块因为程序升级过程变“砖”的可能性。

下面结合附图对本发明作进一步详细描述。

附图说明

图1为程序升级上位机与MCU通信连接示意图。

图2为系统工作流程示意图。

图3为程序升级上位机工作流程示意图。

图4为MCU工作流程示意图。

具体实施方式

下面将结合本申请实例中的附图,对本申请实例中的技术方案进行清楚、完整地描述,显然,所述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在一个实施例中,提供了一种微控制器的高可靠程序升级实现方法,所述方法包括以下步骤:

步骤1,提高上位机对应用程序的可靠性;

步骤2,提高上位机与MCU之间传输过程的可靠性;

步骤3,提高MCU对应用程序写入过程的可靠性;

进一步地,在其中一个实施例中,步骤1具体包括上位机对选择的应用程序文件格式、与MCU型号以及文件的完整性进行校验,同时对应用程序进行加密。

进一步地,在其中一个实施例中,步骤2具体包括对传输的文件进行CRC校验以提高传输过程的可靠性,对传输过程的数据流进行加密,提高数据的安全性。

进一步地,在其中一个实施例中,步骤3具体包括对接收到的应用程序文件进行CRC校验及解密,检查写入地址的合法性,校验存储空间与应用程序大小以及程序升级成功校验。

示例性地,在其中一个实施例中,以带MCU的数字电源模块为实施例,需要指出的是,本申请方案同样适用于其它利用上位机和带MCU进行通信升级程序的嵌入式系统中。为阐述本发明的关键技术,下面将结合图1至图4展开详细说明。

结合图1,微控制器程序升级系统由上位机100、通信转接器101和MCU 102组成。上位机与MCU之间通过通信转接器进行连接,上位机将数据通过通信转接器发送给MCU,MCU也可以通过通信转接器发送数据给上位机。

进一步地,在该系统中上位机100为控制角色,发送相应的数据命令经通信转接器101传输给MCU 102,驱动MCU 102进行相应命令操作。

进一步地,电源模块出厂时MCU 102内部存储器不含有代码,需要先烧录Bootloader程序,再烧录应用程序,应用程序烧录可以通过仿真器直接烧录也可以通过Bootloader烧录。

进一步地,Bootloader程序代码所在地址空间依据代码大小变化,代码所在地址区域开启了Flash保护,只有通过仿真器才能修改该内存区域的值,无法通过Bootloader程序运行进行写入和擦除。该方法提高了Bootloader可靠性,有效防止了在程序升级过程中意外情况破坏Bootloader代码而导致电源模块变成“砖”。

结合图2,程序升级需要上位机和MCU交互完成,200-205给出了上位机工作流程,205-215给出MCU工作流程。

进一步地,程序烧录完成后,MCU上电开始初始化,主要是配置系统时钟、GPIO口功能、通信引脚外设等功能。

进一步地,207给出了一种减小电源模块起机时间的程序升级方法。与传统的通过判断上电初始时刻的MCU外部引脚电平和上电等待固定时间的方法不同,207的方法是上电首先校验结果存储空间数据是否正常,如果数据异常,系统判定MCU需要更新程序,进入208Bootloader模式。如果数据正常则立即跳转运行电源控制程序215。

进一步地,MCU跳转进入208运行Bootloader模式将与上位机交互完成应用程序升级,与上位机建立通信信道。

上位机的主要功能是对应用程序进行处理,包括应用程序的解析、校验、加密等操作以及与MCU进行数据通信、校验应用程序等。

201给出了上位机对应用程序校验及解析的处理主要工作事件,包含应用程序的格式校验、与MCU配套型号校验、应用程序的完整性及大小校验。

进一步地,校验应用程序的格式目的在于提高源文件来源的可靠性,上位机支持bin、hex、elf三种格式的应用程序文件,bin文件格式占用空间最小,只包含程序本身文件;hex文件格式包含不仅包含程序信息还包含了地址信息;elf格式除了包含程序信息和地址信息外还包含了调试信息。

进一步地,在选择了应用程序文件后,上位机会解析应用程序文件,应用程序文件开头加入了自定义的适配MCU型号,上位机解析该文件后会与选择的MCU型号进行匹配,匹配不通过无法继续后续流程,匹配通过后进行校验应用程序完整性及大小。

示例性地,如图3所示,首先打开上位机,上位机进行初始化,该步骤主要是上位机程序加载必要的程序框架,为上位机程序运行加载必备的库文件和环境。

进一步地,301给出了上位机选择MCU型号的步骤,此处选择STM32G474CBU6,程序后台根据型号计算存储空间大小为90KB,起始地址为0x08008800,结束地址为0x0801EFFE。

进一步地,302给出了要选择更新的应用程序文件路径及格式,IDE编译链接完成后会生成BIN文件、HEX文件和ELF文件三种格式。

完成选择后303将文件加载到缓冲区队列中,便于下一步解析工作。

进一步地,304步骤进行应用程序文件的解析工作,首先会解析出首行加入的MCU型号及标志信息,其次根据文件类型加载不同的解析程序,以Hex为例:上位机按照HEX文件的标准格式分别取出标记头、本行数据长度、本行数据的起始地址、数据类型等数据。

进一步地,305将对文件格式进行校验,主要原理为根据304解析的格式类型与选择的格式类型是否符合,如果不符合上位机则会弹出告警框。

进一步地,306将对应用程序文件要烧录的MCU型号进行校验,如果型号错误上位机弹出告警对话框,防止同类MCU烧录错误的程序无法正常运行。

进一步地,307对应用程序文件进行校验,判定程序文件是否完整。Hex文件主要校验机理如下:通过计算文件的校验值与自带的校验和进行对比,校验结果通过对话框进行通知。

为提高应用程序的安全性,202中上位机会对应用程序代码进行加密处理。

进一步地,采用自定义的对称性加密算法将应用程序进行加密运算,考虑到MCU的解密运算能力及应用程序的安全等级不高,算法采用较为简单的加法运算,加密算法采用如下公式算法:

Y=X+0x0A

原始未加密文件存储于数组X中,通过加密运算公式运算过后得到Y数组。该方法具有运算简单,代码量小非常适用于该应用场景。

进一步地,203对应用程序进行CRC校验用于数据传输,MCU接收到数据会将数据流重新按CRC算法计算出CRC结果,然后将计算的CRC结果与传输接收的CRC结果进行校验。CRC校验采样采用CRC16方法,CRC计算方法为通用方法,详细步骤如下:

(1)设置16位CRC寄存器为FFFF;

(2)将信息帧的第一个字节与16位的CRC寄存器的低8位相异或,CRC寄存器低八位结果更新,高八位数据不变;

(3)CRC寄存器右移一位(朝低位)用0填补最高位,判断右移后的移出位;

(4)移出位=0:再次右移一位;移出位=1,CRC寄存器与多项式0xA001(1010 00000000 0001)进行异或运算;

(5)重复步骤3和4,直到右移8次,使得整个8位数据全部进行了处理;

(6)重复步骤2到步骤5,进行下一个字节的操作;

(7)将所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换得到CRC码;

由于MCU采用的通信方式多采用CAN通信或UART通信,可以被解密器进行解密。为提高传输通道的可靠性,204中对通信的数据流进行加密。加密的原理是将通信的数据进行运算,算法采用较为简单的按位取反运算,加密算法公式如下:

Y'=~X'

上位机和MCU通过205和209建立通信,通信建立后上位机和MCU按照通信协议进行交互。

进一步地,上位机通信建立后将进行应用程序传输(210),上位机和MCU通过通信协议将应用程序文件按2KB分批传送给MCU。

进一步地,MCU收到通信数据后对数据流进行解密(211),解密算法为按位取反。

进一步地,MCU进行CRC16校验计算(212),校验码相同则认为数据正确否则将丢弃数据。

进一步地,MCU利用解密算法将应用程序进行解密(213),解密完成后的应用程序已存在于MCU的RAM中,此时MCU掉电应用程序数据将丢失,大大提高了被窃取的难度,增强了安全性和可靠性。

MCU接收到应用程序后将开启升级和校验(214),示例性地,如图4所示,首先应用程序解密完成后进入400检查写入地址的合法性。该步骤防止应用程序被写入到错误地址之中,提高了写入的可靠性。

进一步地,通过写入地址的合法性校验后,程序进入存储空间与应用程序大小校验(401),该步骤的目的是防止应用程序的大小超过了存储空间大小,导致程序末尾数据丢失而使电源模块程序升级失败。

进一步地,程序进入擦除校验结果存储空间(402),该步骤非常重要,因为一旦擦除该空间,下次开机上电电源模块无法再直接跳转到应用程序,程序会进入Bootloader模式,电源模块也无法正常工作。该方法保证了在Bootloader过程中应用程序一定会升级成功,无论是由于全流程中任意环节出现问题,均会跳转Bootloader程序重新进行升级,直至升级成功。

进一步地,擦除校验结果存储空间后程序会进行写入应用程序操作(403),将应用程序写入到特定的程序存储空间中起始地址为0x08008800,结束地址为0x0801EFFE。

进一步地,写入完成后程序从Bootloader跳转到应用程序运行(215),应用程序初始化时会将存储器进行加密处理,防止数据被读出,大大提高了代码的安全可靠性。

进一步地,在运行应用程序中MCU会回传通信命令a6 15 0400 0000 0200 00000000 0000,上位机接收到后弹出对话框提示进行验证,上位机点击验证按钮下发验证通信数据a5 15 0d00 0000 0000,MCU接收到该命令后进行校验,数据接收正确则判定应用程序升级成功,将校验成功标志写入到结果存储空间中,并回传55 15 0100 0000 0000,上位机接收到该数据显示升级成功。该结果直接决定了下次电源模块重新上电的运行状态,结果正确电源模块直接开始工作,结果错误电源模块进入Bootloader等待程序重新更新。该方法降低了电源模块的起机时间,提高了电源模块运行效率。

进一步地,在电源模块运行电源控制程序过程中会一直监控上位机是否下发进入Bootloader命令,通过上位机发送命令a5 15 0b00 0000 0000即可进入程序升级过程。

由上可知,本发明整体方案的思想为:采用仿真器烧录Bootloader代码且对Bootloader代码所在的内存地址区域进行保护,禁止该地址区域进行除仿真器以外的其他工具进行写入和擦除操作。MCU上电先运行Bootloader代码并进行应用程序检查,检查通过直接跳转到应用程序运行,检查不通过开始等待上位机进行程序升级。上位机选择应用程序并对应用程序进行校验及解析,通过后开始对应用程序进行加密,加密完成后进行应用程序的校验。上位机与MCU建立加密通信后开始传输应用程序文件,MCU收到应用程序文件后首先对通信数据进行解密,然后进行校验,校验通过后会对应用程序文件进行解密。MCU对收到的解密后的应用程序会进行文件大小检查以及要写入内存地址空间进行检查,然后对要写入的地址进行校验。应用程序升级开始时首先擦除校验结果存储空间,升级成功后结果写入校验结果存储空间。MCU应用程序升级完成并校验通过后会开始运行应用程序,在应用程序中会对代码存储区进行加密,运行中如果收到进入Bootloader命令会重新进入Bootloader等待程序升级。

综上所述,提高程序升级的可靠性主要是以下几条措施:

1、Bootloader的代码仅能通过仿真器擦写和烧录,代码存储区域受保护,程序升级过程中不允许修改Bootloader代码所在存储区域数据。

2、加入开机校验结果存储空间数据,减小电源模块起机时间且同时防止电源模块变“砖”。

3、上位机加入多重校验功能,包括应用程序格式,适配型号以及文件完整性及大小校验。

4、采用多重加密功能,保障应用程序的安全性。在传输过程前后均采用加密策略保证了程序在上位机中、传输过程中及MCU中的安全性。

5、MCU对应用程序采用多重校验措施,通过对写入地址,写入空间大小及程序验证保证了程序升级的可靠性。

以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。

技术分类

06120114696077