发明内容
本发明所要解决的技术问题是嵌入式系统不能记录嵌入式系统的异常状态,不利于分析排查嵌入式系统异常产生的原因的问题。
为了解决上述技术问题,本发明所采用的技术方案是提供一种嵌入式系统的黑匣子装置,包括:
子软件运行状态监控模块,设置在嵌入式系统上,用于监控嵌入式系统中各子软件的运行状态;
异常中断产生模块,由嵌入式系统的目标板上的CPLD实现,用于在各子软件异常中断或复位时产生中断;
黑匣子,包括PSoC芯片、SRAM内存、非易失性存储器和供电模块,所述SRAM内存实时保存各子软件的运行状态和复位信息,所述PSoC芯片与所述CPLD和嵌入式系统的CPU进行交互,在嵌入式系统复位或死机时,从所述SRAM内存中读取保存的全部信息并保存在所述非易失性存储器中,同时标记最后一次记录的位置,以及根据指令从所述非易失性存储器中输出相关信息,所述供电模块用于在嵌入式系统掉电时为黑匣子供电。
在上述黑匣子装置中,所述供电模块采用的是超级电容。
在上述黑匣子装置中,所述PSoC芯片通过电源监控接口对嵌入式系统的处理器的电源进行监控,并将电源异常信息保存在所述SRAM内存中供嵌入式系统的CPU读取。
在上述黑匣子装置中,还包括温度检测芯片,用于检测嵌入式系统的环境温度并发送给PSoC芯片,所述PSoC芯片将环境温度异常信息保存在所述SRAM内存中供嵌入式系统的CPU读取。
在上述黑匣子装置中,子软件运行状态监控模块通过检测各个子软件模块的心跳包监控子软件的运行状态,当发生复位或子软件异常中断时,CPLD向PSoC芯片发出中断,嵌入式系统的CPU通过I2C总线向PSoC芯片发送复位或子软件异常中断信息,PSoC芯片读取I2C总线上传输的复位或子软件异常中断信息,并保存在所述SRAM内存中。
在上述黑匣子装置中,所述PSoC芯片采用轮询方式获取嵌入式系统的CPU发送至黑匣子的指令以及I2C从设备的工作状态。
本发明还提供了一种上述黑匣子装置的实现方法,包括以下步骤:
嵌入式系统实时监控各子软件的运行状态;
利用嵌入式系统的目标板上的CPLD,在嵌入式系统复位或子软件异常中断时产生中断;
实时将各子软件的运行状态和复位信息保存在黑匣子中的SRAM内存中;
黑匣子中的PSoC芯片与CPLD和嵌入式系统的CPU进行交互,在嵌入式系统复位或死机时,从所述SRAM内存中读取保存的全部信息并保存在黑匣子中的非易失性存储器中,同时标记最后一次记录的位置,以及根据指令从所述非易失性存储器中输出相关信息。
在上述黑匣子装置的实现方法中,当发生复位或子软件异常中断时,CPLD向PSoC芯片发出中断,嵌入式系统的CPU通过I2C总线向PSoC芯片发送复位或子软件异常中断信息,PSoC芯片读取I2C总线上传输的复位或子软件异常中断信息,并保存在所述SRAM内存中。
在上述黑匣子装置的实现方法中,所述PSoC芯片采用轮询方式获取嵌入式系统的CPU发送至黑匣子的指令以及I2C从设备的工作状态。
在上述黑匣子装置的实现方法中,嵌入式系统的各个子软件在运行时,定时产生心跳包发送给子软件运行状态监控模块,当子软件运行状态监控模块在一定时间内没有收到子软件的心跳包时,写CPLD寄存器并产生中断给PSoC芯片。
本发明,采用独立工作模块,使用时可以起到黑匣子记录和监控功能,可以监控时间、环境温度、CPU温度、电源状态、复位原因、CPU心跳等异常信息,可通过I2C总线对黑匣子进行管理、异常信息查询以及时钟同步,成本低,体积小,操作方便。所有嵌入式系统在设计时都可以把此模块预留进去,模块可用可不用都行,用的时候成本增加很小,不用则对成本基本没影响,非常方便排查嵌入式系统异常产生的原因,在研发阶段可以帮助研发人员了解系统故障原因,给研发人员提供快捷的调试手段。在工程实施过程中可以快速定位故障原因,为恢复现场争取宝贵时间。
具体实施方式
本发明提供了一种嵌入式系统的黑匣子装置及其实现方法,可以在嵌入式系统产生异常中断或复位重新启动后,实现黑匣子一样的记录和监控功能,对于排查嵌入式系统异常中断或复位产生的原因非常实用和方便。下面结合说明书附图和具体实施方式对本发明做出详细的说明。
如图1所示,本发明提供的嵌入式系统的黑匣子装置,由设置在嵌入式系统目标板10上的异常中断产生模块和与异常中断产生模块进行交互的黑匣子20组成。其中,黑匣子20是本发明的主要组成部分,利用黑匣子20记录嵌入式系统产生异常或复位的原因,并可通过黑匣子20输出这些异常或得位信息,方便调试人员查询并排查故障原因,使调试人员可以在快速地分析嵌入式系统异常或复位产生的原因的基础上,快速地定位和解决嵌入式系统的故障,快速恢复嵌入式系统的正常工作,防止类似的故障再次和多次重复发生,提高嵌入式系统的调试效率和开发效率。
以下介绍实现本发明技术方案的几个优选的具体实施例。显然,以下所描述的具体实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
具体实施例1
再请参见图1,本发明中,嵌入式系统的目标板10上设有CPU(微处理器)11、CPLD(Complex Programmable Logic Device、复杂可编程逻辑器件)12和电源13三部分。
其中,目标板上的CPLD实现了异常中断产生模块的功能,在嵌入式系统掉电、复位或各子软件异常中断时,产生中断给黑匣子20,之后黑匣子20利用GPIO(General PurposeInput Output,通用输入/输出)接口以及IRQ中断,获取并保存嵌入式系统掉电、复位或各子软件异常中断等异常信息,并在嵌入式系统掉电或复位重启时,将这样异常信息保存在非易失性存储器中。由于这些异常信息保存在黑匣子20上的非易失性存储器,因此可以供排查人员随时查询,快速分析复位或异常中断产生的原因。
黑匣子20主要包括PSoC芯片21、温度检测芯片22、供电模块23、SRAM内存24和非易失性存储器25四个部分。
供电模块23采用的是超级电容,用于在嵌入式系统掉电时为黑匣子供电,保证将黑匣子20获取到的异常信息保存在FLASH芯片里,从而实现真正意义上的黑匣子功能。
SRAM内存24用于实时保存各子软件的运行状态和嵌入式系统复位信息等所有的异常信息。
非易失性存储器25选用FLASH,是一种掉电不易失数据的存储介质,可以记录长期历史记录。在嵌入式系统掉电、复位或死机时,SRAM内存中保存的全部信息将保存在非易失性存储器中。
PSoC(Programmable System-On-Chip,片上可编程系统)芯片21是一种可编程的片上系统,其集成了微控制器以及嵌入式系统中通常围绕微控制器周围的模拟及数字组件。其最大特点是集成度高,设计灵活,功耗低、成本低,可以看成是MCU、FPGA/CPLD(可编程数字模块)以及ispPAC(可编程模拟模块)的集合。除了具备一般单片机的资源外,还有可编程时钟,低电压检测,升压泵,内部精密参考电压等等资源,具有处理数字和模拟两种信号的能力以及A/D、D/A两种信号的接口。
PSoC芯片21可以读取并通过SRAM内存24和非易失性存储器25记录保存嵌入式系统的以下信息:
(1)通过GPIO/IRQ读取嵌入式系统的复位信息和嵌入式系统上运行的各子软件的异常中断信息,并实时保存在SRAM内存24中,在嵌入式系统掉电或复位重启时,从SRAM内存中读取这些信息并保存在非易失性存储器中,同时标记最后一次记录的位置,供操作人员排查嵌入式系统的异常产生的原因。
(2)通过电源监控接口对嵌入式系统的处理器的电源进行监控,并将异常数据实时保存在SRAM内存24中。
(3)通过I2C总线获取CPU复位的原因和类型,并实时保存在SRAM内存24中。
(4)通过I/O接口,获取环境温度以及CPU温度等信息,并实时保存在SRAM内存24中。
超级电容用于实现在黑匣子掉电时为黑匣子20供电,
PSoC芯片与目标板的CPLD和嵌入式系统的CPU交互使用I2C协议,传输速率高,可以记录和读取的信息包括:时间、环境温度、CPU温度、电源状态、复位原因、CPU心跳等。
具体实施例2
由于黑匣子20本身不具备监控单盘软件模块状态的能力,本发明在嵌入式系统上开发了linux软件模块来实现该功能。
linux软件模块包括子软件运行状态监控模块和数据读取模块,如图2所示。子软件运行状态监控模块检测本单盘上的软件工作状态,数据读取模块从PSoC读取所记录的异常信息和子软件模块异常中断信息,再通过接口直接显示或者显示在外接设备上,供故障排查人员查询。
对于子软件运行状态的监控采用如下方式,各个子软件在运行时,定时产生心跳包发送给子软件运行状态监控模块,当子软件运行状态监控模块在一定时间内没有收到子软件的心跳包时,子软件运行状态监控模块写CPLD寄存器并产生中断给PSoC,通过CPLD寄存器状态变化说明子软件无心跳,即该子软件出现了异常死机现象。PSoC收到中断信息后,可以通过读取CPLD寄存器来获知子软件的当前运行状态,例如子软件工作正常或者是出现了异常死机现象。
同时,当嵌入式系统的CPU产生异常时,CPU也会产生中断给PSoC。PSoC收到中断信息后通过I2C总线获取CPU异常复位的类型。
通过写CPLD寄存器的方式,实现子软件模块异常中断的监控,可以快速地反映出子软件的运行状态,效率非常高。
本发明中,嵌入式系统与黑匣子之间的数据交互包括两个方面,一是嵌入式系统向黑匣子发送数据,一是从黑匣子读取数据,供故障排查人员查询。数据和命令交互的具体格式如下:
(1)、目标板向黑匣子发送数据获取命令的格式:
其中,从机地址即为目标板的地址。
(2)目标板从黑匣子读取控制命令的格式:
同样的,从机地址即为目标板的地址。
(3)目标板向黑匣子发送数据信息格式如下:
从机地址即为目标板地址。
(4)目标板从黑匣子读取写数据确认的格式:
从机地址即为目标板地址。
以上详细介绍说明了本发明提供的嵌入式系统的黑匣子装置的组成及工作原理,在此基础上,为了更清楚地说明本发明的实现方法及实施过程,下面再详细介绍本发明提供的嵌入式系统的黑匣子装置的实现方法。
本发明提供的嵌入式系统的黑匣子装置的实现方法,包括以下步骤:
嵌入式系统实时监控系统运行状态,包括各子软件的运行状态以及CPU、电源等异常情况;
利用嵌入式系统的目标板上的CPLD,在嵌入式系统复位或子软件异常中断时产生中断信号;
实时将各子软件的运行状态和复位信息保存在黑匣子中的SRAM内存中;
黑匣子中的PSoC芯片与CPLD和嵌入式系统的CPU进行交互,在嵌入式系统复位或死机时,从所述SRAM内存中读取保存的全部信息并保存在黑匣子中的非易失性存储器中,同时标记最后一次记录的位置,以及根据指令从非易失性存储器中输出相关信息,可以通过多种方式显示和输出,以供调试人员排查故障产生的原因。
其中,PSoC芯片的工作流程由main循环和中断两部分构成。在完成实时性要求不高的功能时,主要由main循环来完成。而中断主要是为了响应实时性要求特别高的功能。主要工作流程如下:
(1)黑匣子上电后初始化PSoC相应硬件功能模块,包括UART,EEPROM/FLASH,WDT,I2C-SLAVE,I2C-MASTER,LPCOMP等。
(2)黑匣子开机自检,扫描I2C总线上能探测到的所有设备,并相应地记录在非易失性存储器中,判断所有的I2C设备是否都处于正常工作状态下。
(3)异常数据信息在FLASH中以记录的时间段、异常条目序号和异常数值三维形式保存,例如,以电源电压异常为例:
记录的时间段表示记录异常的时间段,如参数为1表示开机开始的第一个10分钟,参数为2表示下一个10分钟;
异常条目序号表示为该时间段内的第几条异常,如3表示第3条异常
异常数值表示异常的具体数值。
这种三维形式保存,可以快速排查定位到异常信息,计算工作量小,效率高。
如果PSoC是烧入程序后初次上电,则会在上电开始时在FLASH中构建4个3维数组,分别用以记录可能发生的四种异常信息,包括电源电压异常、处理器温度异常、子软件异常中断和异常复位,并且在FLASH中标记并记录最后一次FLASH记录的位置,通过该标记可以确定最近一次产生的异常情况。如果PSoC黑匣子并非烧入程序后初次上电,则FLASH中已经存在了4个数组和相应的记录数据,只需读取最新FLASH中的位置标记即可确定最近一次产生的异常情况。
(4)main循环主要完成两件事情:一是轮询从CPU侧发送至黑匣子的指令,这些指令包括了CPU向PSoC黑匣子请求的各项数据,如:单条异常记录,当前所有异常条目,历史所有异常条目,当前PSoC时间,PSoC黑匣子程序的编译时间和版本等。二是PSoC黑匣子轮询I2C从设备,包括:电压信息,温度信息,并判断其电压值和温度值是否异常。
(5)输入至PSoC的中断:异常复位和子软件异常中断发生的持续时间非常短暂,如果PSoC黑匣子采用轮询的方式探测该异常,可能存在的问题是当轮询至该功能模块时,复位异常和子软件中断已经过期,PSoC可能会漏掉记录该条异常。因此,必须采用实时性高的中断方式,即:当异常复位或子软件异常中断时,嵌入式系统的CPU通过I2C总线向PSoC芯片发送异常信息,同时,CPLD向PSoC芯片发出中断,收到中断后PSoC芯片立即读取I2C总线传输的异常信息,并将其保存在SRAM内存中。
(6)由PSoC输出的中断:PSoC负责检测和记录电压异常和温度异常,当电压或温度超过预设阈值的时刻,PSoC当即向CPU发出中断信息,通知CPU立即读取该异常。
(7)反复执行这个main循环过程,直至掉电。掉电的一刹那,PSoC迅速的监测到掉电信息,并立即将异常信息和当前的记录标记写入FLASH,从而确保了PSoC记录的异常信息完整的保存下来,以供后续处理。
本发明中的一些主要命令及反馈格式如下:
本发明提供的装置和实现,可以像黑匣子一样记录嵌入式系统出现的异常。在研发阶段可以帮助研发人员了解系统故障原因,给研发人员提供快捷的调试手段。在工程上可以快速定位故障原因,为恢复现场争取宝贵时间。
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下做出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。