本发明涉及一种嵌入式系统外部易失性存储器高可靠性存储与诊断方法,属于工业过程控制领域。
背景技术:
在工业过程控制领域,嵌入式系统应用比较普遍,由于工业环境的越来也复杂,各种干扰因素也越来越多,以及随着芯片技术的不断发展,嵌入式系统主频不断增加,在嵌入式系统中,外部存储器产生的故障率也越来越多。
为了确保嵌入式系统应可靠地运行,需对嵌入式系统进行诊断,外部易失性存储器作为嵌入式系统的重要组成部分,对它的诊断不可缺少,找到一种安全可靠和实用的存储和诊断方法,是嵌入式系统研究与开发的一个重要问题。
外部易失性存储器诊断方法大多数是基于MCU利用诊断程序定时的对外部存储器诊断的方法,当需要对存储器某一块地址区域诊断时,都会先将这块区域的数据拷贝到某一空闲区域,然后才能对这块区域进行诊断,诊断程序运行空间在MCU的片内存储器,由于内部存储器存储空间较小,大量的用户程序没办法运行,只能等诊断程序运行完成才能在外部存储器运行用户程序,所以传统的方法,诊断程序占用MCU时间较多,MCU的利用率较低;另外,有一些方法为了提高MCU的利用率,诊断程序也在外部存储器中运行,这样涉及到数据区的拷贝和数据恢复,以及比较棘手的程序运行空间的动态分配,由于涉及到程序运行空间的动态分配,所以程序设计比较复杂,MCU的效率提高有限。
技术实现要素:
针对现有技术中存在的上述不足之处,本发明要解决的技术问题是提供一种嵌入式系统外部易失性存储器的存储与诊断方法,主要用于嵌入式系统外部易失性存储器的存储与诊断。
本发明为实现上述目的所采用的技术方案是:一种嵌入式系统外部易失性 存储器高可靠性存储与诊断方法,用于嵌入式控制器在运行的过程中对外部易失性存储器进行数据存储和数据诊断,包括以下步骤:
将RAM平均划分为两个区域:诊断区域和备份区域;
MCU将诊断区域和备份区域分别进行2n等分区,n为大于2的自然数;
MCU按次序对诊断区域分别进行诊断:MCU对某一诊断区域进行诊断时,首先将诊断区域的数据拷贝到备份区域,然后再对诊断区域进行数据诊断,诊断区域中某一区域进行数据诊断时,通过控制电路使程序运行于除此区域以外的诊断区域和相对应的数据备份区域中,诊断完成后将备份区域的数据拷贝回诊断区域。
所述将RAM平均划分为两个区域:诊断区域和备份区域,具体为:RAM按地址线Amax=0和Amax=1平均分为诊断区域和数据备份区域。
所述MCU将诊断区域和备份区域分别进行2n等分区,具体为:对诊断区域和数据备份区域按地址线Amax-n-Amax-1分别进行2n等分区,诊断区域和备份区域中相应序号的部分相互对应。
所述MCU具备EBI总线,对应EBI0与EBI1的设备分别对应于不同的系统地址,EBI0与EBI1的片选相与后接到外部存储器,从而实现用不同的系统地址对同一个RAM进行访问。
所述MCU在正常运行时将程序分为3个部分:数据拷贝程序、数据诊断程序和用户应用程序,分别对应于不同线程;数据拷贝程序根据不同的系统EBI地址将某一诊断区域的数据拷贝到序号相应的备份区域中,且数据拷贝程序优先级最高,在拷贝的过程中不允许其他线程打断;数据诊断程序通过传统的RAM测试方法对某一诊断区域进行诊断,且数据诊断程序优先级比较低,可以在MCU空闲时对诊断区域进行数据诊断;用户应用程序用于实现嵌入式系统的功能需求;
当某一诊断区域进行数据诊断时,数据诊断程序和用户应用程序运行在除该诊断区域以外的诊断区域和与该诊断区域相对应的备份区域中。
所述控制电路根据I/O[1:n+1]、Add[max-n:max-1]和EBI0控制Amax输出状态;当Amax=0时,MCU访问诊断区域,当Amax=1时,MCU访问备份区域。
本发明是用来实现一种嵌入式系统外部易失性存储器高可靠性存储与诊断方法,为嵌入式系统运行提供了保证。它具有如下优点:
1.效率高、实时性好,对主控制器依赖性小。本发明应用硬件电路实现诊断区域和备份区域的切换,响应快,实时性好,对主控制器的依赖性小,诊断程序运行在系统空闲时间,可以把主控制器从繁重的存储器的诊断程序中解放出来,和传统的诊断方法相比,效率较高。
2.程序设计简单。本发明应用硬件电路和软件配合的方式,能够方便实现程序运行空间的切换,不需要动态更改程序的运行空间,程序设计简单,减少了程序运行空间动态变换产生的故障。
3.通用性强。对于嵌入式系统来说,外部易失性存储器是不可缺少的组成部分,本发明能实现实时性的存储和数据诊断,对外部易失性存储和MCU的参数没有特殊要求,通用性强。
附图说明
图1是本发明嵌入式系统外部易失性存储器存储与诊断功能图;
图2是本发明嵌入式系统MCU数据拷贝的功能图;
图3是本发明嵌入式系统MCU数据诊断的功能图;
图4是本发明嵌入式系统MCU用户程序运行的功能图;
图5是本发明嵌入式系统控制电路的电路图;
图6是本发明嵌入式系统外部易失性存储器存储与诊断的流程图。
具体实施方式
下面结合附图及实施例对本发明做进一步的详细说明。
本发明是基于嵌入式系统外部易失性存储器存储与诊断进行的,如图1所示,MCU将诊断区域和备份区域分别进行8分区,MCU按次序对诊断区域分别进行诊断;当MCU对某一数据区域诊断时,先将诊断区域数据拷贝到备份区 域,然后再对诊断区域进行数据诊断,诊断完成后将备份区域数据拷贝回诊断区域。
MCU在正常运行时将程序主要分为3个部分:数据拷贝程序、数据诊断程序和用户应用程序,分别对应于不同线程;数据拷贝程序根据不同的系统EBI地址将某一诊断区域数据拷贝到相应备份区域中,且数据拷贝程序优先级最高,在拷贝的过程中不允许其他线程打断;数据诊断程序通过传统的RAM测试方法对某一诊断区域进行诊断,且数据诊断程序优先级比较低,可以在MCU空闲时对诊断区域进行数据诊断;用户应用程序实现嵌入式系统的功能需求;
MCU的程序运行空间在外部易失性存储器中,当某一数据区域进行数据诊断时,数据诊断程序和用户应用程序运行空间在除此区域以外的诊断区域和相对应的备份区域中。
图2是嵌入式系统MCU数据拷贝的功能图,数据拷贝程序的优先级最高,在数据拷贝的过程中挂起其他线程,不允许系统做其他工作,防止数据拷贝没有完成,而程序运行更改了诊断区域的数据值;数据的拷贝在EBI0对应的设备地址中进行,程序设计功能比较简单,就是将诊断区域的数据按地址增加的顺序逐个拷贝到备份区域。
图3为嵌入式系统MCU数据诊断的功能图。数据诊断的工作量比较大,为了不占用大量的系统有效时间,因为,将数据诊断的程序的优先级设置成最低,也就是说,系统在空闲时间进行数据区域的诊断;数据诊断在EBI1对应的设备地址中进行,诊断方法可以用一些传统的RAM测试方法,可以选择Walk-path、Parity-bit、Abraham等方法,具体方法在IEC61508-2-A.6中有具体介绍。
图4为MCU用户程序运行的功能图。用户程序运行的过程中,且数据诊断程序还没有运行完,MCU配合控制电路使MCU的运行空间为(程序运行区域1+程序运行区域2+程序运行区域3),也就是说,诊断区域诊断没有完成,程序不能在此空间运行,因此,将备份区域空间补充到诊断区域空间,使系统默认 为一个连续的空间,从而不需要动态分配程序运行空间,程序设计简单。
图5是嵌入式系统存储控制电路的电路图,其功能就是用户程序运行的过程中,且诊断程序还没有运行完,程序不能在诊断空间运行,控制电路配合MCU将备份区域空间补充到诊断区域空间,使系统默认为一个连续的空间,就是图4所说的程序运行空间变为(程序运行区域1+程序运行区域2+程序运行区域3)。
当诊断没结束用户程序运行时具体工作流程为:在诊断程序开始运行时,通过I/0管脚(I/01、I/02、I/03)输出和地址线(A14、A15、A16)相同的电平,I/04为高电平;当程序运行时要访问诊断区域时,经过U2、U3、U4同或门后,均为高电平,EBI0片选经过非门后也是高电平,经过U5相与后电平仍然是高电平,A17为低,经过或门U6变为高电平,这样MCU访问的是诊断区域的空间,但经过控制电路将区域指到了备份区域,使系统默认为一个连续的空间;当访问其他区域时,I/0管脚(I/01、I/02、I/03)输出和地址线(A14、A15、A16)电平有一组或多组不同,I/04为高电平,经过U2、U3、U4同或门后,再经过U5相与后电平会为低电平,A17为低,经过或门U6仍然为低电平,不影响其他区域的访问。
当诊断已经结束用户程序运行时具体工作流程为:I/04为低电平,当程序运行时要访问诊断区域时,经过U2、U3、U4同或门后,均为低电平,EBI0片选经过非门后也是高电平,经过U5相与后电平仍然是低电平,经过或门后不影响A17的状态,因此不影响在外部存储器的访问。
图6是嵌入式系统外部易失性存储器存储与诊断的流程图,首先要确定数据诊断区域,并将诊断区域的数据拷贝到数据备份区域,此时拷贝程序的优先级是比较高的,直到拷贝结束才能进行其他程序的操作,判断是不是运行用户程序,当用户程序运行时不进行数据诊断,当系统空闲,用户程序完成时进行数据诊断,数据诊断完成后将备份数据拷贝回数据区,这样完成了一个区域块的诊断,同样可以对其他区域块进行诊断。