MMS3120 MMS3120
如果检查操作返回一个EEPROM未初始化的错误代码,则初始化EEPROM。清除所有数据页面,并且初始化所有校验页面。除***后一个写缓存被初始化为终止状态外,清除其它所有写缓存并置为可用状态。
如果检查操作返回一个写操作中断错误代码,则找到那个不是可用状态的写缓存。将它的状态改为终止状态。
如果检查操作返回一个提交中断错误代码,则找到CRC不匹配的主页面。计算出它的CRC并更新相关校验页面。
如果检查操作返回保护失败错误代码,则表示紧随提交操作的更新校验页面操作被中断。读出所有与错误校验页面相关的主存储区页面,并刷新校验页面。
安全性证明
要证明系统的安全性,需要确定写操作过程中数据容易损坏的时刻。(读操作从本质上来说是安全的。读操作期间不会对EEPROM页面进行写操作,因此数据不会被损坏。)确定了这些易损时刻后,只需要再确定一个***过程。如果***机制涵盖了所有可能的数据损失情况,而且如果我们假定在任何一个可能***EEPROM写周期的事件之后,都将首先执行校验/清理周期(例如上电),那么系统就是安全的。
在大多数串行EEPROM器件中,一个写操作首先将页面的每位数据都置为已知值,然后将所有需要改变的位设置为需要的值。因此在掉电时,中断的写操作极有可能***该页的所有字节。通常可以通过向损坏页面写入新数据,进而从这一失效事件中***出来。但这会失去原来的数据。写操作过程中数据容易损坏的时刻如下所述(按发生的时间顺序排列对数据域进行写操作:如果此时发生电源失效事件,检查操作不会检测到错误。正在被写入的写缓存仍显示可用状态,但可用的缓存不包含有效的CRC值。
向当前写缓存写入状态信息:这个操作将状态域改为占用状态,设定CRC并为写操作填入页面地址。如果这个过程被中断,可能发生如下情况:(1)状态无效,从而导致一个写操作中断错误;(2)状态有效,但CRC错误,仍会导致一个写操作中断错误;(3)状态和CRC域有效。在***后这种情形下,系统有未提交处理的写操作。可以检测到这一状态,因为此时一个缓存将处于占用状态而另一个缓存为终止状态。如果子系统的其它部分检查通过,则用户代码可通过发出提交或回退操作继续执行。无论发生何种情况,主存储区和校验存储区都是安全的。
前一个缓存状态清除为可用状态:缓存可能有损坏的状态或CRC,而下一个缓存为占用状态。这意味着清除该缓存的状态时操作被中断,这种情况下可以执行提交或回退操作。
在写操作和提交操作之间:只有一个写缓存将处于占用状态,并且通过了CRC校验。用户代码可以请求提交或回退操作。写缓存、校验存储区和主存储区都是安全的。
提交操作过程中数据容易损坏的时刻如下所述:
将数据域***到主存储区:如果写操作被中断,主存储区的1个页面数据可能被***。检查函数会检测到两种状态:(1)一个有效的占用写缓存;(2)中断的提交操作导致主存储区页面数据损坏。写缓存和校验存储区是安全的。在这种情况下,清理操作会完成提交操作并返回一个干净的系统。注意:即使写操作已经完成,检查操作仍会因为校验存储区的CRC与计算出的CRC不匹配而报错。
更新校验存储区的CRC:如果对校验页面的写操作被中断,则整个页面的数据都可能被***。这意味着主存储区的15个页面都对应着无效的CRC。但是由于校验存储区的每一页都有自己的校验和,而且在写操作中断后会产生校验和错误,因此检查程序会发现这一点。在这种情况下,检查程序会返回保护失败。修复方法如下:首先重新计算所有受影响的15个页面的CRC值。然后将这些值和该页自身的有效CRC值一起写入校验页面。
更新写缓存的状态信息:如果当状态变量从占用状态变为终止状态时,写周期被中断,那么整个写缓存页面的数据都可能被损坏。但是,校验存储区和主存储区都是安全的。检查操作会找到数据损坏的页面,并返回写操作中断错误代码。当运行清理程序时,它将复位写缓存子系统,并完成提交操作。
***后,在回退操作中数据容易损坏的时刻为:
更新写缓存的状态:与提交周期的***终状态类似,该操作只是简单地将写缓存的占用状态复位至终止状态。如果它被中断,则检查程序会返回写操作中断,并且清理程序会重新初始化所有的写缓存区域。校验存储区和主存储区仍是安全的。
可以看出,无论电源何时掉电或处理器何时被复位,存储子系统都可保持数据的完整性。发生电源失效事件后,存储子系统会返回到可进行读或写的状态。如果一个提交操作被中断,子系统会返回到可执行提交或回退操作的状态。
设计起步
MAXQ微控制器的EEPROM存储系统功能完备。系统设计者可以根据需要来增强该系统的功能。但需要注意以下几点:
C封装程序:在多数C语言标准中,与汇编语言子程序双向传送数据时都有一套标准的方法。例如在IAR开发环境下,参数在低编号的累加器中传入和传出。由于参数已经传入A[0]和A[1],为这些程序建立一个C封装器,就像写函数原型一样容易。在其它C环境下,参数传递是通过数据栈进行的,需要一个简单的封装子程序。
并发处理:首先要保证写周期的完整性,并且提供一套能够保证完整性的机制,对于整个平台的成败至关重要。但很多应用都需要这样一种机制,即可以让一系列写周期排队并一次执行完毕,从而保证全都执行或全都不执行。但本文讨论的机制不能工作在这种方式下。如果一个系统存有跨越多个页面的信息记录,则可以中断一个写操作,这使得***之后的记录涵盖了包含部分新数据的页面和包含部分旧数据的页面。有一种方法可避免该问题,即在执行提交操作之前允许多重写操作。这种方法并不像听上去那么简单,因为一个部分提交的事务,可能同时包括新纪录片断、旧记录片断和损坏的页面。
平均读写机制:平均读写作为闪存文件系统的一个特点,是指虚拟化页面地址,使得被频繁写入的页面会出现在存储器的任何物理位置。但是很难找到实现这一目标的***佳方法。这是因为,***直接的解决方法(活动存储块的目录处于固定的位置,并且每次写操作后都要对它进行更新)会导致存储目录的页面迅速损耗。所以,就像处理数据页面那样,还必须虚拟化和离散化目录本身。
其它页面尺寸:这里给出的系统假定采用一个16kB、每页32字节的存储器件。如果所选择的器件具有更大的页面尺寸(64字节或128字节),这些函数仍可工作,只是会伴随一些额外的写入损耗。(更新128字节页面中的32字节区段时,会对整个128字节页面执行写操作)。但这些函数无法对具有更小页面尺寸的器件进行操作。可以构建一个能够在线确定EEPROM器件特性的系统,并可根据实际特性配置系统的参数。
增强的安全性:本系统对以下类型的错误提供保护:由于电源失效或不可预期的系统复位而造成的EEPROM操作中断。但EEPROM器件偶尔也会因为其它原因出错。例如,由于电路噪声或致电离辐射导致的软件错误。或者由于一个或多个存储单元损耗而导致硬件错误。
一种解决方法是计算并维护校正子(syndrome),而不是采用简单的CRC校验字。校正子和校验字类似,但是包含了足够的信息以修复简单的位错误。***简单的校正子系统可以用log2n+1个校验位来检验n个数据位。因此,对于一个32字节(256位)的页面来说,一个仅包含9位的校正子就可以修正任何1位错误。对数据完整性的要求更加严格时,可以采用更加复杂的系统来解决类似问题。
结语
外部串行EEPROM为微控制器环境下存储非易失数据提供了一种可靠的方法。利用本文提到的技术,即使面临写操作中断的情况,串行EEPROM依然能够可靠地工作。在任何对数据完整性要求较高的应用中,设计者都可以考虑这些技术。
SIEMENS 6RB2030-0FA01
Schleicher UBE 32 10D (E) / 31409246
Schleicher UBK16E 10D/16A (E)
HYDAC KH4-08LR-X-1112
CKD LCS-Q-20-100-T2V-D-A2DTB
Block PVSB 400/24-40
Lenze E***D152X2SFA
YASKAWA SGMAS-01ACA2B
ATV31H037N4
SGMAS-02ACA21
FIP D.90-3" DN 80
SIEMENS M74400-D00
KUKA INZ53/6 390-00174-0
BERNECKER & RAINER ECE 161-0 Rev:01.00 // E 161
EMHART TUCKER Platine B346 E110 344 für TMP1500
EMHART TUCKER Platine B 362 E 110 381 für TMP1500
LEUZE SLS 89/2Se + SLS 89/RE
GEMü 554-32D-137-51-1
BR-20
EFAFLEX FE 491/1 BS
PR 1612/02
SIEMENS 6ES7 432 1HF00-0AB0
RS2-FX/FX
DEMAG 46928344 UAS-D1
VAHLE 0313-15282/0
Norgren PRA/182080/700
ED***L-A***0BB13EG30
Siemens C79145-A3054-A1
Siemens C79458-L2225-B5
SIEMENS 6ES7 315-2AF03-0AB0
00A-400-18
IRT SA 7500.314 No.540
Balluff BNS 819-D04-D12-100-10-FD
EP24/X-L-(MB)
FDU91-JG2AA
Rexroth SEB-F-A 17 R159111730
Siemens 6FX2002-5DA21-1DB0
Rotex GS 42 CH-NR 82 103 C
REXROTH R151231013
PARKER D3DW1ENJP40
MC07B0008-5A3-4-00
DB15G2-44/200X W65 R900337019
LFA16DBW1-71/050 R900245873
WIG WH 963.0009
PBXC100
Siemens 6FX1126-1AA04
P421SGR0100MEL
Art.:Nr. 240-00056 IH 20
Siemens PSU300M 6EP1456-3BA00
Siemens Simodrive 6SC6100-0NA21
6FX2001-2CB00
SIKO GP02-0035
SBA Typ DGS 223-0319
GV-H450
QJ71E7-100
MR-J2S-60B4
6SL3162-2BM01-0AA0
ABB DC532 B7 16DI/16DC 1SAP240100R3001
ABB DC551-CS31 1SAP220500R3001 CS31
testo 6651
E.DOLD & S?HNE LG 5944.02
ALLEN BRADLEY 160-AA02NSF1P1
ALLEN BRADLEY 160-AA03NSF1
Dreiha 014.501-61.A
MCT-1-E
AMI Elektronik Art. 41100105 - 02500
100-AJ-800-000
K1R87PCT2
UPSI-B-2410
GRUNDFOS MGE / MLE 90 -100 OPR. Panel No. 96086151
Wenglor TF24LBBP
Wenglor HN24MGV-P24
FESTO SFE3-F100-L-WQ6-2PB-K1
AC-Motoren GmbH FCA 80A-2/HE
SCHWARZER WE1R 90L4-Z
Omron 3G3EV-AB004-E F
SIEI TYPE AD 24/9-01 // AD24 // 24
HYDAC VD 5 LZ.1 /-***
HYDAC VD 5 LZ.1 /-W-***
Siemens MFCF060
Mitsubishi FR-S520S-0.75K-EC
Festo SLT-16-80-P-A 170565
MR-J2S-60B
yp10FO d40DN32
Schleicher LCT 04-S
Oriental Motor 4IK25GN-SWM
WILO 502 029 493
Weller 0053640299
SIEMENS 6RB2000-0AA03
Yaskawa SGDS-02A12A
WILO 501981092
ifm efector 300 SR5900