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.

[参考译文] Linux/PROCESSOR-SDK-AM437X:NAND 错误:OMAP2-nand 8000000.nand:找到不可纠正的位翻转

Guru**** 2589265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610249/linux-processor-sdk-am437x-nand-error-omap2-nand-8000000-nand-uncorrectable-bit-flips-found

器件型号:PROCESSOR-SDK-AM437X

工具/软件:Linux

I 所有、

我们通过电路板上的 GPMC 总线对 FPGA 进行了集成、现在 GPMC 总线上有两个器件:

CS0:NAND 闪存

2.CS3:FPGA

我们

我们需要为 CS3正确配置 GPMC 寄存器、我的配置为:

void GPMC_FPGA_init (void)

   /*对 FPGA 执行 GPMC 配置。 *
   GPMC_cs_write_reg (3、GPMC_CS_CONFIG7、0);/C3禁用
   //猝发读取、单次写入
   GPMC_cs_write_reg (3、GPMC_CS_config1、0x69001001);
   GPMC_cs_write_reg (3、GPMC_CS_CONFIG2、0x00030701);
   GPMC_cs_write_reg (3、GPMC_CS_CONFIG3、0);
   GPMC_cs_write_reg (3、GPMC_CS_CONFIG4、0x03010684);
   GPMC_cs_write_reg (3、GPMC_CS_CONFIG5、0x02060408);
   GPMC_cs_write_reg (3、GPMC_CS_CONFIG6、0x03000200);
   GPMC_cs_write_reg (3、GPMC_CS_CONFIG7、((12 << 8)|((0x4000000 >> 24)& 0x3F)|(1 << 6)));

   GPMC_cs_write_reg (1、GPMC_CS_CONFIG7、0);
   GPMC_cs_write_reg (2、GPMC_CS_CONFIG7、0);
   GPMC_cs_write_reg (4、GPMC_CS_CONFIG7、0);
   GPMC_cs_write_reg (5、GPMC_CS_CONFIG7、0);
   GPMC_cs_write_reg (6、GPMC_CS_CONFIG7、0);
   GPMC_WRITE_REG (GPMC_CONFIG、GPMC_READ_REG (GPMC_CONFIG)&~(0x2));

现在、我可以操作 FPGA 和 NAND 闪存、但在 FPGA 和 NAND 闪存协同工作时、我发现了一些有趣的事情:

步骤1: 加载 FPGA 固件。

步骤2:读取 FPGA 版本寄存器:__raW_readw (FPGA_BASE + 0x6);

步骤3:nandtest /dev/mtd0

然后、步骤3将失败:

[root@Ronds:~]# nandtest /dev/mtd0
ECC 校正:0
ECC 故障  :128
坏块    :0
BBT 块    :0
00000000:读取(第1页、共4页)...[53.863347]  OMAP2-nand 8000000.nand:找到不可纠正的位翻转
[53.871043]  OMAP2-nand 8000000.nand:找到不可纠正的位翻转
[53.877252]  OMAP2-nand 8000000.nand:找到不可纠正的位翻转

如果我跳过步骤1、步骤3不会失败、这意味着 如果 FPGA 正常工作、它 将影响 nand flash...

为了进一步调试、我找到了一个针对这个问题的 WA、如下所示:

步骤1: 加载 FPGA 固件。

步骤2:读取 FPGA 版本寄存器:__raW_readw (FPGA_BASE + 0x6);

步骤3:devmem 0x50000114 ->读取 GPMC_NAND_DATA_3寄存器

步骤4:nandtest /dev/mtd0

这次、nandtest 将正常运行、不会失败...

我将此 WA 添加到 nand controllers 驱动程序(drivers/MTD/nand/OMAP2.c):

void GPMC_wr_for_nand_FPGA (void)

   GPMC_cs_read_reg (3、GPMC_CS_NAND_DATA);

静态空__MAL_UNDESTING_OMAP-ENABLE_hwecc_BCH (struct MTD_info *MTD,int 模式)

   GPMC_wr_for_nand_FPGA ();
 用于计算 ECC 的/* GPMC 配置*/
 开关(ECC_OPT){

FPGA 和 NAND 闪存可以很好地协同工作。

我的问题是、为什么我需要在  nand ECC 之前对 GPMC_NAND_DATA_3寄存器(必须是该寄存器、不能是其他寄存器)执行虚拟读取、否则 nand ECC 将报告错误?????

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这应该是一些同步问题。 请参阅 TRM 中的寄存器说明:
    "从 GPMC_NAND_DATA_3位置或从相关芯片选择存储器区域中的任何位置读取数据会激活异步读取访问。"

    我必须深入研究 GPMC 文档、以尝试找到更详细的说明。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速回复:)
    请在研究后告知结果、谢谢:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan

    是否有此问题的更新?

    谢谢..:)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您能否验证在执行该序列时:
    步骤1:加载 FPGA 固件。

    步骤2:读取 FPGA 版本寄存器:__raW_readw (FPGA_BASE + 0x6);

    步骤3:nandtest /dev/mtd0

    您在第3步看到了 GPMC 时钟?
    读取 GPMC_NAND_DATA_3会激活 GPMC_CS3存储器区域上的异步读取、这意味着您无需时钟即可从 nand 正确读取数据。

    也许您需要根据 TRM 建议验证您的 GPMC_CONFIG_X 设置。

    此致、
    Yordan