您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术MAXQ环境下EEPROM的保护措施 正文
MAXQ环境下EEPROM的保护措施

MAXQ环境下EEPROM的保护措施

点击数:7472 次   录入时间:03-04 11:58:51   整理:http://www.55dianzi.com   DSP/FPGA技术

       写操作

       如上所述,写操作并不是真正将数据写入主存储区。实际上,写操作是将数据写入4个缓存之一。在这种方式下,主存储区内原先的数据将一直保持到整个有效写操作流程完成后为止。图3的流程说明了以下几点:

       检查页面地址和缓存地址,以检验其有效性。如果地址无效,操作在这里结束,函数返回一个无效缓存地址或无效页面编号错误代码。

写操作的流程图


       读取每个写缓存的状态域。如果任何缓存处于占用状态,则操作失败并返回写过程(write sequence)错误代码。4个写缓存之一应处于终止状态。如果是这样,激活下一个缓存数据被复制到写缓存的数据域。

页面地址被写入地址域。计算CRC校验结果并将其写入CRC域。将状态改为占用。将前一个缓存置为可用状态(即更新原来的终止状态)。

       需要注意,此时对新写的页面进行读操作,将返回页面原来的数值。只有等提交操作完成后,才会返回新值。

       提交操作

      
提交函数不需要参数。它的工作就是如实地将数据从写缓存传送到主存储区,然后将写缓存标记为终止状态。提交函数的操作流程如图4所示:

提交操作的流程

       读取每个写缓存的状态域。应该只有1个缓存标记为占用状态。否则,函数在此结束,并返回一个写过程错误代码。对被占用的缓存进行CRC校验。如果不匹配,则返回一个数据损坏错误代码,提取页面地址,并将数据写入主存储区的指定页面。

       计算缓存的数据部分的CRC。该值被保存在一个临时寄存器中。
       找到对应所选主存储区页面的校验页面,并读取该校验页面的内容。
       用前面计算的CRC更新校验页面,为校验页面计算新的CRC。
       将校验页面数据重新写回校验存储区。
       将写缓存更新为终止状态。

      回退操作

      
如图5所示,回退函数是最简单的操作之一。由于主存储区只有在完成一个提交操作后才更新数据,而不是在一个写操作之后更新的,所以回退操作只需将写缓存置为无效状态即可。

回退操作的流程图

       读取每个写缓存的状态域。应该只有一个缓存被标记为占用。否则,函数在此结束,并返回一个写过程错误代码。将所选的写缓存状态域置为终止。

       检查操作

      
在任何上电情况下,都需要调用检查函数以确保 EEPROM 可以接受数据。检查函数检验存储系统的可用性,并报告任何发现的错误。该函数的检查操作如图6所示:

检查操作的流程图

       读取每个写缓存。确认只有一个缓存不是可用状态。如果只有一个缓存含有未定义的状态代码,则返回一个写操作中断(interrupted write)错误代码。如果所有缓存均包含未定义的状态代码,则返回EEPROM未初始化(uninitialized EEPROM)错误代码。


www.55dianzi.com  
       如果仅有一个缓存包含占用状态代码,计算此缓存的CRC。如果CRC不匹配,则返回一个写操作中断错误代码,检查校验存储区的每一个页面。如果任何页面没有通过CRC校验,则返回保护失败错误代码。

       最后,检查主存储区的每一页,并与存储的各页CRC进行对比。如果有1页未通过CRC校验,则返回一个提交中断( interrupted commit)错误代码。

       清理操作

      
清理函数解决 EEPROM 系统存在的任何问题。在清理操作退出时,无论EEPROM子系统先前是何种状态,都应该可以继续使用了。所有未提交的写操作将被回退,并且完成失败的提交操作。图7演示了清理操作是如何工作的:

清理操作的流程

       如果检查操作返回一个EEPROM未初始化的错误代码,则初始化EEPROM。清除所有数据页面,并且初始化所有校验页面。除最后一个写缓存被初始化为终止状态外,清除其它所有写缓存并置为可用状态。

      如果检查操作返回一个写操作中断错误代码,则找到那个不是可用状态的写缓存。将它的状态改为终止状态。

       如果检查操作返回一个提交中断错误代码,则找到CRC不匹配的主页面。计算出它的CRC并更新相关校验页面。

       如果检查操作返回保护失败错误代码,则表示紧随提交操作的更新校验页面操作被中断。读出所有与错误校验页面相关的主存储区页面,并刷新校验页面。

       安全性证明

      
要证明系统的安全性,需要确定写操作过程中数据容易损坏的时刻。(读操作从本质上来说是安全的。读操作期间不会对EEPROM页面进行写操作,因此数据不会被损坏。) 确定了这些易损时刻后,只需要再确定一个恢复过程。如果恢复机制涵盖了所有可能的数据损失情况,而且如果我们假定在任何一个可能破坏EEPROM写周期的事件之后,都将首先执行校验/清理周期(例如上电),那么系统就是安全的。

       在大多数串行EEPROM器件中,一个写操作首先将页面的每位数据都置为已知值,然后将所有需要改变的位设置为需要的值。因此在掉电时,中断的写操作极有可能破坏该页的所有字节。通常可以通过向损坏页面写入新数据,进而从这一失效事件中恢复出来。但这会失去原来的数据。写操作过程中数据容易损坏的时刻如下所述(按发生的时间顺序排列对数据域进行写操作:如果此时发生电源失效事件,检查操作不会检测到错误。正在被写入的写缓存仍显示可用状态,但可用的缓存不包含有效的CRC值。

       向当前写缓存写入状态信息:这个操作将状态域改为占用状态,设定CRC并为写操作填入页面地址。如果这个过程被中断,可能发生如下情况:(1) 状态无效,从而导致一个写操作中断错误;(2) 状态有效,但CRC错误,仍会导致一个写操作中断错误;(3) 状态和CRC域有效。在最后这种情形下,系统有未提交处理的写操作。可以检测到这一状态,因为此时一个缓存将处于占用状态而另一个缓存为终止状态。如果子系统的其它部分检查通过,则用户代码可通过发出提交或回退操作继续执行。无论发生何种情况,主存储区和校验存储区都是安全的。

       前一个缓存状态清除为可用状态:缓存可能有损坏的状态或CRC,而下一个缓存为占用状态。这意味着清除该缓存的状态时操作被中断,这种情况下可以执行提交或回退操作。

       在写操作和提交操作之间:只有一个写缓存将处于占用状态,并且通过了CRC校验。用户代码可以请求提交或回退操作。写缓存、校验存储区和主存储区都是安全的。


www.55dianzi.com

       提交操作过程中数据容易损坏的时刻如下所述:

       将数据域复制到主存储区:如果写操作被中断,主存储区的1个页面数据可能被破坏。检查函数会检测到两种状态:(1) 一个有效的占用写缓存;(2) 中断的提交操作导致主存储区页面数据损坏。写缓存和校验存储区是安全的。在这种情况下,清理操作会完成提交操作并返回一个干净的系统。注意:即使写操作已经完成,检查操作仍会因为校验存储区的CRC与计算出的CRC不匹配而报错。

       更新校验存储区的CRC:如果对校验页面的写操作被中断,则整个页面的数据都可能被破坏。这意味着主存储区的15个页面都对应着无效的CRC。但是由于校验存储区的每一页都有自己的校验和,而且在写操作中断后会产生校验和错误,因此检查程序会发现这一点。在这种情况下,检查程序会返回保护失败。修复方法如下:首先重新计算所有受影响的15个页面的CRC值。然后将这些值和该页自身的有效CRC值一起写入校验页面。

上一页  [1] [2] [3]  下一页


本文关键字:暂无联系方式DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术