一种实现单片机闪存动态更新的方法

文档序号:6526132阅读:215来源:国知局
专利名称:一种实现单片机闪存动态更新的方法
技术领域
本发明涉及一种用于对单片机应用系统的闪存(Flash)进行远程动态更新的方法。尤其涉及适用于8051单片机应用领域的Flash更新。
背景技术
8051及与其兼容的系列单片机作为工业的标准地位,广泛应用于各类电器及通讯产品中。一般说来单片机使用内部的Flash来装载BOOT程序和应用程序,并且这两部分都分配有独立的空间。其中BOOT是引导程序存储在BOOT区,它的主要作用是对版本区的应用程序进行更新,以适应每次应用程序升级的需要;而BOOT程序的更新通常是通过烧录器将其直接烧录到Flash的BOOT区中的。由于BOOT程序属于软件范畴,因此不可避免的存在一些不完善的地方,这就需要更新BOOT程序来解决问题。如果程序代码存放在外部Flash中,实现程序代码升级直接对Flash进行操作即可;但对于单片机内部的程序代码,则需要通过IAP(In-Application-Programming)或ISP(In-System-Programming)方式实现。传统意义上的BOOT更新方式是将单片机从设备中取出,在烧录器上重新进行烧录,这样就涉及到设备的多次拆装,同时影响设备的稳定性也浪费了大量的人力和物力;并且对于应用程序的更新通常采用的是芯片自带的BOOT程序不具有通用性。

发明内容
本发明目的在于提供一种实现对单片机Flash进行远程动态更新的方法,用以克服目前情况下更新BOOT或应用程序需要将单片机从设备中取出然后通过烧录器来更新的弊端。
本发明的技术方案为将下载启动模块,状态切换模块,状态控制模块,Flash操作模块,程序获取模块,数据接收模块各功能模块分别封装到单片机的源Flash区;由下载启动模块启动下载模式并通知状态切换模块;状态切换模块根据收到的下载指令来切换到单片机的不同运行状态;由状态控制模块设置待更新的目的Flash区域,由数据接收模块获取更新的分组数据,再由程序获取模块从数据接收模块中取出分组数据读入缓存,然后调用Flash操作模块中的Flash操作指令将数据写入到目的Flash中,完成更新。
这种Flash双向动态更新的方法,采用模块化的思想将实现过程各步骤进行封装,在不同的地方使用时只需要将模块嵌入即可,具有很强的通用性、可扩展性和可移植性。它可以应用于任何可以提供IAP或ISP操作的单片机系统。


图1是本发明单片机Flash更新方法结构示意2是本发明单片机Flash更新方法实施例实现流程图具体实施方式
本发明的要点是将下载启动模块,状态切换模块,状态控制模块,Flash操作模块,程序获取模块,数据接收模块分别封装到单片机源Flash区域。如图1所示下载启动模块负责单片机下载模式的启动,这里主要是指启动下载BOOT还是下载应用程序,它以消息的形式通知状态切换模块。通常它的实现方式是以后台界面的形式出现。
对状态切换模块,在这里我们首先定义单片机运行的两种状态。第一是BOOT态,它是指单片机从BOOT区启动,从装载BOOT的Flash的起始地址开始取指令执行BOOT程序;第二是应用态,指单片机上电后从应用程序的Flash的起始地址开始取指令运行应用程序代码。这两种状态对单片机来说是可控的,状态切换模块完成的主要工作是在收到启动模块发来的相应的下载指令来切换到单片机的不同运行状态。当前单片机状态与下载状态相同是时,不切换;如果不同,则切换。
状态控制模块,该模块主要是设置不同的待更新的目的Flash区域。如果是BOOT态,需要更新应用程序部分,如果是应用态,需要更新BOOT部分。
数据接收模块,在状态确定后就可以启动数据接收模块来获取分组数据了,该模块可以根据不同的协议来完成,它提供的是一个通用的对外接口,主要用来获得更新的分组数据。
程序获取模块,该模块的作用是从数据接收模块中取出一分组数据读入缓存,然后调用Flash操作模块中的Flash操作指令将数据写入到待更新的目的Flash区域中,完成更新。
Flash操作模块负责根据不同型号的单片机,来封装Flash操作的指令,包括Flash的读、写、擦除和校验等。以实现对目的Flash区域的更新。
下面在3G无线通信系统中以应用8051系列单片机的单板为例描述用本专利方法进行Flash更新的过程。这里以SST89V564RD单片机为例,这款单片机内部Flash分为Block0和Block1两部分,Block0是用来保存应用程序的64k区域,Block1是用来保存BOOT程序的8k区域。。
单板的主要硬件包括8051单片机SST89V564RD和一些相关的外围电路和器件。单片机第一次使用时需要进行烧录。一般是将BOOT区和应用程序区都进行烧录。默认的工作状态是单片机上电后先进入BOOT态等待10秒钟后进入应用态,正常运行时候是处在应用态的。
如图2所示1、10秒后,首先进行单片机的上电后的系统初始化。
2、运行正常应用程序,如果收到下载启动消息,根据启动消息类型判断是哪种下载,BOOT下载或应用程序下载。
3、进行单片机状态切换,如果进行BOOT下载,保持当前状态;如果进行应用程序下载,则切换到BOOT态下运行。
4、状态切换完成后,保持当前状态并进行待更新的目的Flash区寄存器的设置,同时进入数据监听串口数据状态。
5、监听下载数据,在数据接收模块进行分组处理。
6、获取分组数据存入缓存中,并调用Flash操作模块的指令,将该缓存中的分组数据刷新到待更新的目的Flash区域中。
7、检查下载文件是否下发完毕,如果完毕并且写入成功则返回成功结果,否则返回失败结果;如果未发送完毕重复5、6步骤直到结束。
开始下载的时候,也可以启动定时器,如果下载时间超过预先设定的时间,可以返回失败结果,结束下载。
本发明提出了一种单片机Flash动态更新的方法,它可以对单片机不同的Flash区域进行动态更新。BOOT区和应用程序区是经常用到并且需要更新的区域,通过BOOT区完成对应用程序存储区Flash的动态更新;通过在应用程序区来完成BOOT区的更新。同时独立封装数据接收模块,这样可以通过各种方式来获取下载的文件数据方便在各个系统中的实现。该方法提出了一种双BOOT更新模式,即用原有的BOOT区来更新应用程序区,同时又在应用程序区中的应用程序中嵌入下载BOOT功能的模式,实现了单片机所有Flash的动态更新并且解决了传统单片机的BOOT更新不能下载的弊端。
权利要求
1.一种实现单片机闪存动态更新的方法,将下载启动模块,状态切换模块,状态控制模块,闪存操作模块,程序获取模块,数据接收模块各功能模块分别封装到单片机的源闪存区域;由下载启动模块启动下载模式并通知状态切换模块;状态切换模块根据收到的下载指令来切换到单片机的不同运行状态;由状态控制模块设置待更新的目的闪存区域,由数据接收模块获取更新的分组数据,再由程序获取模块从数据接收模块中取出分组数据读入缓存,然后调用闪存操作模块中的闪存操作指令将数据写入到目的闪存区域中,完成更新。
2.权利要求1所述的实现单片机闪存动态更新的方法,其特征在于,所述状态切换模块切换到不同运行状态,是指判断当前单片机状态是否与下载状态相同,如果不同,则切换。
3.权利要求1所述的实现单片机闪存动态更新的方法,其特征在于,在下载数据后检查数据是否下载完毕,若未下载完毕,则继续下载过程直到下载完毕后返回下载结果并进行状态切换。
全文摘要
一种实现单片机闪存动态更新的方法,将下载启动模块,状态切换模块,状态控制模块,Flash操作模块,程序获取模块,数据接收模块分别封装到单片机的源Flash区;由下载启动模块启动下载模式并通知状态切换模块;状态切换模块根据收到的下载指令来切换到不同运行状态;由状态控制模块设置待更新的目的Flash区域,由数据接收模块获取更新的分组数据,再由程序获取模块取出分组数据读入缓存,然后调用Flash操作模块中的Flash操作指令将数据写入到目的Flash中,完成更新。本发明将实现过程各步骤进行封装,在不同的地方使用时只需要将模块嵌入即可,具有很强的通用性、可扩展性和可移植性。
文档编号G06F12/00GK1811708SQ20051003307
公开日2006年8月2日 申请日期2005年1月28日 优先权日2005年1月28日
发明者谢志雄, 崔卓 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1