一种通用编程器固件的更新方法与流程

文档序号:11154507阅读:638来源:国知局
一种通用编程器固件的更新方法与制造工艺

本发明涉及嵌入式开发技术领域,具体涉及一种通用编程器固件的更新方法。



背景技术:

在普通8位OTP型MCU项目开发中,编程器是一个重要的开发工具。通过它可以将开发人员编译好的程序烧录到MCU的程序存储器中。但如果在编程器开发完成,并且交付给客户使用后,需要增加新的功能或需要对新OTP MCU编程支持,这时,就需要更新编程器的固件程序。

在传统的方案中,需要客户将编程器寄给编程器开发者,由编程器开发者更新好固件程序后,再寄给客户使用,这种方法非常麻烦且效率低下。因此,可在编程器的研发初期考虑由客户自己更新编程器的固件程序。



技术实现要素:

针对现有技术的不足,本发明的主要目的在于:解决依赖编程器开发者更新固件的问题,客户可以根据需要更新固件的嵌入产品自行更新编程器的固件程序。

为实现前述目的,本发明公开了一种通用编程器固件的更新方法,具体包括:

下载固件代码并设置更新标记位,将其一同保存至非易失性存储器中;

MCU重新上电后,boot程序根据所述更新标记位判断是否需要更新固件程序;

若需要更新固件程序,boot程序从所述非易失性存储器中读取固件代码,并将所述固件代码写入MCU的程序存储器中,同时修改所述更新标记位的值并保存;

之后,boot程序跳转到更新后的固件程序的入口地址执行更新后的固件程序;

若不需要更新固件程序,跳转至原有固件程序的入口地址执行程序;

其中,所述boot程序为预先烧录至MCU中。

优选地,所述下载固件代码包括:

在MCU固件程序中预设置一下载命令,上位机发送固件更新命令时,MCU下载固件代码。

优选地,所述MCU支持IAP功能。

优选地,所述boot程序位于MCU的复位地址处,MCU运行时首先执行boot程序。

优选地,所述固件程序在编译时,改变其加载地址,使其位于所述boot程序之后。

优选地,所述非易失性存储器为内部或外部EEPROM。

优选地,所述非易失性存储器为内部或外部FLASH。

优选地,所述下载固件代码的方式包括网络下载、远程传输。

优选地,所述更新标记位的值为1或0;所述下载固件代码并设置更新标记位包括将更新标记位设置为1。

优选地,所述判断是否需要更新固件程序包括:

所述更新标记位等于1时,表示需要更新固件;

所述更新标记位等于0时,表示不需要更新固件。

与现有技术相比,本发明的优点在于:采用本发明公开的一种通用编程器固件的更新方法,不需要提前在编程器的电路板上增加编程接口等硬件电路,此更新方法简单,操作方便,且大大提高了固件更新的效率。

附图说明

图1是本发明一实施例提出的一种通用编程器固件的更新方法中下载固件部分的流程图;

图2是本发明一实施例提出的一种通用编程器固件的更新方法中更新固件部分的流程图。

具体实施方式

鉴于现有技术中的不足,本案发明人经长期研究和大量实践,得以提出本发明的技术方案。如下将对该技术方案、其实施过程及原理等作进一步的解释说明。

本发明实施例提出一种通用编程器固件的更新方法,具体包括以下过程:

下载固件代码并设置更新标记位,将其一同保存至非易失性存储器中;

MCU重新上电后,boot程序首先从非易失性存储器中读取更新标记位,根据所述更新标记位判断是否需要更新固件程序;

若需要更新固件程序,boot程序再从所述非易失性存储器中读取固件代码,并将所述固件代码写入MCU的程序存储器中,同时修改所述更新标记位的值并保存;

之后,boot程序跳转到更新后的固件程序的入口地址执行更新后的固件程序。

若不需要更新固件程序,跳转至原有固件程序的入口地址执行程序;

其中,所述boot程序为预先烧录至MCU中,通过该程序来判断是否要更新固件,以及执行更新固件的具体操作。

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

根据前述固件更新的方法可知,本发明实施例所述方法主要由两部分组成:下载固件代码和更新固件程序。图1是本发明一实施例提出的一种通用编程器固件的更新方法中下载固件代码过程的流程图,如图1所示,具体步骤包括:

步骤101,上位机发送固件更新命令;

在正常的MCU固件程序中,增加一个下载命令,用于下载固件程序。上位机软件将通过网络下载、远程传输等方式将新的固件代码下载下来后,上位机发送固件更新命令,MCU执行下载命令进行固件代码下载操作。

步骤102,将固件代码存储到非易失性存储器中;

MCU执行下载命令,将固件代码保存到内部或外部存储器中,以备固件更新使用。

步骤103,设置更新标记位Flag_Update=1;

更新标记位用于提示是否需要进行固件更新,Flag_Update=1时,表示需要更新固件;Flag_Update=0时,表示不需要更新固件。

步骤104,将该更新标记位Flag_Update保存在内部或外部存储器中。

由于在固件的更新过程中需要对MCU重新上电,因此,用来存储固件代码的所述内部或外部存储器须为非易失性存储器。所述存储器可以为内部或外部存储器,如EEPORM、FLASH等。

图2是本发明一实施例提出的一种通用编程器固件的更新方法中更新固件程序过程的流程图,如图2所示,具体步骤如下:

步骤201,boot程序从如前所述的非易失性存储器中读取之前保存的更新标记位Flag_Update,并判断Flag_Update值;

若Flag_Update=1,则表示需要更新固件,执行步骤202;若Flag_Update=0,则表示不需要更新固件,直接跳转到原有固件程序的入口地址执行程序,执行步骤205。

步骤202,boot程序从所述非易失性存储器中读出固件代码,并将该固件代码写入MCU自身的程序存储器中;

步骤203,待固件代码全部写完毕后,将Flag_Update的值修改为0,并再次保存到所述非易失性存储器中;

固件更新后将Flag_Update的值修改为0,并保存在非易失性存储器中,待MCU重新上电时,boot程序读取到Flag_Update=0则跳过固件更新的操作,从而防止了发生重复更新固件程序的情况。

步骤204,boot程序跳转到更新后的固件程序的入口地址,执行更新后的固件程序;

步骤205,执行固件程序。

为保证固件更新的准确性和有效性,boot程序须位于MCU的复位地址处,并保证MCU运行的第一个程序必须是boot程序。固件程序须在编译时改变其加载地址,使其地址位于boot程序之后。

进一步地,为了保证固件程序的稳定性,在执行具体更新操作前,还可包括一备份过程,对原固件程序进行备份,以防更新失败导致固件程序无法使用。

需要说明的是,本发明实施例提出的一种固件更新方法中所述的下载固件代码和更新固件程序过程,在操作过程中是独立的两个执行过程,MCU根据boot程序判断是否需要执行固件更新操作,而在进行固件更新的具体过程中,则需要使用下载过程中获得的固件代码方能完成固件更新操作。

采用本发明实施例提出的固件更新方法,不需要提前在编程器的电路板上增加编程接口等硬件电路,只需MCU本身支持IAP功能即可。且在实际应用中,采用本方法可直接由客户自己进行更新编程器的固件程序,不仅减少对原始固件程序开发者的依赖,同时也提高了固件更新的效率。

应当理解,上述实施例仅为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1