|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我最近找到一种flash(串行)纠错方法,但看不太懂,请那位大虾帮帮忙:
thanx
--------------------------
存储空间冗余方式为在同一个存储体中划分出n个存储区域,每个区域可以用器件冗余的同样方法存放数据。
不论是器件冗余还是存储空间冗余,均为副本冗余。因此,只要有可行的查错误方法,就可保证有足够强的纠错能力。本系统拟使用二维奇偶监督码来实现查错,现在正在试验阶段。
二维奇偶监督码是将要检测的信息排成二进制矩阵,分别在水平和垂直方向的每一行列设置一个检验位。对m个信息单元X1,X2,…,Xm,每个单元有n位二进制数据,即Xi=din-1 … dil di0。其检验矩阵如图4.8所示:
d10 d11 … dli … dln-1 r00
d20 d21 … d2i … d2n-1 r01
…
dj0 dj1 … dji … djn-1 r0j
…
dm0 dml … dmi … dmn-1 r0
mrl0 r11 … r1i … rln-1
图 纠错矩阵
由于这种异或/半加运算是一个可交换,可分配群,易于算法实现,且除了错误全在矩阵长方形顶点上外,其它所有错误均能查出,所以这是一种检验错误能力很强的查错方法。下面给出一个位为8X8以内的偶监督码算法。
;产生检验码的程序
;人口:r0为检验信息缓冲区首址,r1为字节计数。
;出El:检验结果存放在r2,r3中
LRCCHECK:mov r2,#0
mov r3,#0;清结果缓冲区
mov a,#0
Check1: mov a,r2;计算垂直奇偶监督位
xrl a,@r0;异或
mov r2,a ;保存中间结果
;计算水平奇偶监督位
mov a, @r0
mov c, p
mov a, r3
rlc a
mov r3, a
;计算下一个字节
inc r0
djnz r1,cheek1
:结果由r2, r3返回调用程序
ret
;检验二维奇偶监督码是否正确的程序
;人口:r0为存储器中存放二维奇偶监督码的首址,r2, r3 为读出信息的二维
;奇偶监督码。
;出口:进cy为0,检验无错;cy为1,检验有错
verify:mov a, r2
xrl a,@r0
jnz error
inc r0
mov a,r3
xrl a, @r0
jz ok
error: setb c
ret
ok: clr c
ret
若检验出有错,可取另一无错的副本改正,执行这两个算法的时间应该在200个CPU时钟以内。
|
|