一种双CPU系统及其程序升级方法
技术领域
本发明涉及一种远程在线升级技术,具体地涉及一种双CPU系统的程序远程升级方法。
背景技术
固件(Firmware,亦称程序)是固化在了硬件中的软件,存储的程序是运行在驱动器上的软件指令集,它存储着计算机(控制芯片MCU)系统中硬件设备最基本的参数,为系统提供最底层、最直接的硬件控制。程序功能上有点类似于主板上BIOS,在开机过程中,系统会先读取其内部的硬件设备初始化信息,使操作系统能够正确识别硬件,并为其他软件的运行提供最基本的依据。
固件是存储在硬件中的,通常这些硬件内所保存的程序是无法被用户直接读出或修改的。通常是没有必要对程序进行升级操作的,即使在程序内发现了严重的Bug,也必须由专业人员进行操作。早期程序芯片一般采用了ROM设计,它的程序代码是在生产过程中固化的,无法修改。随着技术的不断发展,修改程序以适应不断升级的硬件环境成了用户们的迫切要求,可重复写入的可编程可擦除只读存储器EPROM(Erasable Programmable ROM),EEPROM和flash伴随而生。这些芯片是可以重复刷写的,让程序得以修改和升级。
嵌入式系统的程序软件被应用的行业也是方方面面,在工业领域更是有着及其广泛的应用,例如光伏电站,一般安装在偏远地方,会不可避免的增加了对产品程序升级和维护工作的成本,因此嵌入式系统的远程在线升级技术逐渐被广泛应用开来。
发明内容
本发明所要解决的技术问题在于:利用主/副CPU间的通信通道,利用主CPU对副CPU进行程序升级,省去主副CPU的升级电路,降低了成本。
为实现上述目的,本发明提出的远程程序升级的技术方案,
一种双CPU系统的程序升级系统,该系统具有:
主CPU、副CPU、外扩Flash;
外扩Flash与主CPU相连,用于存储PMU发送的信息;
主CPU通过通讯接口与PMU相连,进行信息交互。
优选的,该系统通过RS485/422模式与PMU相连,进行数据交互。进一步的,PMU通过有线或无线模式与远端服务器相连接,进行数据交互。
远端服务器可以为,携带终端,云服务器,个人计算机等。
本发明的一个实施例,还提供一种系统程序的升级方法,
所述方法包含如下步骤:
步骤1.PMU接收并保存由远端服务器传输来的待升级程序包,PMU接收保存后发给与之连接的逆变器;
步骤2.进行主CPU程序判断升级
步骤3.利用主/从CPU间的通讯,主CPU对副CPU进行程序升级。
优选的,上述步骤1中,PMU接收保存后以广播方式发给与之连接的逆变器。
优选的,上述步骤1中,所述PMU与逆变器广播形式传输文件包期间,逆变器不进行应答回复,待发送完毕后所述PMU会和与之连接的所述逆变器逐个确认接收情况。
优选的,上述逆变器与PMU间的通讯来确定是否已经完成程序的升级。
优选的,上述步骤2中,主CPU升级,包含:
主CPU上电复位,启动后进入引导程序,所述引导程序会根据程序是否完整,来决定正常运行还是升级,
如果程序不完整,则跳转到程序升级代码的入口地址,
初始化,将ROM中的升级功能程序搬运到内部SDRAM中运行;
读取外扩Flash的程序包,进行内部Flash的程序更新;
更新完后进行校验确认,
正确则在固定地址处写入程序完整的标志,并复位重启;
不正确则重复内部程序更新操作;
如果程序完整,则直接跳转到应用程序入口地址,
初始化将ROM中程序搬运到内部SDRAM中运行:
根据外扩Flash中版本信息来决定是否需要主CPU程序升级,
如果需要主CPU程序升级,跳转到程序升级代码的入口地址,读取外扩Flash的程序包,进行内部Flash的程序更新;
更新完后进行校验确认,
正确则在固定地址处写入程序完整的标志,
并复位重启。
优选的,上述步骤3中,副CPU升级,包含:
系统上电复位后,
主CPU对副CPU进行版本信息进行一致性确认,判断是否需要对副CPU进行程序升级,
若判断需对副CPU进行程序升级,
副CPU升级包含如下步骤,
步骤1:主CPU对副CPU发送升级指令;
步骤2:握手,
步骤3:发送程序包,副CPU升级,复位重启。
进一步的,上述步骤3中,所述副CPU升级包含:
接收到主CPU的升级指令,直接跳转到程序升级代码的入口地址,进行程序升级。
优选的,上述步骤3中的方法包含如下步骤:
副CPU上电复位后,进入副CPU的引导程序,该引导程序会根据程序是否完整,来决定正常运行还是升级,
如果程序不完整,则跳转到程序升级代码的入口地址,
初始化将ROM中的升级功能程序搬运到内部SDRAM中运行,
该程序
等待主CPU对其内部Flash的擦除,编程操作,
校验完成后,复位重启;
如果程序完整,则跳转到应用程序入口地址,
初始化将ROM中程序搬运到内部SDRAM中运行,程序判断主CPU是否对其升级,
若判断对其升级,则跳转到程序升级代码的入口地址,进行程序升级,
若判断不对其升级,则进行正常数据通信;
升级完成。
优选的,待程序传输采用远程广播形式由PMU发送,逆变器同步接收并进行文件的校验保存,接收完成后,进行程序更新,这样可实现多台机器的程序同步更新,既提高了整体升级的效率也确保了程序升级的安全。
本发明双CPU远程程序升级的系统与方法的技术方案如下:
本发明双CPU远程程序升级的系统与方法的特征在于多台逆变器与PMU通信机制的设计可以确保程序能够被安全正确的保存下来,确保系统升级的程序的正确可靠,也提高了多台升级的效率;
本发明双CPU远程程序升级的系统与方法的特征在于提出的主副CPU完善的程序升级机制,能够保证程序在恶劣情况的安全升级,和再升级的需要,实现可靠升级;
本发明双CPU远程程序升级的系统与方法的特征在于利用主副CPU的通信通道,实现主CPU对副CPU的在线升级的方法;
有益效果
本发明实施例中,提出一种双CPU远程程序升级的系统和方法,确保升级文件可以正确完整的传输保存,同时可以实现多台机器的同步升级。同时本发明的方法利用主副CPU间的通讯,利用主CPU对副CPU的程序升级功能,精简了原有设计的切换接口电路,降低了成本。考虑到升级过程中异常情况的出现的随机性,本发明提出的方法可保证系统升级异常中断后能自我重启再继续升级,实现真正意义的可靠升级,且兼容原有的现场手动升级功能,最大程度上方便了产品的升级与维护,具有较好的可移植性,综合兼顾了升级的成功率和效率,在远程程序升级领域有一定的实用价值和参考价值。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将实施例的所包含技术描述中需要使用的附图做简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图都在本发明的保护范围之内。
图1为本发明双CPU系统的结构示意图,
图2为本发明双CPU系统的单机的升级的结构示意图,
图3为本发明双CPU系统的主CPU程序升级的逻辑流程图,
图4为本发明双CPU系统的副CPU程序升级的逻辑流程图。
具体实施方式
以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。
实施例:
如图1所示为双CPU远程程序升级的系统示意图,图中:1-n为逆变器(逆变器)、2为PMU、3为PC客户端,PMU2与多台逆变器1-n通过网络连接,在现场组成局域网络,PMU2对逆变器1-n进行数据监控与采集,PC客户端3与PMU2通过网络连接来实现交互信息。
作为图1的变形,PC客户端3用云服务器或携带终端代替也能实现本方案的目的。
作为图1的变形,PC客户端3与PMU2通过无线模式连接,进行交互信息,也能实现本方案的目的。
如图2所示,为单机的升级的结构示意图,系统包含:通讯接口电路、主CPU、副CPU及外扩Flash;主CPU与通讯接口电路相连接,外扩FLSAH与主CPU相连接,副CPU与主CPU相连接;需要程序升级时:
步骤1.PMU接收并保存由远端服务器传输来的待升级程序包后;以广播方式下发给与之连接的逆变器,逆变器根据程序文件的版本信息来确认是否需要保存,需要保存时将接受的程序暂存于外扩flash,主CPU升级完成后,利用主/副CPU间的通讯,主CPU对副CPU进行升级。
如图3所示,为主CPU升级的逻辑流程图
步骤301:主CPU上电从内部Flash模式启动,读取存储装置中主CPU应用程序完整标志信息;
步骤302:判断主CPU应用程序是否完整,如果完整,则进行主CPU应用程序运行;
步骤303:如果主CPU应用程序不完整,则跳转到引导程序从外扩Flash获取程序包进行自身程序升级,升级成功后保存完整标志位,复位重启;
步骤304:主CPU应用程序运行中会与副CPU建立通信,判断副CPU程序是否需要升级;
步骤305:如果副CPU程序不需要升级的,则接下来等待判断是否需要接收远程PMU发送过来的程序包;
步骤306:如果副CPU程序不是完整的或者与主CPU版本不匹配,需要升级,则从外扩Flash中获取副CPU程序包,并对副CPU进行程序升级,直到升级成功重启;
步骤307:如果判断PMU发送来的数据是需要的升级包,主CPU会接收并保存到外扩Flash中,最后进行程序校验判断;
步骤308:如果校验判断正确,则返回步骤303执行主CPU程序升级;
步骤309:如果检验判断不正确,则会持续校验判断三次,仍然不正确,则会向主CPU发送重发请求;
步骤310:如果校验三次中,判断正确,则返回步骤303执行主CPU程序升级;
步骤311:如果判断PMU发送来的数据不是需要的升级包,则不接收,返回步骤304,执行下一个周期。
如图4所示,为副CPU升级的逻辑流程图:
步骤401:副CPU上电从内部Flash模式启动,读取存储装置中副CPU应用程序完整标志信息;
步骤402:判断副CPU应用程序是否完整,如果是,则进行副CPU应用程序运行;
步骤403:如果副CPU应用程序不完整,则跳转到引导程序判断主CPU是否对其进行程序升级;
步骤404:如果接收到主CPU发送过来的升级指令,则根据升级指令进行ROM区块的擦除、烧写、校验;
步骤405:如果没有接收到主CPU发送过来的升级指令,则持续等待;
步骤406:副CPU应用程序运行中会与主CPU建立通信,判断主CPU是否要升级副CPU程序;
步骤407:如果是,则返回步骤403执行副CPU程序升级;
步骤408:如果不是,则直接返回步骤406,主副之间正常通讯,持续判断副CPU是否需要程序升级。
条件说明:
上述方案中,判断主CPU应用程序是否完整方法说明。例如:分配一个固定地址用于保存程序完整标志,在进行程序升级前,擦除该地址标志,进行升级,程序正确升级后,写入特定值,如0X438C,上电后通过读取该标志是否为0X438C,来判断程序是否完整。
主CPU对副CPU进行版本信息确认,判断是否需要对副CPU进行程序升级,
版本信息进行确认:程序版本号不匹配或与副CPU无法建立通讯。
主CPU升级时:
如果程序不完整,则跳转到程序升级代码的入口地址,
初始化,将ROM0中的升级功能程序搬运到内部SDRAM中运行(该程序被存放在独立的ROM0区块,应用程序升级是不会修改到这部分区块的),程序会进行程序版本的判断,内部应用程序区ROM1的擦除,从外扩Flash读取程序并写到内部ROM1中,
校验正确后,在固定地址处写入程序完整标志,并复位重启;
如果程序完整,则跳转到应用程序入口地址,
初始化将ROM1中程序搬运到内部SDRAM中运行,读取副CPU程序升级标志来判断是否需要对副CPU进行程序升级,
接下来程序执行判断是否接收远程发来的程序升级包,并校验保存到外扩Flash中,
接收完成后再对外扩Flash文件整体校验确认,
且机器满足程序升级条件,
再跳转到程序升级代码的入口地址,进行主CPU程序升级。
副CPU升级时:
如果程序不完整,则跳转到程序升级代码的入口地址,
初始化将ROM0中的升级功能程序搬运到内部SDRAM中运行(该程序被存放在独立的ROM0区块,应用程序升级是不会修改到这部分区块的),
该程序
等待主CPU对其内部Flash的擦除,编程操作,
校验完成后,复位重启;
如果程序完整,则跳转到应用程序入口地址,
初始化将ROM1中程序搬运到内部SDRAM中运行,程序判断主CPU是否对其升级,
如果有就跳转到程序升级代码的入口地址,进行程序升级,
如果没有则进行正常数据通信;
升级完成。
技术效果
上述技术方案中提出的ROM0块区是指被分配用来保存引导程序自身程序所用;
上述技术方案中提出的ROM1块区是指被分配用来保存应用程序程序所用;
上述技术方案中提出的SDRAM块区是指被分配用来装载ROM区程序到RAM区运行,提高运行速度。
上述技术方案中提出的外扩Flash是指用来保存需要升级的多版本程序。
上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。