2413|1

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于nand ecc? [复制链接]

常见ecc 源码中:
static const u_char nand_ecc_precalc_table[] =
  {
    0x00, 0x55, 0x56, 0x03, 0x59, 0x0c, 0x0f, 0x5a, 0x5a, 0x0f, 0x0c, 0x59, 0x03, 0x56, 0x55, 0x00,
    0x65, 0x30, 0x33, 0x66, 0x3c, 0x69, 0x6a, 0x3f, 0x3f, 0x6a, 0x69, 0x3c, 0x66, 0x33, 0x30, 0x65,
    0x66, 0x33, 0x30, 0x65, 0x3f, 0x6a, 0x69, 0x3c, 0x3c, 0x69, 0x6a, 0x3f, 0x65, 0x30, 0x33, 0x66,
    0x03, 0x56, 0x55, 0x00, 0x5a, 0x0f, 0x0c, 0x59, 0x59, 0x0c, 0x0f, 0x5a, 0x00, 0x55, 0x56, 0x03,
    0x69, 0x3c, 0x3f, 0x6a, 0x30, 0x65, 0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6a, 0x3f, 0x3c, 0x69,
    0x0c, 0x59, 0x5a, 0x0f, 0x55, 0x00, 0x03, 0x56, 0x56, 0x03, 0x00, 0x55, 0x0f, 0x5a, 0x59, 0x0c,
    0x0f, 0x5a, 0x59, 0x0c, 0x56, 0x03, 0x00, 0x55, 0x55, 0x00, 0x03, 0x56, 0x0c, 0x59, 0x5a, 0x0f,
    0x6a, 0x3f, 0x3c, 0x69, 0x33, 0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3c, 0x3f, 0x6a,
    0x6a, 0x3f, 0x3c, 0x69, 0x33, 0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3c, 0x3f, 0x6a,
    0x0f, 0x5a, 0x59, 0x0c, 0x56, 0x03, 0x00, 0x55, 0x55, 0x00, 0x03, 0x56, 0x0c, 0x59, 0x5a, 0x0f,
    0x0c, 0x59, 0x5a, 0x0f, 0x55, 0x00, 0x03, 0x56, 0x56, 0x03, 0x00, 0x55, 0x0f, 0x5a, 0x59, 0x0c,
    0x69, 0x3c, 0x3f, 0x6a, 0x30, 0x65, 0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6a, 0x3f, 0x3c, 0x69,
    0x03, 0x56, 0x55, 0x00, 0x5a, 0x0f, 0x0c, 0x59, 0x59, 0x0c, 0x0f, 0x5a, 0x00, 0x55, 0x56, 0x03,
    0x66, 0x33, 0x30, 0x65, 0x3f, 0x6a, 0x69, 0x3c, 0x3c, 0x69, 0x6a, 0x3f, 0x65, 0x30, 0x33, 0x66,
    0x65, 0x30, 0x33, 0x66, 0x3c, 0x69, 0x6a, 0x3f, 0x3f, 0x6a, 0x69, 0x3c, 0x66, 0x33, 0x30, 0x65,
    0x00, 0x55, 0x56, 0x03, 0x59, 0x0c, 0x0f, 0x5a, 0x5a, 0x0f, 0x0c, 0x59, 0x03, 0x56, 0x55, 0x00
  };

static void nand_trans_result (u_char reg2, u_char reg3, u_char *ecc_code)
{       u_char a, b, i, temp1, temp2;
        a = b = 0x80;
        temp1 = temp2 = 0;
        
                for (i = 0; i < 4; i++)
                {
         if (reg3 & a)
                    temp1 |= b;   //15,13,11,9bit->ecc_code
             b>>=1;
             if (reg2 & a)
                    temp1 |= b;   //14,12,10,8bit->ecc_code
             b>>=1;
             a>>=1;
                }

        b=0x80;
                for (i = 0; i<4; i++)
                {
                 if (reg3 & a)
                    temp2 |= b;   //7,5,3,1bit->ecc_code
             b>>=1;
             if (reg2 & a)
                    temp2 |= b;   //6,4,2,0bit->ecc_code
             b>>=1;
             a>>=1;
                }

                ecc_code[0] = temp1;
        ecc_code[1] = temp2;
}

// Calculate 3 byte ECC code for 256 byte block
        void nand_calculate_ecc (const u_char *dat, u_char *ecc_code)
        {
                u_char idx, reg1, reg2, reg3;
                int j;
        /* Initialize variables */
                reg1 = reg2 = reg3 = 0;
                ecc_code[0] = ecc_code[1] = ecc_code[2] = 0;
        /* Build up column parity */
                for (j=0; j<256; j++)
                {
                        /* Get CP0 - CP5 from table */
            idx = nand_ecc_precalc_table[dat[j]];
                        reg1 ^= (idx & 0x3f);
            /* All bit XOR = 1 ? */
                        if (idx & 0x40) {
                                reg3 ^= (u_char) j;
                                reg2 ^= ~((u_char) j);
                        }
                }
        /* Create non-inverted ECC code from line parity */
                nand_trans_result(reg2, reg3, ecc_code);
        /* Calculate final ECC code */
                ecc_code[0] = ~ecc_code[0];
                ecc_code[1] = ~ecc_code[1];
                ecc_code[2] = ((~reg1) << 2) | 0x03;
        }

其中 是怎么检验256byte数据的?  是红色字体dat[j]中吗  请高手赐教 谢谢

最新回复

nand_calculate_ecc好像只是计算ECC 并没有校验吧? 注: /** * nand_calculate_ecc - [NAND Interface] Calculate 3 byte ECC code for 256 byte block * @mtd:        MTD block structure * @dat:        raw data * @ecc_code:        buffer for ECC */  详情 回复 发表于 2008-3-30 10:09
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
nand_calculate_ecc好像只是计算ECC
并没有校验吧?

注:
/**
* nand_calculate_ecc - [NAND Interface] Calculate 3 byte ECC code for 256 byte block
* @mtd:        MTD block structure
* @dat:        raw data
* @ecc_code:        buffer for ECC
*/
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表