芯片程序的升级方法、装置及存储介质转让专利

申请号 : CN202010390739.3

文献号 : CN111309364B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈登志谭恩赞巴黎范杰

申请人 : 深圳市科信通信技术股份有限公司

摘要 :

本发明提供一种种芯片程序的升级方法,包括:根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件,所述烧录文件中包括待升级程序及其在嵌入式单片机中的起始地址;在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令;根据所述校验指令对所述待升级程序进行校验,并在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域。本发明解决了现有技术不支持引导程序自升级、无法灵活写入应用程序问题。

权利要求 :

1.一种芯片程序的升级方法,其特征在于,包括:

根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件,所述烧录文件中包括待升级程序及所述待升级程序在嵌入式单片机中的起始地址,所述起始地址指定了所述待升级程序在所述嵌入式单片机开始保存的位置;

在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;

当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行CRC校验;

在CRC校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域;

其中,当所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区时,所述在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的加载缓冲区进行擦除;

接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述加载缓冲区;

当所述FLSAH存储器划分为加载区和应用程序区时,所述在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:接收上位机根据所述烧录文件发送的起始地址、长度信息,根据所述起始地址和长度信息确定RAM内存区;

接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至所述RAM内存区。

2.如权利要求1所述的芯片程序的升级方法,其特征在于,所述根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件包括:将所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区;

在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为加载缓冲区内的地址;

对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。

3.如权利要求1所述的芯片程序的升级方法,其特征在于,所述根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件包括:将所述FLSAH存储器划分为加载区和应用程序区;

在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为RAM内存区内的地址;

对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。

4.如权利要求2所述的芯片程序的升级方法,其特征在于,当所述待升级程序为引导程序时,所述在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域包括:在校验通过后,对所述FLASH存储器中的加载区进行擦除,将所述加载缓冲区中的待升级程序写入已擦除的所述加载区中。

5.如权利要求3所述的芯片程序的升级方法,其特征在于,当所述待升级程序为引导程序时,所述在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域包括:在校验通过后,对所述FLASH存储器中的加载区进行擦除,将所述RAM内存区中的待升级程序写入已擦除的所述加载区中。

6.如权利要求2或3之一所述的芯片程序的升级方法,其特征在于,当所述待升级程序为应用程序时,所述在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的应用程序区进行擦除;

接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述应用程序区。

7.一种芯片程序的升级装置,其特征在于,所述装置包括:

创建模块,用于根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件,所述烧录文件中包括待升级程序及所述待升级程序在嵌入式单片机中的起始地址,所述起始地址指定了所述待升级程序在所述嵌入式单片机开始保存的位置;

升级模块,用于在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;

校验模块,用于当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行CRC校验;

自升级模块,用于在CRC校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域;

其中,当所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区时,所述升级模块包括:第一擦除单元,用于接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的加载缓冲区进行擦除;

第一保存单元,用于接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述加载缓冲区;

当所述FLSAH存储器划分为加载区和应用程序区时,所述升级模块包括:第二擦除单元,用于接收上位机根据所述烧录文件发送的起始地址、长度信息,根据所述起始地址和长度信息确定RAM内存区;

第二保存单元,用于接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至所述RAM内存区。

8.如权利要求7所述的芯片程序的升级装置,其特征在于,所述创建模块包括:第一划分单元,用于将所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区;

第一配置单元,用于在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为加载缓冲区内的地址;

第一编译单元,用于对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。

9.如权利要求7所述的芯片程序的升级装置,其特征在于,所述创建模块包括:第二划分单元,用于将所述FLSAH存储器划分为加载区和应用程序区;

第二配置单元,用于在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为RAM内存区内的地址;

第二编译单元,用于对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。

10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的芯片程序的升级方法。

说明书 :

芯片程序的升级方法、装置及存储介质

技术领域

[0001] 本发明涉及信息技术领域,尤其涉及的是一种芯片程序的升级方法、装置及存储介质。

背景技术

[0002] 现有技术主要通过JLink、Ulink和串口烧录的方式对STM32 单片机进行烧录程序。其中STM32单片机内部的程序包括引导程序和应用程序,应用程序是具有产品功能控制的代码,引导程序是辅助应用程序升级的代码。一般情况下,STM32单片机通过运行应用程序实现相关功能,而在需要升级应用程序时,则通过运行引导程序实现。
[0003] 然而,现有STM32单片机中的引导程序无法自动升级。如果引导程序出现问题需要修复存在缺陷或者添加新的引导程序功能时,则需要通过拆机进行仿真器刷写,费时费力。另一方面,STM32中的应用程序的存储地址是固定的,无法灵活写入应用程序,从而无法灵活分配标志性数据的存储地址,且固定的存储地址也增加了被破解的风险。

发明内容

[0004] 本发明提供一种芯片程序的升级方法、装置及存储介质,以解决现有嵌入式单片机不支持引导程序自动升级、无法灵活写入应用程序的问题。
[0005] 本发明是这样实现的,一种芯片程序的升级方法,包括:
[0006] 根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件,所述烧录文件中包括待升级程序及所述待升级程序在嵌入式单片机中的起始地址;
[0007] 在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;
[0008] 当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行校验;
[0009] 在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域。
[0010] 可选地,所述根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件包括:
[0011] 将所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区;
[0012] 在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为加载缓冲区内的地址;
[0013] 对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0014] 可选地,所述根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件包括:
[0015] 将所述FLSAH存储器划分为加载区和应用程序区;
[0016] 在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将应用程序的起始地址配置为RAM内存区内的地址;
[0017] 对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0018] 可选地,当所述待升级程序为引导程序时,所述在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:
[0019] 接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的加载缓冲区进行擦除;
[0020] 接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述加载缓冲区。
[0021] 可选地,当所述待升级程序为引导程序时,所述在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:
[0022] 接收上位机根据所述烧录文件发送的起始地址、长度信息,根据所述起始地址和长度信息确定RAM内存区;
[0023] 接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至所述RAM内存区。
[0024] 可选地,当所述待升级程序为应用程序时,所述在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:
[0025] 接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的应用程序区进行擦除;
[0026] 接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述应用程序区。
[0027] 一种芯片程序的升级装置,包括:
[0028] 创建模块,用于根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件,所述烧录文件中包括待升级程序及所述待升级程序在嵌入式单片机中的起始地址;
[0029] 升级模块,用于在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;
[0030] 校验模块,用于当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行校验;
[0031] 自升级模块,用于在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域。
[0032] 可选地,所述创建模块包括:
[0033] 第一划分单元,用于将所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区;
[0034] 第一配置单元,用于在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将应用程序的起始地址配置为加载缓冲区内的地址;
[0035] 第一编译单元,用于对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0036] 可选地,所述创建模块包括:
[0037] 第二划分单元,用于将所述FLSAH存储器划分为加载区和应用程序区;
[0038] 第二配置单元,用于在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为RAM内存区内的地址;
[0039] 第二编译单元,用于对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0040] 一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述芯片程序的升级方法。
[0041] 本发明实施例改进了现有技术对STM32单片机的烧录方式,根据FLSAH存储器所划分的内存区域创建待升级程序的烧录文件,所述烧录文件中记录了待升级程序及其在嵌入式单片机中的起始地址;在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令;根据所述校验指令对所述待升级程序进行校验,并在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域,从而实现了按照起始地址写入程序,以及实现了引导程序自升级,在下载流程、引导程序文件内容发生变更时不需要硬件插拔、拆除外壳,直接连接通讯接口即可实现引导程序更新。

附图说明

[0042] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0043] 图1是本发明一实施例提供的芯片程序的升级方法的实现流程图;
[0044] 图2是本发明一实施例提供的芯片程序的升级方法的另一实现流程图;
[0045] 图3是本发明一实施例提供的FLASH存储器的区域划分示意图;
[0046] 图4是本发明一实施例提供的芯片程序的升级方法的另一实现流程图;
[0047] 图5是本发明另一实施例提供的FLASH存储器的区域划分示意图;
[0048] 图6是本发明另一实施例提供的芯片程序的升级方法中步骤S102的另一实现流程图;
[0049] 图7是本发明一实施例提供的芯片程序的升级装置的组成结构图;
[0050] 图8是本发明一实施例中计算机设备的一示意图。

具体实施方式

[0051] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0052] 本发明实施例解决了现有STM32嵌入式单片机不支持引导程序自动升级、无法灵活写入应用程序的问题,通过本发明实施例提供的芯片程序的升级方法可以在无需硬件插拔、拆除外壳的情况下通过连接通讯接口完成对引导程序更新,实现引导程序自升级和指定应用程序写入地址的效果,有效地降低了以固定地址写入应用程序产生的破解风险。以下对本实施例提供的芯片程序的升级方法进行详细的描述。
[0053] 图1是本发明提供的芯片程序的升级方法,如图1所示,所述升级方法包括:
[0054] 在步骤S101中,根据嵌入式单片机的FLSAH存储器所划分的区域创建待升级程序的烧录文件。
[0055] 在本实施例中,所述嵌入式单片机是指STM32F103RC芯片。在本实施例中,所述嵌入式单片机中的FLASH存储器的大小为256Kbytes,可按照不同的方式划分为若干个内存区域。本实施例根据不同的区域划分方式,创建对应的待升级程序的烧录文件,其中,所述烧录文件中记录了待升级程序及其在嵌入式单片机中的起始地址。所述起始地址指定了从嵌入式单片机的哪个区域哪个位置开始保存所述待升级程序。所述待升级程序是指待升级的程序代码。
[0056] 在步骤S102中,在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序。
[0057] 在这里,上位机通过解密所述烧录文件得到待升级文件的起始地址,并将起始地址和待升级程序依次发送至嵌入式单片机。所述嵌入式单片机接收起始地址,然后按照所述起始地址接收并保存待升级程序。
[0058] 所述待升级程序包括但不限于引导程序和应用程序。对于应用程序,所述起始地址是应用程序在嵌入式单片机中的存储地址,通过对烧录文件中配置不同的起始地址,可以实现将应用程序写入嵌入式单片机中的任意位置,完成对应用程序的升级,有利于降低现有技术以固定地址写入的方式产生的破解风险。
[0059] 对于引导程序,所述起始地址是引导程序在嵌入式单片机中的备份地址,从而实现对引导程序的备份。在完成对引导程序之后,所述嵌入式单片机可根据所述引导程序进行自升级。所述升级方法还包括:
[0060] 在步骤S103中,当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行校验。
[0061] 在这里,所述校验指令中包括校验码信息,用于指示嵌入式单片机对接收到的引导程序进行校验。可选地,所述校验码信息为CRC校验码。所述嵌入式单片机根据接收到的待升级程序计算CRC校验码,并将计算得到的CRC校验码与所接收到的校验码信息进行比较,
[0062] 在步骤S104中,在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域。
[0063] 若计算得到的CRC校验码与所接收到的校验码信息相同时,比较通过,则将开始搬运所述引导程序,将起始地址记录的所述引导程序搬运到FLASH存储器中的指定区域,从而实现了引导程序的自升级,在下载流程、引导程序文件内容发生变更时不需要硬件插拔、拆除外壳,直接连接通讯接口即可实现引导程序更新。
[0064] 在嵌入式单片机中,需要对FLASH存储器进行分区域来存储引导程序和应用程序。所述FLASH存储器通常划分为加载区和应用程序区,其中所述加载区又叫BOOT区,用于保存引导程序,所述应用程序区又叫APP区,用于保存应用程序。
[0065] 作为本发明的一个优选示例,可以通过在嵌入式单片机的FLASH存储器中再划分出一个内存区域来作为引导程序的备份区间。如图2所示,所述步骤S101所述的根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件包括:
[0066] 在步骤S201中,将所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区。
[0067] 可选地,如图3所示,可以将FLASH存储器中内存地址为0X0800 0000至0X0800 7FFF的区域作为加载区,大小为32KBytes,用于存储引导程序;FLASH存储器中内存地址为
0X0800 8000至0X0800 FFFF的区域作为加载缓冲区,又叫BOOT_BUFFER区,大小为
32Kbytes,用于对引导程序进行备份;FLASH存储其中内存地址为0X08010000至0X0804 
0000的区域作为应用程序区,大小为192Kbytes,用于存储应用程序。
[0068] 在创建引导程序的烧录文件,则通过将起始地址设置为所述加载缓冲区内的地址,来指示所述嵌入式单片机对所述引导程序进行备份。
[0069] 在步骤S202中,在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为加载缓冲区内的地址。
[0070] 可选地,所述分散加载描述文件中包括但不限于程序标识和程序信息,所述程序标识包括但不限于类型信息、校验码信息、长度信息,所述类型信息通过对起始地址进行掩码加密得到,所述起始地址指向加载缓冲区或应用程序区。
[0071] 在这里,根据FLASH存储器划分的加载区、加载缓冲区和应用程序区,本实施例在预设开发环境中创建分散加载描述文件.sct,通过在所述分散加载描述文件.sct中配置待升级程序的标识信息和程序信息。所述标识信息的大小为12字节,记录了包括但不限于待升级程序的类型信息、校验码信息、长度信息,所述程序信息是指待升级程序本身的代码。所述类型信息是指待升级程序所属的类型,大小为4字节,用于区分待升级程序是引导程序还是应用程序;所述校验码信息是指待升级程序的CRC校验码,大小为4字节;所述长度信息是指待升级程序的代码长度,大小为4字节。在本实施例中,由于引导程序和应用程序分别存储在FLASH存储器的不同区域中,可通过对待升级程序在所述FLASH存储器中的起始地址进行掩码加密,作为所述待升级程序的类型信息。其中,当所述待升级程序为引导程序时,所述起始地址配置为所述FLASH存储器的加载缓冲器区内的地址。当所述待升级程序为应用程序时,所述起始地址配置为所述FLASH存储器的应用程序区内的地址。
[0072] 在步骤S203中,对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0073] 在配置完分散加密描述文件之后,对其进行编译,得到待升级程序的烧录文件。在这里,所述待升级程序的烧录文件是指可通过上位机对嵌入式单片机进行程序升级的.bin文件。
[0074] 上述对FLASH存储器的区域划分简单,易于操作。本实施例通过配置应用程序的起始地址,使得应用程序可写入到应用程序区中的任意地址,有利于降低以固定地址写入的方式产生的破解风险;以及通过在FLASH存储器中划分加载缓冲区用于接收并保存引导程序,方便了接收引导程序,对引导程序进行备份,以实现引导程序自升级。以下将对引导程序自升级过程进行详细的描述。
[0075] 所述步骤S102所述的接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:
[0076] 在步骤S204中,接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的加载缓冲区进行擦除。
[0077] 在进行程序烧录时,由所述上位机解析所述烧录文件,得到待升级程序及其起始地址、校验码信息以及长度信息,并将所述起始地址、长度信息、校验码信息和待升级程序依次发送至下位机,即所述嵌入式单片机。
[0078] 当接收到上位机发送的起始地址和长度信息时,所述嵌入式单片机根据所述起始地址和长度信息确定待升级程序在加载缓冲区中的备份空间,并对加载缓冲区中的所述备份空间进行擦除,以腾出空间接收所述待升级程序。
[0079] 在步骤S205中,接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述加载缓冲区。
[0080] 在擦除完后,上位机向所述嵌入式单片机发送待升级程序。所述嵌入式单片机接收所述待升级程序,并将其保存至已擦除的所述加载缓冲区,从而完成对引导程序的接收以及备份,所述待升级程序保存在加载缓冲区中。
[0081] 在步骤S206中,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行校验。在完成对引导程序备份之后,所述嵌入式单片机可根据所述引导程序进行自升级。其中步骤S206与步骤S103相同,具体请参见上述实施例的叙述,此处不再赘述。
[0082] 在步骤S207中,在校验通过后,对所述FLASH存储器中的加载区进行擦除,将所述加载缓冲区中的待升级程序写入已擦除的所述加载区中。
[0083] 若计算得到的CRC校验码与所接收到的校验码信息相同时,比较通过,则将开始搬运所述引导程序,首先将加载区中原有的引导程序进行擦除,以腾出空间接收所述引导程序。然后将保存于加载缓冲区的所述引导程序搬运到FLASH存储器中的加载区,从而实现了引导程序的自升级,在下载流程、引导程序文件内容发生变更时不需要硬件插拔、拆除外壳,直接连接通讯接口即可实现引导程序更新。
[0084] 作为本发明的另一个优选示例,当所述FLSAH存储器划分为加载区和应用程序区保持不变时,也可以通过在嵌入式单片机的RAM内存中再划分出一个内存区间来作为引导程序的备份区间。如图4所示,所述步骤S101所述的根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件包括:
[0085] 在步骤S401中,将所述FLSAH存储器划分为加载区和应用程序区。
[0086] 可选地,如图5所示,此时可以将FLASH存储器中内存地址为0X0800 0000至0X0800 7FFF的区域作为加载区,大小为32KBytes,用于存储引导程序;FLASH存储器中内存地址为
0X0800 8000至0X0804 0000的区域作为应用程序区,大小为224Kbytes,用于存储应用程序。在创建引导程序的烧录文件,则通过从嵌入式单片机中划分出大小为32Kbytes的RAM内存区,用于对引导程序进行备份。所述方法还包括:
[0087] 在步骤S402中,在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为RAM内存区内的地址。
[0088] 同样地,所述分散加载描述文件中包括但不限于程序标识和程序信息,所述程序标识包括但不限于类型信息、校验码信息、长度信息,所述类型信息通过对起始地址进行掩码加密得到,所述起始地址指向RAM内存区或者应用程序区。
[0089] 在这里,根据FLASH存储器划分的加载区、应用程序区,本实施例在预设开发环境中创建分散加载描述文件.sct,通过在所述分散加载描述文件.sct中配置待升级程序的标识信息和程序信息,以及配置一块大小为32Kbytes的RAM内存区,以便于在对引导程序自升级时接收引导程序的代码。所述标识信息的大小为12字节,记录了包括但不限于待升级程序的类型信息、校验码信息、长度信息,所述程序信息是指待升级程序本身的代码。所述类型信息是指待升级程序所属的类型,大小为4字节,用于区分待升级程序是引导程序还是应用程序;所述校验码信息是指待升级程序的CRC校验码,大小为4字节;所述长度信息是指待升级程序的代码长度,大小为4字节。在本实施例中,由于引导程序在RAM内存区内备份、应用程序在FLASH存储器内保存,可通过对待升级程序在所述RAM内存区或FLASH存储器中的起始地址进行掩码加密,作为所述待升级程序的类型信息。其中,当所述待升级程序为引导程序时,所述起始地址配置为所述RAM内存区内的地址。当所述待升级程序为应用程序时,所述起始地址配置为所述FLASH存储器的应用程序区内的地址。
[0090] 在步骤S403中,对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0091] 在配置完分散加密描述文件之后,对其进行编译,得到待升级程序的烧录文件。在这里,所述待升级程序的烧录文件是指可通过上位机进行程序升级的.bin文件。
[0092] 上述对FLASH存储器的区域划分简单,易于操作。本实施例通过配置应用程序的起始地址,使得应用程序可写入到应用程序区中的任意地址,有利于降低以固定地址写入的方式产生的破解风险;以及通过设置RAM内存区用于接收并保存引导程序,方便了接收引导程序,对引导程序进行备份,以实现引导程序自升级。以下将对引导程序自升级过程进行详细的描述。
[0093] 所述步骤S102所述的接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:
[0094] 在步骤S404中,接收上位机根据所述烧录文件发送的起始地址、长度信息,根据所述起始地址和长度信息确定RAM内存区。
[0095] 在进行程序烧录时,由所述上位机解析所述烧录文件,得到待升级程序及其起始地址、校验码信息以及长度信息,并将所述起始地址、长度信息、校验码信息和待升级程序依次发送至下位机,即所述嵌入式单片机。
[0096] 当接收到上位机发送的起始地址和长度信息时,根据所述起始地址和长度信息确定待升级程序在RAM内存区中的备份空间,以腾出空间接收所述待升级程序。
[0097] 在步骤S405中,接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至所述RAM内存区。
[0098] 上位机向所述嵌入式单片机发送待升级程序。所述嵌入式单片机接收所述待升级程序,并将其保存至所述RAM内存区,从而完成对引导程序的接收以及备份。
[0099] 在步骤S406中,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行校验。
[0100] 在完成接收引导程序之后,所述嵌入式单片机可根据所述引导程序进行自升级。其中步骤S406与步骤S103相同,具体请参见上述实施例的叙述,此处不再赘述。
[0101] 在步骤S407中,在校验通过后,对所述FLASH存储器中的加载区进行擦除,将所述RAM内存区中的待升级程序写入已擦除的所述加载区中。
[0102] 若计算得到的CRC校验码与所接收到的校验码信息相同时,比较通过,则将开始搬运所述引导程序,首先将加载区中原有的引导程序进行擦除,以腾出空间接收所述引导程序。然后将保存于所述RAM内存区中的所述引导程序搬运到FLASH存储器中的加载区,从而实现了引导程序的自升级,在下载流程、引导程序文件内容发生变更时不需要硬件插拔、拆除外壳,直接连接通讯接口即可实现引导程序更新。
[0103] 对于上述图2或图4所示的FLASH存储器的划分方式,当所述待升级程序为应用程序时,所述待升级程序保存在应用程序区。如图6所示,步骤S102所述的在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序包括:
[0104] 在步骤S601中,接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的应用程序区进行擦除。
[0105] 在进行程序烧录时,由所述上位机解析所述烧录文件,得到待升级程序及其起始地址、校验码信息以及长度信息,并将所述起始地址、长度信息、校验码信息和待升级程序依次发送至下位机,即所述嵌入式单片机。
[0106] 当接收到上位机发送的起始地址和长度信息时,根据所述起始地址和长度信息确定待升级程序在应用程序区中的备份空间,并对应用程序区中所述的所述备份空间进行擦除,以腾出空间接收所述待升级程序。
[0107] 在步骤S602中,接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述应用程序区。
[0108] 在擦除完后,上位机向所述嵌入式单片机发送待升级程序。所述嵌入式单片机接收所述待升级程序,并将其保存至已擦除的所述应用程序区,从而完成对应用程序的接收以及保存,可以将应用程序写入到应用程序区中的任意地址,有利于降低现有技术以固定地址写入的方式产生的破解风险。
[0109] 应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0110] 在一实施例中,提供一种芯片程序的升级装置,该芯片程序的升级装置与上述实施例中芯片程序的升级方法一一对应。如图7所示,该芯片程序的升级装置包括创建模块71、升级模块72、接收模块73、自升级模块74。各功能模块详细说明如下:
[0111] 创建模块71,用于根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件,所述烧录文件中包括待升级程序及所述待升级程序在嵌入式单片机中的起始地址;
[0112] 升级模块72,用于在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;
[0113] 校验模块73,用于当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行校验;
[0114] 自升级模块74,用于在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域。
[0115] 可选地,所述创建模块71包括:
[0116] 第一划分单元,用于将所述FLSAH存储器划分为加载区、加载缓冲区和应用程序区;
[0117] 第一配置单元,用于在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为加载缓冲区内的地址;
[0118] 第一编译单元,用于对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0119] 可选地,所述创建模块71包括:
[0120] 第二划分单元,用于将所述FLSAH存储器划分为加载区和应用程序区;
[0121] 第二配置单元,用于在预设开发环境中创建分散加载描述文件,当所述待升级程序为应用程序时,将应用程序的起始地址配置为应用程序区内的地址或者当所述待升级程序为引导程序时,将引导程序的起始地址配置为RAM内存区内的地址;
[0122] 第二编译单元,用于对所述分散加载描述文件进行编译,得到待升级程序的烧录文件。
[0123] 可选地,当所述待升级程序为引导程序时,所述升级模块72包括:
[0124] 第一擦除单元,用于接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的加载缓冲区进行擦除;
[0125] 第一保存单元,用于接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述加载缓冲区;
[0126] 所述自升级模块74包括:
[0127] 第一写入单元,用于在校验通过后,对所述FLASH存储器中的加载区进行擦除,将所述加载缓冲区中的待升级程序写入已擦除的所述加载区中。
[0128] 可选地,当所述待升级程序为引导程序时,所述升级模块72包括:
[0129] 第二擦除单元,用于接收上位机根据所述烧录文件发送的起始地址、长度信息,根据所述起始地址和长度信息确定RAM内存区;
[0130] 第二保存单元,用于接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至所述RAM内存区;
[0131] 所述自升级模块74包括:
[0132] 第二写入单元,用于在校验通过后,对所述FLASH存储器中的加载区进行擦除,将所述加载缓冲区中的待升级程序写入已擦除的所述加载区中。
[0133] 可选地,当所述待升级程序为应用程序时,所述升级模块72包括:
[0134] 第三擦除单元,用于接收上位机根据所述烧录文件发送的起始地址、长度信息,对所述起始地址和长度信息确定的应用程序区进行擦除;
[0135] 第三保存单元,用于接收上位机根据所述烧录文件发送的待升级程序,将所述待升级程序保存至已擦除的所述应用程序区。
[0136] 关于芯片程序的升级装置的具体限定可以参见上文中对于芯片程序的升级方法的限定,在此不再赘述。上述芯片程序的升级装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0137] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种芯片程序的升级方法。
[0138] 在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
[0139] 根据嵌入式单片机中FLSAH存储器所划分的区域创建待升级程序的烧录文件,所述烧录文件中包括待升级程序及所述待升级程序在嵌入式单片机中的起始地址;
[0140] 在进行程序升级时,接收上位机根据所述烧录文件发送的起始地址、待升级程序,并按照所述起始地址保存所述待升级程序;
[0141] 当所述待升级程序为引导程序时,在所述待升级程序接收完后,接收上位机根据所述烧录文件发送的校验指令,根据所述校验指令对所述待升级程序进行校验;
[0142] 在校验通过后,将所述起始地址上的待升级程序写入FLASH存储器的指定区域。
[0143] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
[0144] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0145] 以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。