Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1303438
  • 博文数量: 92
  • 博客积分: 10389
  • 博客等级: 上将
  • 技术积分: 1918
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-10 16:13
文章存档

2014年(1)

2012年(15)

2009年(6)

2008年(37)

2007年(72)

2006年(54)

我的朋友

分类: LINUX

2007-06-27 18:06:34

ECC程序中nand_ecc_precalc_table表的生成原理
 

作者:龙林 EMAIL:dragon_hn@sohu.com WEB:

??在上文的《NAND FLASH ECC校验原理与实现》中贴出了ECC算法源程序,在ECC算法源程序中有个nand_ecc_precalc_table,用于快速生成ECC校验和,该表实际上是按照《NAND FLASH ECC校验原理与实现》表中的ECC原理生成的,理解了ECC校验和生成原理,实际上生成该表也就不存在任何困难了。下面是生成该表的源程序:

??#define?? BIT0(x)?? ((x)&0x01)
??#define?? BIT1(x)?? (((x)&0x02)>>1)
??#define?? BIT2(x)?? (((x)&0x04)>>2)
??#define?? BIT3(x)?? (((x)&0x08)>>3)
??#define?? BIT4(x)?? (((x)&0x10)>>4)
??#define?? BIT5(x)?? (((x)&0x20)>>5)
??#define?? BIT6(x)?? (((x)&0x40)>>6)
??#define?? BIT7(x)?? (((x)&0x80)>>7)
??
??void MakeEccTable()
??{
????int?i,m;
????BYTE xData;
????m=0;
????for(i=0;i<256;i++)
????{
??????xData=0;
??????if(BIT0(i)^BIT2(i)^BIT4(i)^BIT6(i)) xData|=0x01;
??????if(BIT1(i)^BIT3(i)^BIT5(i)^BIT7(i)) xData|=0x02;
??
??????if(BIT0(i)^BIT1(i)^BIT4(i)^BIT5(i)) xData|=0x04;
??????if(BIT2(i)^BIT3(i)^BIT6(i)^BIT7(i)) xData|=0x08;
??
??????if(BIT0(i)^BIT1(i)^BIT2(i)^BIT3(i)) xData|=0x10;
??????if(BIT4(i)^BIT5(i)^BIT6(i)^BIT7(i)) xData|=0x20;
??
??????if(BIT0(i)^BIT1(i)^BIT2(i)^BIT3(i)^BIT4(i)^BIT5(i)^BIT6(i)^BIT7(i))
????????xData|=0x40;
??????if(m==15)
??????{
????????TRACE("0x%02X,\n",xData);
????????m=0;
??????}
??????else
??????{
????????TRACE("0x%02X,",xData);
????????m++;
??????}
????}
??}

阅读(2078) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~