首页> 中国专利> IO模块的固件更新方法及IO模块

IO模块的固件更新方法及IO模块

摘要

本发明公开了一种IO模块的固件更新方法,IO模块的固件更新方法包括将位于同一固件内的第一程序和第二程序分别存储在IO模块的MCU片上存储器的第一存储区和第二存储区,第一存储区与低位地址相对应,第二存储区与高位地址相对应;当触发IO模块的固件更新条件时,执行第一程序以实现固件的更新。本发明将第一程序和第一程序合并为一个固件,并在一个工程进行开发,并将第一程序和第二程序在存储器上分区存放,在固件部署时可以通过一次部署完成IO模块的固件更新,方便维护,降低维护成本,通过一次部署完成IO模块的固件更新,减少了部署工作量和部署错误。

著录项

说明书

技术领域

本发明涉及嵌入式系统控制领域,尤其涉及一种IO模块的固件更新方法及IO模块。

背景技术

DCS(分散控制系统)中需要大量的IO模块采集现场数据或驱动现场设备。DCS中的IO(输入输出)模块是一种以微控制器(MCU)为基础的嵌入式终端设备,其存储器上存储有固件代码,固件类型包括BootLoader(引导加载)固件和应用固件,BootLoader固件是在IO模块上电或复位时启动的初始化程序,用于对IO模块进行相应的初始化。应用固件是用于实现IO模块的各种功能的程序。随着IO模块功能的更新,IO模块的固件也存在更新的需求。

现有技术中,BootLoader固件和应用固件是在独立的工程中进行开发和维护。IO模块进行固件更新时需要分两次部署,第一次部署需将BootLoader固件烧写到IO模块,即,将BootLoader固件代码写入IO模块内存储器的开始地址,第二次部署将应用固件烧写到IO模块,即,将应用固件代码写入IO模块内存储器的BootLoader固件代码后的地址。由于BootLoader固件和应用固件是在独立的工程中进行开发的,不能统一维护,造成维护成本偏高,IO模块固件更新时分两次部署会造成部署工作量增大,部署错误增加。

发明内容

本发明要解决的技术问题是为了克服现有技术中BootLoader固件和应用固件在独立的工程中开发,不能统一维护,造成维护成本偏高,IO模块固件更新时分两次部署会造成部署工作量增大,部署错误增加的缺陷,提供一种IO模块的固件更新方法及IO模块。

本发明是通过下述技术方案来解决上述技术问题:

一种IO模块的固件更新方法,包括:

将位于同一固件内的第一程序和第二程序分别存储在IO模块的MCU片上存储器的第一存储区和第二存储区,所述第一存储区与低位地址相对应,所述第二存储区与高位地址相对应;

当触发所述IO模块的固件更新条件时,执行所述第一程序以实现所述固件的更新。

较佳地,所述执行所述第一程序以实现所述固件的更新,包括:

执行所述第一程序,以读取更新标志,并在所述更新标志表明所述固件存在更新时,擦除所述第二存储区的内容,以及读取新的第二程序并写入所述第二存储区。

较佳地,所述读取更新标志,包括:

从IO模块的非易失性存储器读取所述更新标志。

较佳地,所述擦除所述第二存储区的内容,包括:

擦除第二程序起始地址以后的存储空间的内容,所述第二程序起始地址等于所述MCU片上存储器的固件存储起始地址加所述第一程序的大小后所得的偏移地址,或,在所述第一程序与所述第二程序之间存在数据边界保护区时,等于所述MCU片上存储器的固件存储起始地址加所述第一程序的大小加所述数据边界保护区的大小后所得的偏移地址。

较佳地,所述读取新的第二程序并写入所述第二存储区,包括:

从所述IO模块的非易失性存储器读取新的固件,并将所述新的固件所包括的第二程序写入所述第二存储区。

较佳地,所述读取新的第二程序并写入所述第二存储区,包括:

读取新的第二程序起始地址起始的存储空间并写入所述第二存储区,直至读取后写入的数据大小等于所述新的第二程序的大小;

其中,所述新的第二程序起始地址等于新固件存储起始地址加所述第一程序的大小后所得的偏移地址,或,在所述第一程序与所述新的第二程序之间存在数据边界保护区时,等于新固件存储起始地址加所述第一程序的大小加所述数据边界保护保护区的大小后所得的偏移地址;

所述新的第二程序的大小等于所述新的固件的大小减去所述第一程序的大小,或,在所述第一程序与所述新的第二程序之间存在数据边界保护区时,等于所述新的固件的大小减去所述第一程序的大小再减去所述数据边界保护区的大小。

较佳地,所述执行所述第一程序以实现所述固件的更新,还包括:在写入所述第二存储区之后,清除所述更新标志以及所述新的第二程序的原始存储。

一种IO模块,包括微控制单元;

所述微控制单元的片上存储器包括第一存储区和第二存储区,所述第一存储区和所述第二存储区分别用于存储位于同一固件内的第一程序和第二程序,所述第一存储区与低位地址相对应,所述第二存储区与高位地址相对应;

所述微控制单元在所述IO模块的固件更新条件被触发时,执行所述第一程序以实现所述固件的更新。

较佳地,所述微控制单元包括ARM Cortex-M架构的微控制单元。

较佳地,所述IO模块还包括非易失性存储器。

本发明的积极进步效果在于:本发明将第一程序和第二程序合并在一个固件进行开发,并将第一程序和第二程序在存储器上分区存放,在固件更新时可以通过一次部署完成IO模块的固件更新,通过第一程序和第二程序合并在一个固件进行开发,方便维护,降低维护成本,通过一次部署完成IO模块的固件更新,减少了部署工作量和部署错误。

附图说明

图1为本发明实施例1的IO模块的固件更新方法的流程示意图。

图2为本发明实施例1的MCU片上存储器的地址空间分区示意图。

图3为本发明实施例1的硬件平台示意图。

图4为本发明实施例1的应用程序内下载固件的帧格式。

图5为本发明实施例2的IO模块的结构示意图。

具体实施方式

下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。

实施例1

本实施例提供一种IO模块的固件更新方法,如图1所示,包括以下步骤:

步骤100、将位于同一固件内的第一程序和第二程序分别存储在IO模块的MCU片上存储器的第一存储区和第二存储区,第一存储区与低位地址相对应,第二存储区与高位地址相对应。具体的,第一程序可以为BootLoader程序或引导程序,用于引导固件更新。第二程序可以为应用程序,具体应用程序的种类可根据IO模块所在设备的功能决定,例如扫码设备上IO模块内的应用程序可包括扫码程序等,支付设备上IO模块内的应用程序可包括支付程序等。MCU片上存储器可以为片上Flash(一种存储器)。如图2所示,从片上Flash起始地址到第二程序起始地址构成第一存储区,该第一存储区用于存储第一程序,从第二程序起始地址开始后的地址空间构成第二存储区,该第二存储区用于存储第二程序。MCU为ARMCortex-M系列(包括Cortex-M3,Cortex-M4以及Cortex-M7等),应用范围广。

步骤200、当触发IO模块的固件更新条件时,执行第一程序以实现固件的更新。其中,固件的更新尤其是指第二程序的更新。固件更新条件包括上电和复位操作。例如,每当IO模块重新上电或被复位时,就执行一次第一程序,以查看第二程序是否需要更新并在需要更新时完成更新。

本实施例的IO模块的固件更新方法通过将第一程序和第二程序合并在一个固件(也可以称为一个工程)进行开发,并将第一程序和第二程序在存储器上分区存放,在固件更新时可以通过一次部署完成IO模块的固件更新,通过第一程序和第二程序合并在一个固件进行开发,方便维护,降低维护成本,通过一次部署完成IO模块的固件更新,减少了部署工作量和部署错误。

在可选的一种实施方式中,步骤200中,执行第一程序以实现第二程序的更新,具体包括:执行第一程序,以读取更新标志,并在更新标志表明固件存在更新时,擦除第二存储区的内容,以及读取新的第二程序并写入第二存储区。新的第二程序即为要更新到MCU片上存储器的第二存储区的程序。需要说明的是,新的第二程序包含于新的固件,新的固件中除了包含新的第二程序还包括第一程序。MCU把新的固件下载到IO模块的非易失性存储器(例如Flash、PROM、EEPROM、EPROM)上后,会置位非易失性存储器上的更新标志,当执行第一程序时会读取非易失性存储器上的更新标志,并在更新标志表明固件存在更新时,擦除第二存储区的内容,以及读取新的第二程序并写入第二存储区,以方便固件更新操作。

在可选的一种实施方式中,步骤200中,读取更新标志具体包括:从IO模块的非易失性存储器读取更新标志。通过从非易失性存储器读取更新标志,可以不影响IO模块的正常运行。

在可选的一种实施方式中,步骤200中,擦除第二存储区的内容具体包括:

擦除第二程序起始地址以后的存储空间的内容,其中,第二程序起始地址指的是片上存储器中第二程序的起始地址,也是第二存储区的起始地址。

在第一程序和第二程序紧邻(即两者之间不存储数据边界保护区)时,第二程序起始地址等于MCU片上存储器的固件存储起始地址加第一程序的大小后所得的偏移地址。固件存储起始地址指的是存储的固件的起始地址,是第一存储区的起始地址,也是存储第一程序的起始地址。

或,在第一程序与第二程序之间存在数据边界保护区时,第二程序起始地址等于MCU片上存储器的固件存储起始地址加第一程序件的大小加数据边界保护区的大小后所得的偏移地址。如图2中的将Bootloader程序内的源文件指定放置在MCU片上Flash的物理地址的起始地址到应用程序起始地址之间的存储空间上,将应用程序代码存放到应用程序起始地址以后的存储空间上,该存储空间构成第二程序起始地址以后的存储空间,第一程序为Bootloader程序,第二程序为应用程序,第一程序的大小为Bootloader程序的大小。第二程序起始地址,即,应用程序起始地址可以通过以下算法求得:

第二程序起始地址=MCU片上Flash固件存储起始地址+Bootloader程序的大小。

当第一程序与第二程序之间存在数据边界保护区时,第二程序起始地址,即,应用程序起始地址可以通过以下算法求得:

第二程序起始地址=MCU片上Flash固件存储起始地址+Bootloader程序的大小+数据边界保护区的大小。

通过上述算法计算第二程序起始地址,从而清楚相应地址的内容,可以更方便地进行固件更新,提高固件更新效率。设置数据边界保护区可以防止更新数据出错,保证更新数据的准确性。

在可选的一种实施方式中,步骤200中,读取新的第二程序并写入第二存储区具体包括:从IO模块的非易失性存储器读取新的第二固件并写入第二存储区。例如,当IO模块上电或复位后,先进入Bootloader程序。Bootloader程序会先读取板载Flash(也可称为片外Flash,可作为一种非易失性存储器)上更新标志存储地址。若更新标志为真,BootLoader程序会将MCU片上Flash第二起始地址以后的存储空间擦除。擦除成功后,BootLoader程序从板载Flash的新固件存储地址加上Bootloader程序的大小,再加上数据边界保护区的大小后得到偏移地址,从偏移地址起始的存储空间上分批读取到MCU片上RAM上写入到MCU的片上Flash的第二存储区,直至完成新的固件大小减去Bootloader程序的大小,再减去数据边界保护区的大小的数据搬移(片外Flash->片上RAM->片上Flash)。通过设置MCU片外存储器,可以暂存待更新的固件,在固件更新时从IO模块的MCU片外存储器读取新的第二固件并写入第二存储区,以实现固件更新,方便了固件更新操作。

在可选的一种实施方式中,步骤200中,读取新的第二固件并写入第二存储区具体包括:

读取新的第二程序起始地址起始的存储空间并写入第二存储区,直至读取后写入的数据大小等于新的第二程序的大小。

其中,新的第二程序起始地址指的是在非易失性存储器上的需要更新到MCU片上存储器的第二程序的起始地址。在新的固件中第一程序和新的第二程序紧邻(即两者之间不存储数据边界保护区)时,新的第二程序起始地址等于新固件存储起始地址加第一程序的大小后所得的偏移地址。或,在第一程序与新的第二程序之间存在数据边界保护区时,新的第二程序起始地址等于新固件存储起始地址加第一程序的大小加数据边界保护区的大小后所得的偏移地址。

在新的固件中第一程序和新的第二程序紧邻(即两者之间不存储数据边界保护区)时,新的第二程序的大小等于新的固件的总大小减去第一程序的固件大小。或,在第一程序与新的第二程序之间存在数据边界保护区时,新的第二程序的大小等于新的固件的大小减去第一程序的大小再减去新的第二程序的大小。

通过上述计算得到新的第二程序起始地址和新的第二程序的大小可以更方便地进行固件更新,提高固件更新效率。

在可选的另一种实施方式中,固件更新方法还包括以下步骤:

在写入第二存储区之后,清除更新标志以及新的固件的原始存储。具体的,当新固件完成搬移后,BootLoader程序会清除片外Flash的更新标志以及其上存储的新的固件,以便于进行下一次的更新操作。

本实施例的IO模块的固件更新方法的具体应用如下:

本实施例的IO模块的固件更新方法部署在如图3所示的硬件平台上,IO模块固件更新方法运行在ARMCortex-M3/M4内核MCU上,MCU通过LocalBus(当地总线)总线连接以太网控制芯片,该以太网控制芯片通过PHY(端口物理层)连接以太网,当MCU接收到外部控制器发来的更新指令时,MCU通过以太网获取新的固件,由于此时MCU处于运行状态,MCU会将新的固件经SPI(串行外设接口)总线写入存储在板载或片外的FLASH芯片或其他非易失性存储器上进行暂存。

为了实现BootLoader程序和应用程序在同一个内开发设计,存储于同一固件中,从而只需要部署一次固件,本实施例的IO模块的固件更新方法运用分散加载技术,在一个固件里,将BootLoader程序和应用程序分区存放,将BootLoader程序存放在ARMCortex-M系列MCU片上Flash存储器地址前段,将应用程序存放在ARMCortex-M系列MCU片上Flash存储器地址的后段。

其中Bootloader程序的大小由实际Bootloader实际大小决定。为了实现数据保护还可以在第一程序和第二程序之间增加数据边界保护区,数据边界保护区的大小通常由人为设定,可以是1024字节,也可以是2048字节等任意大小。

BootLoader程序和应用程序是在一个软件工程内开发的一个固件,为了实现BootLoader程序运行完成后可以进入应用程序,通过程序跳转指令实现程序间的跳转,提高了程序执行的效率。BootLoader程序完成固件更新,应用程序内完成固件下载。新固件存储在板载Flash内,板载Flash还存储有更新标志。

BootLoader程序可以在擦除应用程序存放地址的内应用程序代码后,仅将待更新的固件的应用程序进行烧写更新,不更新BootLoader程序。

IO模块的固件更新方法的运行或执行特征如下所述:

当IO模块上电或复位后,先进入Bootloader程序。Bootloader程序会先读取板载Flash上更新标志存储地址。若更新标志为真。BootLoader程序会将MCU片上Flash物理地址应用程序起始地址以后的存储空间擦除。擦除成功后,BootLoader程序从板载Flash的新固件存储地址加上Bootloader程序的大小,再加上边界保护的大小后得到偏移地址,从偏移地址起始的存储空间上分批读取到MCU片上RAM上写入到MCU的片上Flash的应用程序存储区域,直至完成固件大小减去Bootloader程序的大小,再减去数据边界保护区的大小的数据搬移(片外Flash->片上RAM->片上Flash)。当新固件完成搬移后,BootLoader程序会清除片外Flash的更新标志以及新的固件。当清除完更新标志和新固件后,BootLoader程序完成后便进入应用程序了。若更新标志为假,BootLoader程序就执行完毕,进入应用程序。

应用程序要求实现新固件的下载,并将新固件存储在片外Flash中。新固件存储成功后,将更新标志写入到片外Flash。固件下载帧的帧格式如图4所示。帧格式的帧头用来表示帧的类型,帧格式的功能码用来表示固件下载帧,数据长表示帧数据大长度,地址偏移表示MCU中对应的偏移地址,数据表示新固件的内容,CRC(循环冗余校验)16表示校验码。当完成更新标志写入片外Flash后,应用程序会执行软复位(重启)。在BootLoader程序里完成固件更新。

实施例2

本实施例的一种IO模块,如图5所示,包括微控制单元1(MCU)。所述微控制单元1的片上存储器包括第一存储区和第二存储区,所述第一存储区和所述第二存储区分别用于存储位于同一固件内的第一程序和第二程序,所述第一存储区与低位地址相对应,所述第二存储区与高位地址相对应;所述微控制单元1在所述IO模块的固件更新条件被触发时,执行所述第一程序以实现所述固件的更新。

在可选的一种实施方式中,所述微控制单元1包括ARM Cortex-M架构的微控制单元。

在可选的一种实施方式中,所述IO模块还包括非易失性存储器2。例如Flash、PROM、EEPROM、EPROM。

在可选的一种实施方式中,所述执行所述第一程序以实现所述固件的更新,包括:

执行所述第一程序,以读取更新标志,并在所述更新标志表明所述固件存在更新时,擦除所述第二存储区的内容,以及读取新的第二程序并写入所述第二存储区。

在可选的一种实施方式中,所述读取更新标志,包括:

从IO模块的非易失性存储器读取所述更新标志。

在可选的一种实施方式中,所述擦除所述第二存储区的内容,包括:

擦除第二程序起始地址以后的存储空间的内容,所述第二程序起始地址等于所述MCU片上存储器的固件存储起始地址加所述第一程序的大小后所得的偏移地址,或,在所述第一程序与所述第二程序之间存在数据边界保护区时,等于所述MCU片上存储器的固件存储起始地址加所述第一程序的大小加所述数据边界保护区的大小后所得的偏移地址。

在可选的一种实施方式中,所述读取新的第二程序并写入所述第二存储区,包括:

从所述IO模块的非易失性存储器读取新的固件,并将所述新的固件所包括的第二程序写入所述第二存储区。

在可选的一种实施方式中,所述读取新的第二程序并写入所述第二存储区,包括:

读取新的第二程序起始地址起始的存储空间并写入所述第二存储区,直至读取后写入的数据大小等于所述新的第二程序的大小;

其中,所述新的第二程序起始地址等于新固件存储起始地址加所述第一程序的大小后所得的偏移地址,或,在所述第一程序与所述新的第二程序之间存在数据边界保护区时,等于新固件存储起始地址加所述第一程序的大小加所述数据边界保护保护区的大小后所得的偏移地址;

所述新的第二程序的大小等于所述新的固件的大小减去所述第一程序的大小,或,在所述第一程序与所述新的第二程序之间存在数据边界保护区时,等于所述新的固件的大小减去所述第一程序的大小再减去所述数据边界保护区的大小。

在可选的一种实施方式中,所述执行所述第一程序以实现所述固件的更新,还包括:在写入所述第二存储区之后,清除所述更新标志以及所述新的第二程序的原始存储。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号