This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

A8 nand ECC小概率错误

Other Parts Discussed in Thread: AM3352

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,不停循环。

1sysboot[9] = 0, sysboot[8] = 0;writenand后,read的时候就会出现两种情况,返回

NAND_STATUS_READ_ECC_ERROR_CORRECTED

NAND_STATUS_READ_ECC_UNCORRECTABLE_ERROR

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

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

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

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

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

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

  • 处理器频率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            2054
    Total available blocks per LUN                                     2128
    First spare area location                                             Byte 8192
    Bad-block mark                                                         00h
    Minimum required ECC                                              40-bit ECC per 1117 bytes of data