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/AM3352:如何为 NAND 启用4位 ECC

Guru**** 2562870 points
Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/612245/linux-am3352-how-to-enable-4-bit-ecc-for-nand

器件型号:AM3352

工具/软件:Linux

您好!

我在具有 Cypress NAND 闪存的定制板上使用 AM3352 (S34ML01G200TF100)。 如何启用 NAND ECC 进行引导(4位)? 抱歉、如果这是一个新问题、但我不熟悉 ECC 功能。

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这适用于 Linux 吗?

    Steve K.

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

    是的、这适用于 Linux

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    引导 ROM 仅支持用于引导的8位或16位 ECC。 u-boot 和 Linux 都支持8位(BCH8)或16位(BCH16)。 我注意到、在器件的数据表中、它提到了4位、但我们查看了在电路板上使用的 NAND、它们提到了4位、但我们实际上对它们进行了8位(2k 页)或16位(4K 页)编程。

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

    Steve、

    感谢后续行动。 对于具有4位 ECC NAND 的开发板、这似乎很奇怪、但我们将其编程为8位、并且工作正常。 您是否知道 ECC 功能是否已通过此设置测试? 您指的是什么特定的电路板? 我检查了、AM335x EVM 有一个 NAND 的原理图占位符、但标记为 DNI、没有器件型号。 AM335x 入门套件没有 NAND、BBB 有 eMMC 管理的 NAND。

    无论如何、我们似乎无法使用4位 ECC NAND、因为我们的引导 ROM 不支持它。

    下面的 wiki 似乎确认了您的说法、即我们的引导 ROM 不支持4位 ECC。

    谢谢、

    -Brad

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

    Brad、实际上唯一的限制是 ROM 代码在启动期间预期的备用区域格式化(TRM 的"初始化"一章对此进行了概述)、它支持 Steve 提到的 BCH8或16。  在 AM335x GP EVM 上、GP 子卡上有一个 NAND (主板上有一个用于未组装的另一个 NAND 的位置)。  GP 子卡 NAND 至少要求4位 ECC、但是为了满足 ROM 要求、备件区域应该被格式化为 ECC BCH8

    此致、

    James

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

    谢谢 James。

    如果我可以在初始 ROM 引导期间使用 Out ECC、但希望在加载内核和文件系统期间从 u-boot 中启用 ECC、如何启用它?

    谢谢

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

    您必须使用 ECC 进行引导、引导 ROM 仅了解 BCH8和 BCH16。

    在 u-boot 源码中、查看 include/configs/AM335x_evm.h 这就是 NAND 信息的设置位置。 构建 u-boot 时、MLO 和 u-boot 都将使用所选的 ECC 算法。 当您使用 u-boot 刷写 NAND 时、它将使用.h 文件中选择的 ECC 进行刷写。 此 NAND 应适用于 AM335x。

    Steve K.

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

    谢谢 Steve。

    因此、我一直在详细阅读 TRM 以及其他阅读、我相信我已经掌握了这一点、至少从硬件功能以及我们的 ROM 代码如何处理这些问题。 我同意对于我们的特定器件、我们应该可以使用 BCH 8位 ECC。

    我们的器件是 S34ML01G200TF100。 从它的数据表中...

    • x8、1Gb:2048+64页大小、每页64字节备用区域。 这是足够的备用区域、用于保存每个页面中所有四个512字节扇区的 ECC 代码
    • 符合 ONFI 1.0标准、因此它将提供 ONFI 参数页面以获取页面大小、块大小等

    如果我们希望 ROM 代码使用 ECC、我们只需确保 SYSBOOT[9]被拉低

    这就产生了一个问题、即 ROM 加载 MLO 后如何在软件中启用 ECC。 我查看了您提到的 am335x_evm.h 文件、感谢您的分享。 我不知道所有设置的含义是什么、但对我来说、它们看起来对于我们的 NAND 器件来说是合理的。

    不过、这是一个愚蠢的问题。 在 am335x_evm.h 文件中、所有 NAND 设置看起来都依赖于要设置的预处理器符号 CONFIG_NAND。 我没有在 ti_am335x_common.h 文件中看到它被设置。 我不是很熟悉自定义 u-boot、我通常只需从顶级 SDK makefile 构建它。 那么、我要在哪里定义 CONFIG_NAND? 我应该在 make 命令行上将其设置为-d 定义吗? 我应该在头文件中定义它吗? 只是在寻找这样的东西通常被定义的地方,所以我不做任何愚蠢的事情。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在顶级 u-boot 文件夹中执行了 grep 操作、并在名为 u-boot.cfg 的文件中找到 CONFIG_NAND。 我在这里看到一些其他与 ECC 相关的设置。 我是否直接编辑此文件、然后重新生成 u-boot? 不确定此文件是否由其他文件生成。

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    生成该文件。 您需要修改 include/configs/AM335x_EVM.h

    CONFIG_NAND 在 CONFIGS/AM335x_EVM_defconfig 中进行设置。 编辑此文件、您会看到
    CONFIG_SYS_Extra 选项="与非"

    这就是 CONFIG_NAND 的设置方式。

    Steve K.