一种引导用只读存储器的写保护实现方法
技术领域
本发明涉及一种引导用只读存储器的写保护逻辑实现方法,属于半导体存储器芯片的应用技术领域。
技术背景
在一些电子设备中,单板上通常都安装起引导作用的单板引导用只读存储器。由于单板引导程序设计中难免存在考虑不周全因素,而且随时可能有新的需求,因此单板引导用只读存储器一般情况下都支持在线升级功能,此时引导用只读存储器必须在特定的时间允许被写入新的引导程序。但是在单板运行过程中,可能出现程序跑飞的情况。如果程序跑飞到相应的引导用只读存储器擦写函数,或者当程序跑飞后的写操作正好符合了引导用只读存储器的写操作时序,则引导用只读存储器就会被擦除或改写,从而损坏单板引导程序,由此而导致单板不能正常启动。解决引导用只读存储器被改写的基本方法就是对引导用只读存储器芯片进行写保护,当需要对引导用只读存储器进行写操作时,禁止保护功能,写操作完成以后再启动写保护功能。
在现有对引导用只读存储器进行写保护的方法中,大都采用硬件来实现。不同的引导用只读存储器芯片,实现数据保护的方法也不一样。有的引导用只读存储器芯片本身带有编程电压管脚VPP,这类器件在编程时要求在VPP引脚提供特定的编程电压,该电压不同于芯片的正常工作电压。引导用只读存储器的编程电压一般是在加载时由编程器提供,而在单板上不提供这个编程电压,这样就在单板正常工作时,在硬件上就可以保证引导用只读存储器器件不会被写入。有的芯片的VPP端,当输入电压大于某一阈值时,则器件允许被写入,若低于某一阈值,则器件将禁止写入。利用这一特性,可以在单板上将VPP信号实施单独的控制,仅当对引导用只读存储器芯片进行编程时再将其设置为高于电压阈值,电压阈值可一般在器件手册中提供。
另外,通过器件的部分控制线也能够实现数据保护。通过控制引脚实现的写保护实际上也就是防止软件对引导用只读存储器芯片的意外写入。引导用只读存储器芯片与写相关的控制引脚有WP#(写保护)以及WE#(写允许),有些器件还提供RP#(复位或掉电)管脚,不同的芯片可能提供的控制引脚不完全相同,例如SST39VF040芯片容量较小,一般用于单板引导用只读存储器,芯片只提供WE#而没有WP#和RP#引脚。如果器件有RP#管脚,需要确认在CPU复位结束之前,将引导用只读存储器芯片的RP#管脚由低电平置为高电平。如果引导用只读存储器芯片支持通过RP#进行数据保护,则建议将WP#设置为引导用只读存储器可写入状态,而通过控制RP#实现引导用只读存储器的数据保护;如果引导用只读存储器只存在WP#控制线,则可以控制WP#实现数据保护;如果不存在类似WP#的控制线,也不存在类似RP#的控制线,还可以通过控制WE#信号线实现数据保护。通常情况下对同一芯片实现多种保护方式是没有必要的。如果要通过控制WE#信号线实现数据保护,在设计中一般是将WE#拉死为高电平,但是在这种情况下引导用只读存储器就不能支持在线升级功能了。另外一些较大容量的闪存(Flash)具备扇区保护功能,这也是一种软件的保护方式。
上述引导用只读存储器的写保护方法主要是采用了芯片本身的VPP、WP#、RP#等管脚。利用这些管脚实现写保护的前提条件必须是芯片本身提供这些管脚。但是现在常用的引导用只读存储器芯片不一定提供这些引脚。另外如果将WE#拉为固定的高电平,则引导用只读存储器又不能支持在线升级功能。
如果WE#没有被拉为固定的高电平,要利用WE#实现对引导用只读存储器的写保护,则引导用只读存储器芯片的WE#管脚必须从逻辑中引出,但是WE#信号并不是必须从逻辑中引出的管脚。比较而言,引导用只读存储器芯片的片选信号CE#一般是由逻辑通过译码而来。尤其是某些单板在设计之初并没有考虑到支持写保护功能,但是它们的CE#却是通过逻辑器件引出的。
发明内容
本发明针对现有引导用只读存储器的写保护方法保护功能有限,且应用不够灵活的缺点,提出了一种引导用只读存储器的写保护逻辑实现方法,以加强引导用只读存储器的写保护功能,降低其被擦除或被改写的概率。
本发明提出的引导用只读存储器的写保护逻辑实现方法,包括以下步骤:
(1)设置写保护数据寄存器和写保护状态寄存器,并分别为上述两个寄存器分配地址;
(2)为上述两个寄存器各置一个初始值,将引导用只读存储器设置为“写保护使能”状态;
(3)连续向写保护数据寄存器写入数据,每写入一个数据,写保护状态寄存器的值发生变化一次,直到该值为一个特定值,此时将引导用只读存储器设置为“写保护禁止”状态;
(4)对引导用只读存储器的片选信号进行译码,使得引导用只读存储器的片选信号有效,此时对引导用只读存储器进行写操作;
(5)写操作结束后,向写保护数据寄存器写入数据,使引导用只读存储器重新处于“写保护使能”状态。
上述第(4)步中,用于对引导用只读存储器的片选信号进行译码的是写保护状态寄存器的最高位与芯片其它控制信号。
上述方法中的第三步,其过程如下:
(1)起始时,写保护状态寄存器处于“写保护使能”状态;
(2)在“写保护使能”状态,向写保护数据寄存器写入第一个设定数据,使写保护状态寄存器进入“中间态”状态,若为其它操作,则返回到“写保护使能”状态;
(3)在“中间态”,若向写保护数据寄存器写入第一个设定数据,则写保护状态寄存器维持当前状态,若向写保护数据寄存器写入第二个设定数据,使写保护状态寄存器进入“写保护禁止”状态,若为其它操作,则返回到“写保护使能”状态;
(4)在“写保护禁止”状态,若向写保护数据寄存器写入第三个设定数据,则写保护状态寄存器返回到“写保护使能”状态,否则对引导用只读存储器进行写操作以及其它任何操作。
本发明提出的引导用只读存储器的写保护逻辑实现方法,对于在设计初期没有实现引导用只读存储器写保护功能的单板,可以不用考虑该芯片是否提供与写保护相关的硬件引脚,只要引导用只读存储器芯片的CE#信号由逻辑译码得到,就可以通过更改逻辑,实现引导用只读存储器的写保护功能。如果该写保护方法与其它写保护方法同时使用,则能够极大地加强引导用只读存储器的写保护功能,降低引导用只读存储器被擦除或被改写的概率。本发明的方法可以应用到包括引导用只读存储器在内的所有闪存芯片(F1ash),对其中的引导用只读存储器芯片实现写保护功能。
附图说明
图1是本发明实现写保护逻辑的一个实施例的流程图。
具体实施方式
以下结合附图,对本发明提出的引导用只读存储器的写保护逻辑实现方法作详细介绍。
(1)设置寄存器
在逻辑中设置一个8位的写保护数据寄存器和一个3位的写保护状态寄存器。为两个寄存器分配各自的地址。有了地址以后,通过在逻辑中建立写进程,即可以实施对寄存器对读或写操作。
上述写保护状态寄存器用于表示引导用只读存储器的写保护状态,它一共有三种状态:“写保护使能”、“中间态”、“写保护禁止”。其中的“中间态”是写保护逻辑从“写保护使能”状态变化到“写保护禁止”状态所必须经过的中间状态,在这种状态时仍然不能向引导用只读存储器中写入数据。
写保护数据寄存器用于向其中写入数据,当向写保护数据寄存器中写入一定的数据时,写保护状态寄存器的状态就会发生相应的变化
上述写保护状态寄存器的位数是可以变的,可以根据需要设计为2位或其它。向写保护数据寄存器中连续写入的数据个数可以灵活设计,若增加数据个数,中间态也作相应增加,以增强写保护功能。向写保护数据寄存器中连续写入的值也可以灵活设计。
(2)为两个寄存器设置初始值
当单板上电或复位时,写保护逻辑进入“写保护使能”状态,此时将写保护数据寄存器置为全“1”,将写保护状态寄存器也置为全“1”;
(3)写保护禁止
如果要实施对引导用只读存储器的写操作,则必须首先使得写保护逻辑处于“禁止写保护”状态。此时,写保护逻辑需要经过“写保护使能”、“中间态”、“写保护禁止”三种状态。
本发明的一个实施例以两个“中间态”为例,如图1所示,此时,写保护逻辑需要经过“写保护使能”、“第1中间态”、“第2中间态”、“写保护禁止”四种状态。如果要实现禁止写保护功能,则连续向数据寄存器写入3个数据:0xAA、0x99、0x66(3个写操作必须连续)。每写入一个数据,写保护状态寄存器的值就发生一次变化,直到其值为“011”,当写保护状态寄存器的值为“011”,此时引导用只读存储器处于“写保护禁止”状态。
如图1所示,写保护状态寄存器的四种状态之间的转换关系如下:
当单板上电或复位时,写保护状态寄存器处于“写保护使能”状态;
在“写保护使能”状态,如果向写保护数据寄存器写入第一个设定数据(例如0xAA),则写保护状态寄存器进入“第1中间态”状态,若为其它操作,则将维持当前状态;
在“第1中间态”状态,如果向写保护数据寄存器写入第一个设定数据(例如0xAA),则写保护状态寄存器维持当前状态,如果向写保护数据寄存器写入第二个设定数据(例如0x99),则写保护状态寄存器进入“第2中间态”状态,若为其它操作,则返回到“写保护使能”状态;
在“第2中间态”状态,如果向写保护数据寄存器写入第三个设定数据(例如0x66),则写保护状态寄存器进入“写保护禁止”状态,若为其它操作,则返回到“写保护使能”;
在“写保护禁止”状态,如果向写保护数据寄存器写入第四个设定数据(例如0x55),则写保护状态寄存器返回到“写保护使能”状态,若为其它操作,则可以进行对引导用只读存储器的写操作以及其它任何操作。
在“写保护禁止”状态,可以进行对引导用只读存储器的写操作以及其它任何操作,如果向写保护数据寄存器写入第四个设定数据(0x55),则写保护状态寄存器返回到“写保护使能”状态,。
写保护状态寄存器的四种状态与写保护状态寄存器的寄存器值的对应关系如下:
“写保护使能”状态--写保护状态寄存器的值为“111”;
“第1中间态”状态--写保护状态寄存器的值为“110”;
“第2中间态”状态--写保护状态寄存器的值为“101”;
“写保护禁止”状态--写保护状态寄存器的值为“011”。
(4)实施对引导用只读存储器的写操作
当写保护状态存储器处于“写保护禁止”状态时,可以对引导用只读存储器进行在线升级等写操作。当实施对引导用只读存储器的写操作时,引导用只读存储器的片选信号应该由写保护状态寄存器的第2位数据和其它控制信号译码得到。CE#信号的状态除了由一般的控制信号中,(包括CPU的读信号、写信号、高位地址信号、片选信号等)译码得到以外,还受到写保护状态寄存器的第2位的控制。另外,在进行读操作时,CE#信号不应该受到写保护状态寄存器的第2位的控制。
(5)写操作结束后,将写保护状态寄存器重新置为写保护状态。向写保护数据寄存器写入第四数据0x55,则引导用只读存储器重新处于写保护状态。