本发明涉及电表估计升级技术领域,尤其是涉及一种能够降低成本,确保升级成功,程序简单的镜像式嵌入式程序固件升级方法。
背景技术:
现在客户对电能表的要求是都需要支持固件升级功能。目前,如果需要固件升级,第一种方式:通过gprs把需要升级的固件包下发给电能表,电能表固件包保存到dataflash,等待数据接受完成之后再升级程序;第二种方式:通过gprs或者串口发送命令进入升级功能,然后一边发送升级包,一边更新固件。
第一种方式存在如下问题:1、成本高,操作复杂,需要增加一个dataflash芯片,还需要对芯片进行读写,容易出现读写失败;2、加单片机管脚,增加pcb空间;3、增加外围电路,生产焊接复杂;第二种方式存在如下问题:1、升级容易失败,出现死机,比如,中途gprs网络不好;2、升级过程中电能表不能正常工作,固件升级时间偏长,影响正常使用。
技术实现要素:
本发明为了克服现有技术中存在的生产成本高,固件升级容易失败的不足,提供了一种能够降低成本,确保升级成功,程序简单的镜像式嵌入式程序固件升级方法。
为了实现上述目的,本发明采用了以下技术方案:
一种镜像式嵌入式程序固件升级方法,包括如下步骤:
(1-1)将单片机falsh虚拟内存划分为片区a和片区b;
(1-2)通过带电可擦可编程只读存储器eeprom读取片区标志,如果片区标志为0xaa,则跳转到片区a,运行片区a的程序,转入步骤(1-3);如果片区标志为0x55,则跳转到片区b,运行片区b的程序,转入步骤(1-3);
(1-3)单片机检测是否需要固件升级,当需要进行固件升级时,保存固件包数据,进行固件升级;
(1-4)固件升级完成后关闭看门狗,等待复位。
本发明通过单片机上电读取片区标志,如果单片机运行在片区a,直接跳转片区a,查看是否需要进行固件升级,如果单片机运行在片区b,直接跳转片区b,查看是否需要进行固件升级;程序设计简单,启动运行容易,升级成功率高,且不影响电能表的正常使用。
作为优选,当片区a需要进行固件升级时,固件升级的具体方法如下:
(2-1)系统先加载固件升级包,计算出固件升级包的大小m;
(2-2)通过通讯协议对比电能表的版本信息,如果电能表的版本信息正确,转入步骤(2-3);如果电能表的版本信息不正确,终止升级;
(2-3)以n个字节为一帧数据对固件升级包进行计算,得到
(2-4)发送每一帧数据,并计算每一帧数据的循环冗余校验crc32校验值,将电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值进行比较,如果电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值相同,将固件升级包数据保存到片区b,转入步骤(2-5);如果电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值不相同,终止升级;
(2-5)
(2-6)将运行片区标志写为0x55,记录当前固件升级事件,固件停止喂狗,b程序复位;
(2-7)单片机上电读取片区标志,片区标志为0x55,运行片区b的程序,完成固件升级;分片区进行升级,提高了固件升级的成功率。
作为优选,片区a和片区b的内存空间大小相等。
作为优选,n的值为256。
作为优选,通讯协议为设备语言报文规范dlms。
作为优选,还包括执行电能表的显示、计量、通讯、存储、电源管理、数据加密和售电。
因此,本发明具有如下有益效果:减少了dataflash芯片以及外围电路,降低了成本;生产方便,减少元器件,生产流程简单、速度快;减小了pcb大小,能够合理利用空间;启动代码简单,驱动简单,升级成功之后,不需要再去读取dataflash数据;程序设计简单,框架逻辑清楚;确保升级成功,即使网络不好,不影响下次升级和正常使用;升级过程中不影响正常使用。
附图说明
图1是本发明的一种流程图;
图2是本发明的固件升级的一种具体方法。
具体实施方式
下面结合附图与具体实施方式对本发明做进一步描述:
如图1所示的实施例是一种镜像式嵌入式程序固件升级方法,包括如下步骤:
步骤100,将单片机falsh虚拟内存划分为内存大小相等的片区a和片区b;
步骤200,通过带电可擦可编程只读存储器eeprom读取片区标志,如果片区标志为0xaa,则跳转到片区a,运行片区a的程序,转入步骤300;如果片区标志为0x55,则跳转到片区b,运行片区b的程序,转入步骤300;
步骤300,单片机检测是否需要固件升级,当片区a需要进行固件升级时,保存固件包数据,进行固件升级;
如图2所示,步骤301,系统先加载固件升级包,计算出固件升级包的大小m;
步骤302,通过设备语言报文规范dlms通讯协议对比电能表的版本信息,如果电能表的版本信息正确,转入步骤303;如果电能表的版本信息不正确,终止升级;
步骤303,以256个字节为一帧数据对固件升级包进行计算,得到
步骤304,发送每一帧数据,并计算每一帧数据的循环冗余校验crc32校验值,将电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值进行比较,如果电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值相同,将固件升级包数据保存到片区b,转入步骤305;如果电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值不相同,终止升级;
步骤305,
步骤306,将运行片区标志写为0x55,记录当前固件升级事件,固件停止喂狗,b程序复位;
步骤307,单片机上电读取片区标志,片区标志为0x55,运行片区b的程序,完成固件升级。
步骤400,固件升级完成后关闭看门狗,等待复位。
步骤500,执行电能表的显示、计量、通讯、存储、电源管理、数据加密和售电。
现在单片机技术越来越成熟,很多芯片都有大容量falsh,且价格和低容量的几乎没啥相差;本发明采用容量大芯片的flash,成本相差0.1元;而一个dataflash芯片至少1元,再加上外围电路,pcb大小和电源功率,成本至少增加1.5元;电能表按照1千万套出货计算,至少可以省下1.5千万成本,大大的降低了成本。
应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
1.一种镜像式嵌入式程序固件升级方法,其特征在于,包括如下步骤:
(1-1)将单片机falsh虚拟内存划分为片区a和片区b;
(1-2)通过带电可擦可编程只读存储器eeprom读取片区标志,如果片区标志为0xaa,则跳转到片区a,运行片区a的程序,转入步骤(1-3);如果片区标志为0x55,则跳转到片区b,运行片区b的程序,转入步骤(1-3);
(1-3)单片机检测是否需要固件升级,当需要进行固件升级时,保存固件包数据,进行固件升级;
(1-4)固件升级完成后关闭看门狗,等待复位。
2.根据权利要求1所述的镜像式嵌入式程序固件升级方法,其特征在于,当片区a需要进行固件升级时,固件升级的具体方法如下:
(2-1)系统先加载固件升级包,计算出固件升级包的大小m;
(2-2)通过通讯协议对比电能表的版本信息,如果电能表的版本信息正确,转入步骤(2-3);如果电能表的版本信息不正确,终止升级;
(2-3)以n个字节为一帧数据对固件升级包进行计算,得到
(2-4)发送每一帧数据,并计算每一帧数据的循环冗余校验crc32校验值,将电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值进行比较,如果电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值相同,将固件升级包数据保存到片区b,转入步骤(2-5);如果电能表的循环冗余校验crc32校验值与计算得到的循环冗余校验crc32校验值不相同,终止升级;
(2-5)
(2-6)将运行片区标志写为0x55,记录当前固件升级事件,固件停止喂狗,b程序复位;
(2-7)单片机上电读取片区标志,片区标志为0x55,运行片区b的程序,完成固件升级。
3.根据权利要求1所述的镜像式嵌入式程序固件升级方法,其特征在于,片区a和片区b的内存空间大小相等。
4.根据权利要求2所述的镜像式嵌入式程序固件升级方法,其特征在于,n的值为256。
5.根据权利要求2所述的镜像式嵌入式程序固件升级方法,其特征在于,通讯协议为设备语言报文规范dlms。
6.根据权利要求1或2或3或4或5所述的镜像式嵌入式程序固件升级方法,其特征在于,还包括执行电能表的显示、计量、通讯、存储、电源管理、数据加密和售电。
技术总结