打印

STM32 NAND ECC 请教各位高手(论坛里的帖子都看过了)

[复制链接]
6387|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
roy406|  楼主 | 2011-12-8 00:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好:我碰到的问题和以前的几位朋友一样,都是ecc代码读出为0,不知道设置有什么错误,想请教下,下面是我的大致步骤,希望指正:
  /*-- FSMC Configuration ------------------------------------------------------*/
  p.FSMC_SetupTime = 0x1;  // 在(通用空间/属性空间)x的建立时间 (Common/Attribute memory  x setup time)
  p.FSMC_WaitSetupTime = 0x2;// 在(通用空间/属性空间)x的等待时间 (Common/Attribute memory  x wait time)
  p.FSMC_HoldSetupTime = 0x3;// 在(通用空间/属性空间)x的保持时间 (Common/Attribute memory  x hold time)
  p.FSMC_HiZSetupTime = 0x1; // 在(通用空间/属性空间)x数据总线的高阻时间 (Common/Attribute memory  x databus HiZ time)
  //tmppcr[0:19]
  FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND;
  FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Disable;  // 等待功能使能位打开 [1]
  FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; //数据总线宽度[4:5]
  FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable;   //ECC计算电路使能位 [6]
  FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_2048Bytes;
//#endif
  FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 0x00;//CLE至RE的延迟 (CLE to RE delay) [9:12]
  FSMC_NANDInitStructure.FSMC_TARSetupTime = 0x00; //ALE至RE的延迟 (ALE to RE delay) [13:16]
  FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &p;    //通用存储空间时序寄存器
  FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = &p; //属性存储空间时序寄存器
  FSMC_NANDInit(&FSMC_NANDInitStructure);
  /* FSMC NAND Bank Cmd Test */
  FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);
FSMC_NANDECCCmd(FSMC_Bank2_NAND,ENABLE);
status = FSMC_NAND_WriteSmallPage(TxBuffer, WR_Add, 1);
while(FSMC_GetFlagStatus(FSMC_Bank2_NAND,FSMC_FLAG_FEMPT)==Bit_RESET);
ecc = FSMC_GetECC(FSMC_Bank2_NAND);
FSMC_NANDECCCmd(FSMC_Bank2_NAND,DISABLE);
TxBuffer[2048]里面的数据是0x00~0xff的循环数据,写一个page以后就读一次ecc
但是每次数据都是0 不知道还有什么没有注意的,看了其他的帖子中提到的包括fifo标志和ecc的使能我都加了。真心求赐教,卡了两天了 没有一丝的头绪
沙发
香水城| | 2011-12-8 09:45 | 只看该作者
如果我没有记错,0x00~0xff循环数据的ECC值就是0。

使用特权

评论回复
板凳
roy406|  楼主 | 2011-12-8 09:50 | 只看该作者
但是我将数据修改 比如前2000个数据是0x00~0xff循环 后48个为0,结果还是一样

使用特权

评论回复
地板
香水城| | 2011-12-8 09:53 | 只看该作者
1)写入或读出数据的数目要与ECC计算指定的数据数目相同
2)请使用随机数测试

使用特权

评论回复
5
roy406|  楼主 | 2011-12-8 10:10 | 只看该作者
写入还是2048个字节没有变,输出结果都是0

使用特权

评论回复
6
香水城| | 2011-12-8 10:26 | 只看该作者
写入还是2048个字节没有变,输出结果都是0
roy406 发表于 2011-12-8 10:10


ECC计算指定的数据数目也是2048吗?

使用特权

评论回复
7
roy406|  楼主 | 2011-12-8 12:30 | 只看该作者
FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_2048Bytes;
应该没错吧

使用特权

评论回复
8
roy406|  楼主 | 2011-12-8 12:47 | 只看该作者
有没有人有相关的程序发下看看

使用特权

评论回复
9
roy406|  楼主 | 2011-12-8 13:21 | 只看该作者
做了个小程序检测ecc 结果发现0~8或者9~f的循环计算结果只要是8的倍数的都是0,版主说的不错,我比较偷懒了

使用特权

评论回复
10
rider1| | 2011-12-8 16:17 | 只看该作者
这个 ECC 只能识别 2Bits同时错误或纠正1bit错误,如果多于2bits的数据改变,计算的码可能是相同的。

使用特权

评论回复
11
roy406|  楼主 | 2011-12-8 16:54 | 只看该作者
嗯 谢谢,这个我知道,我现在只是检查是否能使用ecc,纠正这个还没考虑到。

使用特权

评论回复
12
becareful| | 2012-1-17 14:21 | 只看该作者
读数据能检测ECC的不??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝