背景技术
FLASH存储器又称闪存,是一种可以在线多次擦除的非易失性存储器,即掉电后数据不会丢失,是一种嵌入式系统中典型的存储设备,在嵌入式系统中FLASH一般用于存储系统工作的代码和数据。
并行FLASH是FLASH存储器的一种,又称为NOR FLASH,由于并行FLASH支持代码片上执行,应用程序和启动代码可以直接在FLASH上运行,因此嵌入式系统中一般用于存储系统的启动代码。
并行FLASH器件一般包含地址信号线、数据信号线和读写控制线,CPU处理器通过以上三种信号线读或写FLASH内容。
图1为并行FLASH的管脚示意图,如图所示,例中并行FLASH的管脚分别代表是:
RESET为芯片的复位管脚;
CE为芯片的片选信号线;
WE为芯片的写控制线;
OE为芯片的读控制线;
VCC为芯片的电源输入管脚;
VSS为芯片的接地管脚;
BYTE为芯片的工作方式选择管脚,BYTE接高电平时芯片工作在16位工作模式,BYTE接地时芯片工作在8位工作模式;
WP/ACC芯片的写保护管脚,WP接低电平时芯片不允许被修改;
DQ0-DQ7芯片工作在8位模式下的数据信号线;
DQ8-DQ15芯片工作在16位模式下的数据信号线;
A0、A1、A2到A20为芯片工作在16位工作模式下的地址线;
A-1、A0、A1到A20为芯片工作在8位工作模式下的地址线。
其中:
地址线:用来传输地址信息的信号线,如图1中的A0、A1等。
数据线:用来传输数据信息的信号线,如图1中的DQ0-DQ7。
控制信号线:用来传输控制信息的信号线,比如读写选择等信息。
图2为读写系统中FLASH连接方式结构示意图,如图所示,读写系统中的管理系统200和FLASH201通过地址线、读信号线、写信号线、片选信号线连接在一起。其中:
管理系统200完成整个系统的控制,包括发起对FLASH201的读写操作;
FLASH201用于存储系统工作中正常的代码和数据,接受管理系统发送的读写命令。
写信号线:用于当管理系统要对FLASH进行写操作时,将该信号线管脚置为低电平。
写保护管脚203直接连接到高电平,允许管理系统的写操作行为,高电平一般是3.3V的电压,写保护管脚即为图1中的WP管脚。
管理系统200通过串口204输出系统的工作状态。
传统的电子读写系统写FLASH的操作一般存在以下几种情况:
1、升级启动BOOT代码(相当于PC的BIOS);
2、升级主程序(相当于WINDOWS操作系统);
3、记录故障信息(相当于在使用PC出错时,PC记录错误日志);
4、用户设置信息(类似修改BIOS的参数)。
以上四种操作一般只在一定的条件被使用,什么时候调用这些操作理论上是已知的、确定的,但是,由于人为或其他一些客观的原因会导致这些操作被错误的调用,比如由于系统设计人员粗心大意,在某些不该写FLASH的时候调用写FLASH操作,也就是说现有技术中存在的不足在于:写操作也存在着在不该被调用的时候调用的异常情况,而当这些异常情况发生时就有可能导致的系统启动代码和主程序被破坏,进而将导致系统无法正常工作。
具体实施方式
下面结合附图对本发明的具体实施方式进行说明。
现有技术中,在对FLASH进行写操作时,当发生写操作在不该被调用的时候却被调用了的异常情况后,由于FLASH的写保护管脚直接接高电平,而FLASH是一种非智能器件,因此,不管管理系统发起的写操作是否合法,只要管理系统发起写操作,FLASH就允许改写;另外一方面,由于没有用于检测写FLASH操作的检测电路存在,即使管理系统发起错误的写操作也无法被发现和恢复。这也就导致了如果出现错误的写操作,并将会导致FLASH内部的内容被破坏,进而导致系统无法正常工作。
进一步的,由于系统中并不能对错误进行检测,当发生错误后,软件编码人员也无法确认到底是代码逻辑哪里出现了问题。
基于以上分析,本发明结合CPU的中断处理机制,对FLASH的写操作处理进行了改进,使其受到更充分的保护。下面先对中断机制进行简要介绍。
中断机制是CPU处理外部突发事件的一个重要技术。它能使CPU在运行过程中对外部事件发出的中断请求进行及时的处理,在对中断请求进行处理时,CPU中断正在执行的程序转去处理发出中断请求的任务,处理完成后又立即返回断点,继续进行CPU原来的工作。引起中断的原因或者说发出中断请求的来源称为中断源,根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断两类。
图3为中断处理装置结构示意图,如图所示,处理装置中包括CPU300、中断产生电路301、状态暂存器302,下面结合图1对中断进行说明。
外部中断一般为处理器的中断管脚直接传递给CPU。如图3的INT0~4中断即为外部中断来源,在系统的正常运行过程中,状态暂存器302收到如INTO中断管脚发生电平变化后,状态暂存器302触发中断产生电路301产生中断通知CPU300中断目前的软件处理,转而进入INT0的中断处理。
内部中断由CPU内部处理模块在一定的情况下产生的中断,内部中断优先级一般低于外部中断。如图1所示的UART及TIMER收发中断,在系统的正常运行过程中,状态暂存器302收到如从UART发送过来的数据,状态暂存器302触发中断产生电路301产生中断通知CPU300,CPU300中断目前的软件处理,转而进入UART的中断处理。
结合中断机制,本发明通过在电路中添加检测判断机制,当对FLASH进行写操作时,发起中断,通知CPU进行中断处理,中断处理用于判断当前写操作是否合法。
基于上述分析,下面对如何具体实施进行说明。
图4为对FLASH的写操作处理方法实施流程示意图,为更清楚的描述本发明实施,处理中断的CPU中视为包含有管理系统,该管理系统会对执行的合法操作进行记录,则如图所示,处理时可以包括如下步骤:
步骤401、将FLASH中将要被改写的数据进行备份。
步骤402、对FLASH进行写操作。
步骤403、FLASH写操作完成。
本步骤中,获知对FLASH写操作完成,可以用如下方式来获知写操作完成,如在写操作完成后,管理系统发出写操作完成指令触发发起中断请求;也可以通过检测FLASH硬件上的写操作动作结束来获知,还可以通过写操作的磁盘日志记录来获知,获知写操作完成是本领域技术人员易知的。本实施例中提供了一种简便的获知方式,当在采样到FLASH写信号与FLASH片选信号线为低时,即可获知写操作完成。
步骤404、发起中断请求。
本步骤中,可以在接收到写操作指令,在对FLASH写操作完成后,接收到写操作完成指令后发起中断请求;
或,虽然没有接收到写操作指令,但当采样到FLASH写信号与FLASH片选信号线为低电平时发起中断请求;
或,在接收到写操作指令后,但是在设定时间阈值内没有接收到写操作完成指令时,也发送中断请求。
步骤405、接到中断请求,进入中断处理。
步骤406、对写操作进行合法性判断,在确定写操作合法时转入步骤407,否则转入步骤408,本步骤中可以根据管理系统的写操作记录进行合法性判断。
步骤407、退出中断处理。
步骤408、在确定写操作非法时,根据备份数据恢复被改写的数据。
步骤409、定位写操作错误发生原因。
步骤410、将错误原因输出。
从上述实施可以看出,本发明在确定写操作是非法的时候,将会根据在写操作时备份的数据进行恢复,从而克服了现有技术中一旦发起错误的写操作后无法被发现和恢复的不足,提高了对FLASH的写操作的安全性。
进一步的,实施中在进行处理时还可以包括如下步骤:
在接收对FLASH进行写操作的指令时,关闭对FLASH的写保护后,执行写操作;
在对FLASH写操作完成,接收到写操作完成指令时;或,在没有接收到写操作指令时,当采样到FLASH写信号与FLASH片选信号线为低电平时;或,接收到写操作指令后,在设定时间阈值内没有接收到写操作完成指令时,打开对FLASH的写保护。
实施中,不仅可以通过主动的检测写操作是否完成来决定是否打开对FLASH的写保护,还可以通过接收到的写操作完成的指令触发打开对FLASH的写保护,该写操作完成的指令具体的可以由CPU管理系统在写操作完成后发出,还可以在进入中断处理后,判断出写操作非法后发出该指令用以打开被非法写操作指令关闭的写保护。
对FLASH进行写保护具体可以通过将FLASH写保护管脚置于低电平后,实现打开对FLASH的写保护。打开对FLASH的写保护目的在于,打开后就不能再对FLASH进行写操作了。
上述写保护目的主要是通过控制FLASH的写保护管脚,达到在平时工作的时候不允许非法的写操作,克服了由于FLASH的写保护管脚平时一直处于打开状态,导致系统被错误改写的概率增加的不足,从而降低了FLASH被改写的概率,减轻了管理系统的负荷。
上述实施例中,可以针对的存在情况主要有:升级启动BOOT代码、升级主程序、记录故障信息、用户设置信息,下面对实施中这四种情况的处理来对本发明进行说明,但易知,通过本发明的方法,即:当检测到错误后,对错误操作进行恢复,可见本发明可以解决的问题并不仅限于只在这四种情况。下面对四种情况进行说明如下:
如果在步骤401中发现当前的写操作是对BOOT的代码进行修改,则在步骤406中的合法性判断即为判断当前的任务是否为允许升级BOOT的任务,如果是即为合法,则允许升级BOOT,退出中断处理;否则为非法,执行步骤408中恢复被修改的代码;
如果在步骤401中的写操作中,当前操作FLASH的地址是否为针对主程序的存储空间进行修改,如果是,则在步骤406中的合法性判断即为判断当前调用写操作的任务是否是约定好允许修改主程序的任务,如果是即为合法,则不处理,退出中断处理;否则为非法,执行步骤408中恢复被修改的代码;
同样,故障信息记录、用户配置也可以通过类似的方法进行检测。
更进一步的,当发现写操作错误的时候,在步骤409中可以由系统产生外部中断信号触发管理系统的调试代码,用于帮助软件人员找出错误的软件逻辑避免后续的错误操作,减低系统FLASH被改写的隐患。
本发明还提供了一种FLASH的写操作处理系统、FLASH写操作处理装置以及CPU管理系统,下面结合附图对其具体实施方式进行说明。
图5为FLASH的写操作处理系统结构示意图,如图所示,本系统用于对FLASH201进行写操作处理,系统中包括管理系统200、备份模块501、请求模块502、判断模块503、恢复模块504、定位模块505、输出模块506、写保护模块507,下面以本系统对FLASH201的具体实施为例进行说明。
备份模块501与FLASH201相连,用于在对FLASH进行写操作时,对FLASH20 1中将要被改写的数据进行备份;
请求模块502与判断模块503、FLASH201相连,用于在对FLASH201写操作完成后,向判断模块503发起中断请求;
判断模块503与管理系统200相连,用于在接到中断请求后进入中断处理,根据管理系统的写操作记录对所述写操作进行合法性判断,在确定所述写操作合法时,退出中断处理,在确定所述写操作非法时,触发恢复模块504;
恢复模块504与判断模块503、备份模块501相连,用于根据备份模块501的备份数据恢复被改写的数据。
在请求模块502中可以包括检测单元以及请求单元,其中:
检测单元在对FLASH写操作完成,接收到写操作完成指令后;或,在没有接收到写操作指令时,当采样到FLASH写信号与FLASH片选信号线为低电平时;或,接收到写操作指令后,在设定时间阈值内没有接收到写操作完成指令时,触发请求单元;
请求单元在被检测单元触发后向判断模块发起中断请求。
从上述实施可以看出,在判断模块确定写操作是非法的时候,将会触发恢复模块根据备份模块在写操作时备份的数据进行恢复,从而克服了现有技术中一旦发起错误的写操作后无法被发现和恢复的不足,提高了对FLASH的写操作的安全性。
系统中还可以进一步包括与判断模块503相连的定位模块505,用于在确定所述写操作非法时,根据判断模块的判断结果定位所述写操作错误发生原因。
系统中还可以进一步包括输出模块506与定位模块505相连,用于将定位模块定位出的写操作发生原因输出。具体的可以通过在管理系统所处的CPU管理系统上的串口204进行输出。
可以看出,由系统产生外部中断信号后,触发定位模块的调试代码,可以用于帮助软件人员找出错误的软件逻辑避免后续的错误操作,减低系统FLASH被改写的隐患。
系统中进一步还可以包括与FLASH201相连写保护模块507,用于根据对FLASH的写操作指令,对FLASH进行写保护。
具体的,写保护模块中可以包括:
写操作指令接收单元,用于在接收到对FLASH进行写操作的指令后,触发置位单元;
置位单元,用于在被所述写操作指令接收单元触发后,关闭对FLASH的写保护,在对FLASH写操作完成,接收到写操作完成指令时;或,在没有接收到写操作指令时,当采样到FLASH写信号与FLASH片选信号线为低电平时;或,接收到写操作指令后,在设定时间阈值内没有接收到写操作完成指令时,打开对FLASH的写保护。
置位单元可以与FLASH201的写保护管脚相连,在关闭对FLASH的写保护时将写保护管脚置于低电平,在打开对FLASH的写保护时将写保护管脚置于高电平。
可以看出,通过写保护模块控制FLASH的写保护管脚,达到了在平时工作的时候不允许非法的写操作,克服了由于FLASH的写保护管脚平时一直处于打开状态,导致系统被错误改写的概率增加的不足,从而降低了FLASH被改写的概率,减轻了管理系统的负荷。
图6为FLASH写操作处理装置结构示意图,如图所示,装置中包括请求模块502、写保护模块507,其中:
请求模块502用于在对FLASH写操作完成后,发起对所述写操作进行合法性判断的中断请求。
装置中请求模块可以包括:
检测单元5021,用于在对FLASH写操作完成,接收到写操作完成指令后;或,在没有接收到写操作指令时,当采样到FLASH写信号与FLASH片选信号线为低电平时;或,接收到写操作指令后,在设定时间阈值内没有接收到写操作完成指令时,触发请求单元;
请求单元5022,用于在被所述检测单元触发后向管理系统发起中断请求;所述中断请求用于触发管理系统对所述写操作进行合法性判断。
装置中还可以进一步包括写保护模块507,用于根据对FLASH的写操作状态,对FLASH进行写保护。
写保护模块中可以包括:
写操作指令接收单元5072,用于在接收对FLASH进行写操作的指令进入写操作状态时,触发置位单元;
置位单元5071,用于在被所述写操作指令接收单元触发后,关闭对FLASH的写保护,在对FLASH写操作完成,接收到写操作完成指令时;或,在没有接收到写操作指令时,当采样到FLASH写信号与FLASH片选信号线为低电平时;或,接收到写操作指令后,在设定时间阈值内没有接收到写操作完成指令时,打开对FLASH的写保护。
置位单元可以与FLASH的写保护管脚相连,在对FLASH进行写保护时将写保护管脚置于低电平,在打开写保护时将写保护管脚置于高电平来实现写保护。
图7为CPU管理系统结构示意图,如图所示,系统中可以包括:备份模块501、管理系统200、判断模块503、恢复模块504,其中:
备份模块501,用于在对FLASH进行写操作前,对FLASH中将要被改写的数据进行备份;
判断模块503在接到中断请求后进入中断处理,根据管理系统200的写操作记录对所述写操作进行合法性判断,在确定所述写操作合法时,退出中断处理,在确定所述写操作非法时,触发恢复模块504;
恢复模块504,与所述判断模块503、所述备份模块501相连,用于根据所述备份模块的备份数据恢复被改写的数据。
CPU管理系统中还可以进一步包括定位模块505,用于在确定所述写操作非法时,根据判断模块503的判断结果定位所述写操作错误发生原因。
CPU管理系统还可以进一步包括输出模块506,用于将定位模块505定位出的所述写操作错误发生原因输出。
下面再用实施例一来说明本发明的具体实施方式。
实施例一
本例中将以CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)的实施来进行说明,CPLD是一种可编程逻辑器件,它可以在制造完成后由用户根据自己的需要定义其逻辑功能,在电子系统中一般用于实现一些简单的用户定制逻辑。显然,使用CPLD就能够实现上述请求模块、写保护模块的功能,同时,实施中还使用了包括前述实施例中管理系统的CPU管理系统,由于CPU管理系统是一个软件操作系统,在该CPU管理系统中实现备份模块、接收模块、判断模块、定位模块、输出模块、恢复模块的功能,对本领域技术人员来说也是易知的。同时需要指出,实施时可以根据需要在CPU管理系统或CPLD或其他实体中实现不同的功能模块,并不仅限于本例中的实施方式,比如,备份模块、恢复模块不仅可以在CPU管理系统上实现,也可以用其他具备数据存储功能、数据读写功能的实体上实现。在利用了现行的CPLD进行实施本发明时,则可以按如下方式实施:
图8为实施例一的FLASH写操作处理系统结构示意图,如图所示,系统由CPLD801、FLASH201、CPU管理系统800、以及与CPU管理系统相连的串口204组成,其中:
CPU管理系统800通过总线发送读写命令用于控制CPLD801;
CPU管理系统800通过读信号线、写信号线、数据线、地址线等发送读写命令给FLASH201;
CPLD801通过INT(管理系统的外部中断信号线)用于通知CPU管理系统800及时的处理中断请求,即发生的写操作;
CPLD801通过一根管脚802控制FLASH201的写保护管脚203,在平时工作情况下,该管脚的电平输出低电平,不允许FLASH完成写操作,只有接收到CPU管理系统发送的写操作指令触发关闭写保护的时候才送出高电平,这个时候FLASH才会接受管理系统的写操作。
图9为实施例一中写操作处理系统的实施流程示意图,则如图所示,上述写操作处理系统的写操作流程可以如下:
步骤901、CPU管理系统通知CPLD打开写保护管脚允许写操作。
具体的,本步骤中可是通过对CPLD上的写保护模块发出写操作指令,从而使写保护模块关闭对FLASH的写保护,以便进行写操作。
步骤902、CPU管理系统备份被改写的FLASH内容到系统的内存。
具体实施中,并不仅限于备份至内存,容易知道所有的数据存储介质都可以实现。
步骤903、CPU管理系统发起写操作,FLASH接受写操作。
步骤904、CPU管理系统等待写操作完成。
步骤905、CPU管理系统通知CPLD关闭写保护管脚禁止非法的写操作。
在步骤904、905中,不仅可以通过CPU管理系统在写操作完成后发出写操作完成指令通知CPLD中的写保护模块关闭,还可以通过CPLD主动检测到异常写操作后关闭。
实施中,可能会出现发出错误的写操作指令,也因而没有步骤905中所述的正确地与之对应的写操作完成指令来使FLASH进入写保护,在此情况下,写保护模块可以通过主动检测到异常写操作后使FLASH进入写保护状态,也可以通过中断请求判断出该写操作为非法操作后,再发出写操作完成指令来使FLASH进入写保护状态。
步骤906、CPLD关闭写保护管脚禁止非法的写操作。
上述步骤904、905、906中,并不仅限于在步骤904中CPU管理系统在等待写操作完成后,向CPLD发出写操作完成指令的一种实施方式,也可以是CPLD虽然没有接收到写操作指令,但当采样到FLASH写信号与FLASH片选信号线为低电平时;或,接收到写操作指令,但在设定时间阈值内没有接收到写操作完成指令时,CPLD也主动关闭写保护管脚,其原因在于,写操作并不一定是由CPU管理系统通过写操作指令发起的,写操作有可能是在CPU管理系统不知情的情况下进行的,为更好的对FLASH进行写保护,CPLD也可在没有接收到写操作完成指令时关闭写保护管脚。
步骤907、CPLD产生中断信号(INT)通知CPU管理系统写操作完成。
本步骤的发出中断信号可以是:CPLD接收到写操作指令,在对FLASH写操作完成后,CPLD接收到写操作完成指令后发起中断请求;
或,在CPLD没有接收到写操作指令时,当CPLD采样到FLASH写信号与FLASH片选信号线为低电平时发起中断请求;
或,CPLD接收到写操作指令后,但在设定时间阈值内没有接收到写操作完成指令时,CPLD发送中断请求。
步骤908、CPU管理系统响应INT的外部中断,进入中断处理程序。
步骤909、CPU管理系统确认目前的写操作是否合法,如果合法则转入步骤910,否则转入步骤911。
步骤910、退出中断处理。
步骤911、CPU管理系统定位当前写操作可能的错误。
步骤912、CPU管理系统恢复被改写的FLASH内容。
步骤913、CPU管理系统通过串口输出提示信息,提示用户修改管理系统的软件代码。
本实施例中通过在电路中添加CPLD用于检测不正确的改写FLASH的行为。在每次写操作完成后管理系统都对写操作进行核对确认是否是被允许的写操作。如果发现错误的写FLASH操作,CPU管理系统负责恢复被改写的FLASH内容,从而避免老设计系统的FLASH由于被CPU管理系统错误修改而导致系统瘫痪,比如系统启动代码被错误的修改,系统的主程序被破坏。
实施中通过在CPU管理系统发起写操作的时候由CPLD产生外部中断信号触发CPU管理系统的调试代码,便可以帮助软件人员找出错误的软件逻辑以避免后续的错误操作,减低了系统FLASH被改写的隐患。
同时还通过控制FLASH的写保护管脚,达到在平时工作的时候不允许非法的写操作,进一步降低了FLASH被改写的概率,减轻管理系统的负荷。
由上述实施例可知,本发明中通过检测对FLASH的写操作,并且在出现错误的写操作后进行出错处理,提高了软件人员查出软件代码的错误逻辑的效率。进一步的可以通过控制WP管脚的高低电平,来达到允许和禁止写FLASH的操作,减低了FLASH被误写的概率。并且通过检测每次CPU管理系统发起的写FLASH的操作后,通知CPU管理系统确认当前的写操作是否合法,并将恢复被错误改写的FLASH内容,使得系统能够在出现写操作错误时进行恢复。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。