本发明属于具体涉及一种嵌入式设备应用程序的自恢复方法。
背景技术:
随着经济技术的发展和人们生活水平的提高,嵌入式设备的应用越来越广泛,嵌入式设备也在人们的生产和生活之中发挥了无以伦比的巨大作用。
嵌入式设备因为存在嵌入式芯片,因此一般都具有自控控制、智能算法等功能。而嵌入式芯片的控制功能的发挥,则完全依赖于嵌入式芯片的控制程序。目前嵌入式系统的应用程序是放在片外flash上,当对应用程序进行升级时,嵌入式芯片将采用flashboot模式。但是,由于意外的断电或者其它故障,导致在烧录flash时突然中断,因而程序没有烧录完成。然而,目前的嵌入式芯片一般都不具备linux系统的u-boot自恢复功能,因此其后果是导致程序无法正常运行,需要返厂后用仿真器完成程序的烧录。
技术实现要素:
本发明的目的在于提供一种能够稳定提供备用程序和保证嵌入式芯片程序自动恢复的嵌入式设备应用程序的自恢复方法。
本发明提供的这种嵌入式设备应用程序的自恢复方法,包括如下步骤:
s1.根据控制芯片的指令集,开发控制芯片的二级bootload程序,所述二级bootload程序能够对flash进行读写、boot模式切换和读取控制芯片i/o引脚电平信号;
s2.根据控制芯片的指令集,开发嵌入式芯片的工厂程序,所述工厂程序能够对flash进行读写、读取嵌入式设备通信接口数据和对嵌入式芯片的应用程序进行升级;
s3.将步骤s1开发的二级bootload程序和步骤s2开发的工厂程序分别就进行编译得到编译文件,并分别烧录到flash的不同区域;
s4.若控制芯片的应用程序无法正常启动,则控制芯片自动重启,此时控制芯片的一级bootload程序自动加载并从flash中完成二级bootload程序的加载;
s5.二级bootload程序控制控制芯片检测i/o引脚电平信号,并在i/o引脚电平信号发生变化时从flash中加载工厂程序;
s6.工厂程序读取嵌入式设备通信接口数据,完成应用程序的读取并烧录到flash中;
s7.控制芯片再次重启,此时控制芯片的一级bootload程序自动加载并从flash中完成二级bootload程序的加载,二级bootload程序控制控制芯片检测i/o引脚电平信号,并在i/o引脚电平信号未发生变化时从flash中加载步骤s6存储的应用程序,完成嵌入式设备控制芯片程序的自恢复。
所述的控制芯片为固化了一级bootload的嵌入式芯片。
所述的控制芯片为dsp。
所述的flash为nandflash或norflash。
所述的嵌入式设备通信接口为以太网通信接口或sd卡数据接口。
所述的二级bootload程序在flash中的存储为二级bootload程序从flash中的第一个blocks开始进行存储。
本发明提供的这种嵌入式设备应用程序的自恢复方法,通过二级bootload程序和工厂程序的两级程序加载,使得嵌入式设备的控制芯片能够在flash存储的应用程序受损的情况下从设备外部获取应用程序数据,从而使得嵌入式设备的控制芯片应用程序的自行恢复功能更加可靠和稳定;而且采用二级bootload程序代码,代码更为简单可靠,因此启动速度更快,响应更加迅速。
附图说明
图1为本发明的方法流程图。
具体实施方式
如图1所示为本发明的方法流程图,以下以ti公司的dsp芯片为例,说明本发明的具体方法:
本发明提供的这种嵌入式设备应用程序的自恢复方法,包括如下步骤:
s1.根据控制芯片的指令集,开发控制芯片的二级bootload程序,所述二级bootload程序能够对flash进行读写、boot模式切换和读取控制芯片i/o引脚电平信号;
具体为开发一套二级bootload程序,该程序功能包括:通过gpio检测按键状态,来决定二级bootload程序是从flash的30blocks开始加载工厂程序,还是从flash的200blocks开始加载应用程序;读取flash程序内容时,根据ti的ais格式说明,找到sectionload(0×58535901)标识,将数据导入指定的存储空间(片内ram或者片外sdram)。同时找到jump(0×58535905)标识,通过汇编代码完成跳转到c入口c_int00的操作;
s2.根据控制芯片的指令集,开发嵌入式芯片的工厂程序,所述工厂程序能够对flash进行读写、读取嵌入式设备通信接口数据和对嵌入式芯片的应用程序进行升级;
具体为开发一套工厂程序,该程序功能包括:通过以太网或者sd卡实现对应用程序的升级;对升级是否成功也液晶显示的方式告知;flash的读写功能;
s3.将步骤s1开发的二级bootload程序和步骤s2开发的工厂程序分别就进行编译得到编译文件,并分别烧录到控制芯片的flash的不同区域;
具体为将二级bootload程序、工厂程序、应用程序分别编译,运用ti提供的aisgen.exe工具生成ais格式的bin文件,将二级bootload程序的bin文件通过仿真器从flash的第1blocks开始往后烧写;将工厂程序的bin文件通过仿真器从flash的第30blocks开始往后烧写;应用程序的bin文件通过仿真器从flash的第200blocks开始往后烧写;
s4.若控制芯片的应用程序无法正常启动,则控制芯片自动重启,此时控制芯片的一级bootload程序自动加载并从flash中完成二级bootload程序的加载;
s5.二级bootload程序控制控制芯片检测i/o引脚电平信号,并在i/o引脚电平信号发生变化时(比如按键按下,使得i/o引脚电平信号发生变化)从flash中的30blocks开始加载工厂程序,并完成工厂程序的c入口跳转并运行;
s6.工厂程序读取嵌入式设备通信接口数据(比如通过外部通过连接以太网口的网络传输应用程序数据,或者从sd卡通信接口传输数据),完成应用程序的读取,并从flash中的第200blocks开始烧录;
s7.控制芯片再次重启,此时控制芯片的一级bootload程序自动加载并从flash中完成二级bootload程序的加载,二级bootload程序控制控制芯片检测i/o引脚电平信号,并在i/o引脚电平信号未发生变化时从flash中的200blocks开始加载步骤s6存储的应用程序,完成应用程序的c入口跳转并运行,完成嵌入式设备控制芯片程序的自恢复。