
电表在线自更新方法及其装置的制作方法.docx
3页电表自更新方法及其装置的制作方法专利名称:电表自更新方法及其装置的制作方法技术领域:本发明涉及存储器领域,特别涉及Flash存储器自更新技术背景技术:目前,很多微控制单元(Micro Controller Unit,简称“MCU”)都将大量外围器件如闪存芯片Flash等集成到其内部,就形成了片上系统(System On Chip,简称“S0C”)SOC系统更加集成化,功能化,低功耗Flash存储器技术更加成熟,与原有存储器相比具有低功耗、高密度、读取速度快、可编程等特点SOC芯片的Flash存储器的编程模式有烧写器模式和编程模式两种烧写器模式,是指通过烧写器上的控制芯片通过Jtag 口或者其它通讯协议口来实现对Flash的擦除和写入编程模式,是指在没有外部烧写器参与的情况下,在其内部程序运行的情况下来实现对Flash存储器的的修改在申请号为200810234786. 8的中国专利中,将程序拷贝到数据存储器XRAM中,然后将XRAM映射到程序存储器某个地址范围中,中央处理器(Central Processing Unit,简称“CPU”)不断去该地址范围取指执行,完成程序的更新将更新包拷贝至4K XRAM中,然后再将这4K XRAM映射到程序存储器的0xF000-0xFF FF,程序运行跳至0xR)00后,开始完成Flash更新功能。
但是,本发明的发明人发现,该方法有几个不足之处首先XRAM掉电不保存数据,因而整个过程一旦出现掉电数据就丢失,所有过程需要重新来一遍在大批量生产过程中,必然生产效率非常低下其次,因为是在4K范围内运行程序,因而代码不能超过4K再次,更新包自更新不具备灵活性,只能做一次性功能的更改,无法实现多次定位的程序更新功能最后,这个函数最好是只能固定在Flash最后4K地址之内发明内容本发明的目的在于提供一种电表自更新方法及其装置,即使掉电之后再次上电仍然可以继续自更新,数据不会丢失,更新也不会出错为解决上述技术问题,本发明的实施方式公开了一种电表自更新方法,包括以下步骤处理器执行第一非易失性存储器中的更新程序,对第二非易失性存储器中的主程序进行更新;如果处理器检测到掉电事件,则将更新程序当前的运行地址保存到第三非易失性存储器中;重新上电后,处理器从第三非易失性存储器中读出当前的运行地址,从该地址起继续运行更新程序本发明的实施方式还公开了一种电表自更新装置,包括更新单元,用于执行第一非易失性存储器中的更新程序,对第二非易失性存储器中的主程序进行更新;检测单元,用于检测是否发生掉电事件;地址保存单元,用于当检测单元检测到掉电事件时,将更新程序当前的运行地址保存到第三非易失性存储器中;地址读取单元,用于重新上电后,从第三非易失性存储器中读出当前的运行地址,更新单元从该地址起继续运行更新程序。
本发明实施方式与现有技术相比,主要区别及其效果在于一旦检查到掉电,就把程序运行的地址保存到第三非易失性存储器中,待再次上 电读出第三非易失性存储器中的信息,继续完成电表自更新功能,这样即使掉电之后再次上电仍然可以继续自更新,数据不会丢失,更新也不会出错进一步地,在更新程序中加入一定的通信协议,可以更加方便地修改指定位置的数据和需要改变的数据长度,自更新更加具备灵活性进一步地,更新程序中预置多种更新功能,根据外部指令触发某个更新功能,相对于常规的补丁更新方式而言,本发明更新方式不需要大数据量地下载补丁,对于外部通信带宽的要求很小,对于发布更新指令的更新服务器的要求也很低进一步地,第一非易失性存储器使用数据段地址并映射到程序段地址,或者说一个物理存储器同时拥有程序段地址和数据段地址,从而可以在有更新程序的时候使用程序段地址,以便顺利执行更新程序,在没有更新程序的时候可以将第一非易失性存储器用作数据存储器图I是本发明第一实施方式中一种电表自更新方法的流程示意图;图2是SOC自带Flash存储器在逻辑空间的组成部分示意图;图3是本发明第一实施方式中一种电表自更新方法的流程示意图;图4是本发明第二实施方式中一种电表自更新装置的结构示意图。
具体实施例方式在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请各权利要求所要求保护的技术方案为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述本发明第一实施方式涉及一种电表自更新方法图I是该电表自更新方法的流程示意图具体地说,如图I所示,该电表自更新方法包括以下步骤在步骤101中,处理器执行第一非易失性存储器中的更新程序,对第二非易失性存储器中的主程序进行更新在处理器执行第一非易失性存储器中的更新程序的步骤之前,还包括以下步骤在第一非易失性存储器中预置更新程序,其中包括预先设置的至少一种更新功倉泛更新程序中包括多种更新功能,更新功能可以是对配置参数的更改,例如对实时时钟RTC精度补偿表格中的参数修改,也可以是功能的更新,如启用、禁用或修改主程序中的某个功能此外,在预置的更新程序中还可以包括预先设置的通信协议可以理解,在本发明的其它某些实施方式中,更新程序中也可以没有通信协议更新程序中预置多种更新功能,根据外部指令触发某个更新功能,相对于常规的补丁更新方式而言,本发明更新方式不需要大数据量地下载补丁,对于外部通信带宽的要求很小,对于发布更新指令的更新服务器的要求也很低。
在更新程序中加入一定的通信协议,可以更加方便地修改指定位置的数据和需要改变的数据长度,自更新更加具备灵活性这样,当处理器从电表的通信接口收到更新指令时,就执行更新程序中与该更新指令相对应的更新功能可以看出,本方案不是下载补丁再运行补丁,而是在出厂时将可能要进行的多种更新功能预置在更新程序中,根据外部指令来触发此后进入步骤102,处理器检测是否发生掉电事件若是,则进入步骤103 ;若否,则再次回到步骤101如果处理器检测到掉电事件,则将更新程序当前的运行地址保存到第三非易失性存储器中在步骤103中,处理器将将更新程序当前的运行地址保存到第三非易失性存储器中此后进入步骤104,重新上电后,处理器从第三非易失性存储器中读出当前的运行地址,从该地址起继续运行更新程序第一、第二和第三非易失性存储器在物理上是同一个闪存芯片Flash第二非易失性存储器使用程序段地址,第三非易失性存储器使用数据段地址,第一非易失性存储器使用数据段地址并映射到程序段地址第一非易失性存储器使用数据段地址并映射到程序段地址,或者说一个物理存储器同时拥有程序段地址和数据段地址,从而可以在有更新程序的时候使用程序段地址,以便顺利执行更新程序,在没有更新程序的时候可以将第一非易失性存储器用作数据存储器。
—旦检查到掉电,就把程序运行的地址保存到第三非易失性存储器中,待再次上电读出第三非易失性存储器中的信息,继续完成电表自更新功能,这样即使掉电之后再次上电仍然可以继续自更新,数据不会丢失,更新也不会出错本发明提供了 SOC芯片自带的Flash存储器自更新方法,可以显著提高生产效率本发明中的SOC芯片采用的Flash IP是PF64K08ECPU核采用的是R8051XC图2是SOC自带Flash存储器在逻辑空间的组成部分示意图如图2所示,SOC自带Flash存储器在逻辑空间由3部分组成,60K PM Flash, 4K DM Flash和一个256Info Flash其中,60K PM Flash作为第二非易失性存储器,用于存储主程序,在程序存储器中空间地址分配为0000H至EFFHL4K DM Flash作为第一非易失性存储器,用于存储更新程序,在数据存储器中空间地址分配为IOOOH至IFFHL256Info Flash作为第三非易失性存储器,用于存储当系统掉电时用户需要保持的数据,在数据存储器中空间地址分配为2000H至20FHL本发明可以克服现有技术中的不足,首先,本发明采用的是用Flash对其自身进行自更新,更新包放在Flash当中,Flash具有断电保存数据的功能,因而程序不会丢失。
若是Flash掉电了,可以将程序置标志后存储于256B的Info Flash中,当再次上电时即可读出标志,接着程序继续运行,完成剩下的更新部分;既然是存放在60K PM Flash中,当然不会存在4K的限制,实际应用中,可以根据Flash大小、程序代码长度等因素灵活调节;另外,程序中加入一定的通信协议,让程序可以修改指定位置的数据以及需要改变的数据长度Flash要实现编程功能,就必须要进行Flash擦除操作和Flash写入操作因为该模式是Flash对Flash自身的操作,因而擦除操作只能进行页擦除,不能进行整擦除一个Flash位只能从I变到0,不能从0变为I因此,要往Flash里写数据就必须先将其擦除(擦除后变为OxFF),让它每位回到I的状态擦除操作主要包括(I)预操作,主要包括配置相关的寄存器和变量;(2)定位要擦除的扇区,向要擦除的扇区中的每一个地址写入OxFF ;(3)等待Flash的BUSY (忙)信号完成写入操作主要包括(I)预操作,主要包括配置相关的寄存器和变量;(2)将源地址的一个字写入目标地址;(3)等待Flash的BUSY信号完成当擦除和写入操作的数据不止一个时,可以采用循环重复上述步骤(2)至(3),而上述擦除和写入操作也可以封装成擦除子函数和写入子函数,并把子函数拷贝到Flash指定的位置,在程序运行的过程中,让程序跳转到该位置去执行相应的擦除操作和写入操作,这样就完成了程序更新。
具体流程图如图3所示,在步骤301中,初始化相关寄存器和变量此后进入步骤302,判断串口接收是否完成若是,则进入步骤303 ;若否,则再次回到步骤302在步骤303中,判断对Flash进行何种操作此后进入步骤304,对Flash进行相应的操作此后进入步骤305,等待BUSY信号此后结束本流程具体方法和步骤如下(I)合理分配Flash空间虽然Flash空间有60K,但是也不能将更新包随意放于这60K空间里,不做合理分配会的话,更新的过程中更新包会无意被擦除,导致程序升级失败自更新原始程序和自更新之后的程序各自有多大,需要分配多少空间,只有清楚这些才能更加明确更新包应置于Flash的哪个地址范围2) bin ( 二进制)文件的生成根据功能需求完成最终的需要更新的程序,然后将该程序转化为bin文件这个bin文件就是将来对Flash进行写操作的内容3)编写函数该函数的主要功能是完成Flash的擦除和写入功能写入的过程就是实现了Flash的编程,写完之后Flash就可以按照更新的程序开始运行,实现新的功能Flash 页擦除这种映射模式可以在Flash存储器中运行程序来操作Flash,具体方法如下设置寄存器PCON的PWM位选择对程序存储器PM的Flash操作,PWM = I (对数据存储器DM或Info操作时,需要PWM = 0);设置寄存器MCON使能Flash擦除和写入,PMLCK = 1,RSLOCK = I ;设置寄存器MCON的FOPl和FOPO选择对Flash的页擦除操作,FOP [1:0] = 10 ; 设置寄存器MCON的MAPMOD选择第二种映射模式,MAPMOD = I ;将要擦除的Flash页地址写入DPTR,将Flash的数据送入累加器A,写Flash,等待Flash操作完成。
也就是如下代码权利要求1.一种电表自更新方法,其特征在于,包括以下步骤 处理器执行第一非易失性存储器中的更新程序,对第二非易失性存储器中的主程序进行更新; 如果处理器检测到掉电事件,则将所述更新程序当前的运行地址保存到第三非易失性存。
