TI中文支持网
TI专业的中文技术问题搜集分享网站

A8 nand ECC小概率错误

AM3352 +nand型号为MT29F2G16ABAEAWP

 

硬件如下:

 

 

Sysboot[9]  = 0; sysboot[8] = 0;

 

软件是调用了AM335X_StarterWare_02_00_01_01 里nandlib里构建了我们的nand读写函数。其中因为我们使用的是16位宽的nand,修正了nandlib里的一个bug为:

NANDPageRead函数里如下,去掉-1,

/* Read the ECC Data from spare area */

NANDDataRead(nandInfo, eccData, (nandEccInfo->eccByteCnt-1));

 

因为nandEccInfo->eccByteCn = 14, NANDDataRead函数里16位的是在-2做地址指针偏移,入参-1后传入的是13,在-2操作时候指针将异常。

 

附件为我们的nand read  write 驱动。  

 

升级的过程我们是控制如下:

 

    for(j= 0; j<3;j++)

    {

    ret = BSP_NandWrite(NandAddr,g_USBBuf,offset);  //写入nand 存放程序

    if(ret != E_PASS)

    {

        DBG_ERR("Write Nand Err is %03d", ret);

        if(j<2)

         continue;

        else

         return FALSE;

    }

        else//成功   

        {

            break;

        }    

    }

    //清除一次buff

memset(g_USBBuf,0,sizeof(g_USBBuf));

for(j=0;j<3;j++)

{

    ret = BSP_NandRead(NandAddr,g_USBBuf,offset);

    if(ret != E_PASS)

    {

        DBG_ERR("Read Nand Err is %03d", ret);

        if(j<2)

         continue;

        else

         return FALSE;

    }

    USB_ReadFile_CSControl.CS_A = 0;

    //计算读nand出来的校验和

    for(i=0;i<offset;i++)

    {

        USB_ReadFile_CSControl.CS_A += g_USBBuf[i];

    }

    //判断校验和是否跟读文件读时候校验和一致。

    if(USB_ReadFile_CSControl.CS_A != USB_ReadFile_CSControl.CS_B)

    {

            if(j<2)

         continue;

        else

         return FALSE;

    }

        else

        { 

            break;

        }

    }

 

目前的问题是:

测试方法:APP1 , APP2两个文件,文件内容不同, 一个放U盘一个放SD卡来回不停升级,即NAND写完APP1后,写APP2,再写APP1,不停循环。

(1)sysboot[9] = 0, sysboot[8] = 0;在write完nand后,read的时候就会出现两种情况,返回

NAND_STATUS_READ_ECC_ERROR_CORRECTED

NAND_STATUS_READ_ECC_UNCORRECTABLE_ERROR

该问题还不是每次都出现,是偶尔频发。

(2)另外一个实验结果,sysboot[9] = 1; sysboot[0] = 0;使用同一个升级文件,也会返回ECC erro。有些核心板一直2 3小时,不停升级,也不会重新, 有些板子测试几分钟即可出现。

Mark Liao:

你好,我们也是用的镁光的NAND FLASH(MT29F32G08CBADAWP),内核启动读取ubi文件系统时ecc错误。你们内核是什么版本的呢?没找到你说的函数。我们使用3.14.43的内核版本。

yao wang2:

回复 Mark Liao:

上面的是裸机系统,  TI的Starware库关于nand page的read存在一个没必要的读动作,ECC读取会整体读取一次然后512字节做ECC时候再分别读取一次。可去掉整体读取一次的操作。   linux 下应该不存在这个问题。  你这个问题可以用SD卡启动方式下,通过调试U-BOOT去见nand bad检测下,难度本身是否存在坏块。

Mark Liao:

回复 yao wang2:

在u-boot下检测只有三个坏块,在Kernel下测试只有一个好块,其它的都是坏块。

Jian Zhou:

回复 Mark Liao:

把处理器主频和DDR频率降下来试试

Mark Liao:

回复 Jian Zhou:

处理器频率300MHZ,确认是ECC校验位数的问题。我们的NAND FLASH是MT29F32G08CBADAWP,每page为8K,40bit的ECC,内核只支持最大16bit。TI有支持40bit的ECC驱动么?

另外u-boot下是用的bch8,但是可以正常读写,这个是什么原因呢?

NAND FLASH DATA SHEET:

Description                                                                Requirement

Minimum number of valid blocks (NVB) per LUN            2054Total available blocks per LUN                                     2128First spare area location                                             Byte 8192Bad-block mark                                                         00hMinimum required ECC                                              40-bit ECC per 1117 bytes of data

赞(0)
未经允许不得转载:TI中文支持网 » A8 nand ECC小概率错误
分享到: 更多 (0)