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.

[参考译文] AM3358-EP:OMAP-ELM:不可纠正的 ECC 错误

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1213410/am3358-ep-omap-elm-uncorrectable-ecc-errors

器件型号:AM3358-EP

处理器: AM335x8BGCZA80EP
NAND : MT29F8G08ABACAH4-IT:C TR
SDK:ti-processor-sdk-linux-am335x-evm-08.02.00.24
SYSBOOT[9]:0,我尝试将其设置为1,但存在问题。

在刷写 uboot 和 spl 后、在 SPL 标题打印后引导时、系统会显示 "OMAP-elm:不可纠正的 ECC 错误很多次。 然后引导 uboot 和 Linux。 当我尝试使用 BCH8时、串行终端只会 连续输出'CCCCCCCC'。 请提供帮助。

我在"uboot flash.txt 的步骤"中提到了我的 uboot 命令。 附加文件为
err.txt:启动后出现错误
config_info:从/uboot 目录/include/configs/am335x_myboard.h 中选择 nand config
defconfig:来自/uboot 目录/configs/myBoard_defconfig.h 的 NAND 配置

e2e.ti.com/.../config-info.txte2e.ti.com/.../1212.defconfig.txte2e.ti.com/.../4747.err.txte2e.ti.com/.../steps-for-uboot-flash.txte2e.ti.com/.../NAND_5F00_datasheet.pdf

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

    您好!
    1.我们知道 NAND 器件是否有内置的 ECC 吗?
    2.什么是"nand info" cmd @u-boot 的输出
    3.如果你能够启动内核,那么输出"dmesg | grep -i nand"是什么?

    AM335x TRM <26.1.8.4 NAND>是 ROM 支持 NAND ECC 的一个很好的参考。
    AM335x SoC 上的 ECC 支持使用 GPMC 和 ELM 硬件。
    此外,使用 SYSBOOT[9]可以完全关闭由 ROM 执行的 ECC 计算。 这在与具有内置 ECC 引擎的 NAND 器件连接时特别有用。

    在 u-boot/内核中、有一个关于 BCH 方案与 OOB 大小的引用
    www.kernel.org/.../gpmc-nand.txt

    此致!
    -hong

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

    您好、Hong:

    谢谢你的答复。

    1.是的,它内置 ECC。 但我无法了解它是否默认启用、或者如何禁用它。 我尝试用 SYSBOOT[9]作为0和1都没有成功。 是相应的数据表

    /cfs-file/__key/communityserver-discussions-components-files/791/NAND_5F00_datasheet.pdf

    2.  

    =>nand 信息

    器件0:nand0、扇区大小256 KiB
    页面大小4096 b.
    OOB 大小224 b.
    擦除大小262144 b
    子页大小1024 b
    选项0x4000400c
    BBT 选项0x00000000

    3.

    dmesg | grep -i nand
    [ 0.000000]内核命令行:console=ttyO0,115200n8 root=ubi0:rootfs rw ubi.mtd=nand.file-system,1024 noinitrd rootfsttype=ubifs rootwait=1 ip=none
    [ 2.766566] omap2-n 和8000000.nand:用于消费类 rb 的 GPIO 查找
    [ 2.766582] omap2-n 和8000000.nand:使用器件树进行 GPIO 查找
    [ 2.7666636] of_get_named_gpiod_flags:已解析节点'/ocp/gpmc@50000000/n 和@0、0[0]'的'rb-gpios'属性-状态(0)
    [ 2.766838] nand:device found、Manufacturer ID:0x2C、Chip ID:0xd3
    [2.773323] nand:Micron MT29F8G08ABACAH4.
    [2.777355] nand : 1024 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 224
    [ 2.785152] omap2-n 和80000.nand:使用预取轮询 xfer 模式
    [ 2.796649]在 MTD 设备 OMAP2-nand.0上找到10个固定分区
    [ 2.803667]在"omap2-nand.0"上创建10个 MTD 分区:
    [ 2.809113] 0x000000000000-0x000000040000:"NAN.SPL"
    [2.814725] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@50000000/nand@0、0/partition@0[0]"的'WP-GPIOs'属性
    [2.814749] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@50000000/n 和@0、0/partition@0[0]"
    [ 2.816072] 0x000000040000-0x000000080000:"NAN.SPL.Backup1"
    [2.822362] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@50000000/nand@0、0/partition@1[0]的'WP-GPIOs'属性
    [2.822387] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@5000000000/n 和@0、0/分区@1[0]"
    [ 2.823530] 0x000000080000-0x0000000c0000:"NAN.SPL.Backup2"
    [ 2.829817] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@5000000000/nand@0、0/partition@2[0]的'WP-GPIOs'属性
    [ 2.829841] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@500000000000/n 和@0、0/分区@2[0]"
    [ 2.830945] 0x0000000c0000-0x000000100000:"NAN.SPL.BACKUP3"
    [2.837139] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@50000000/nand@0、0/partition@3[0]的'WP-GPIOs'属性
    [2.837163] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@50000000/n 和@0、0/分区@3[0]"
    [2.838318] 0x000000100000-0x000000180000:"NAN.u-boot-spl-OS"
    [2.844726] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@5000000000/nand@0、0/partition@4[0]"的'WP-GPIOs'属性
    [ 2.844751] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@5000000000/nand@0、0/partition@4[0]"
    [2.845859] 0x000000180000-0x000000280000:"NAN.u-boot"
    [2.851795] of_get_named_gpiod_flags:无法解析节点/ocp/gpmc@50000000/n 和@0、0/partition@5[0]的'WP-GPIOs'属性
    [2.851820] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@5000000000/nand@0、0/partition@5[0]"
    [ 2.852922] 0x000000280000-0x0000002c0000:"NAN.u-boot-env"
    [2.859174] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@50000000/nand@0、0/partition@6[0]的'WP-GPIOs'属性
    [2.859198] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@50000000/nand@0、0/partition@6[0]"
    [ 2.860305] 0x0000002c0000-0x000000300000:"NAN.u-boot-env.Backup1"
    [2.867114] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@50000000/nand@0、0/partition@7[0]的'WP-GPIOs'属性
    [2.867137] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@50000000/n 和@0、0/partition@7[0]"
    [2.868315] 0x000000300000-0x000000a00000:"NAN.kernel"
    [2.875116] of_get_named_gpiod_flags:无法解析节点"/ocp/gpmc@50000000/n 和@0、0/partition@8[0]的'WP-GPIOs'属性
    [2.875140] of_get_named_gpiod_flags:无法解析节点"wp-gpio"的属性"/ocp/gpmc@5000000000/n 和@0、0/分区@8[0]"
    [ 2.876250] 0x000000a00000-0x000040000000:"NAN.FILE-SYSTEM"
    [ 3.035576] of_get_named_gpiod_flags:不能解析节点'/ocp/gpmc@5000000000/n 和@00/partition@9[0]的'wp-gpios'属性
    [ 3.035599] of_get_named_gpiod_flags:无法解析节点/ocp/gpmc@500的'wp-gpio'属性

    以下是适用于 NAND 的器件树 Linux

    &GPMC{
    状态="可以";
    pinctrl-names ="默认";
    pinctrl-0 =<&GPMC_PINS_DEFAULT>;
    范围=<0 0 0 0x08000000 0x01000000>、/* CS0:NAND */
    < 2 0 0x04000000 0x02000000>、/*其他*/
    < 6 0 0x02000000 0x01000000>; /* 其他*/

    NAND@0、0{
    兼容="ti、omap2-nand";
    REG =<0 0 4>;/*器件 IO 寄存器*/
    rb-GPIO =<&GPMC 0 GPIO_ACTIVE_HIGH>;/* GPMC_wait0*/
    ti、nand-ecc-opt ="bch16";
    ti、elm-id =<&elm>;
    NAND 总线宽度=<8>;
    GPMC、器件宽度=<1>;
    GPMC、SYNC-clk-ps =<0>;
    GPMC、CS-ON-ns =<0>;
    GPMC、cs-rd-off-ns =<40>;
    GPMC、CS-power-off-ns =<40>;
    GPMC、ADV-on-ns =<0>;
    GPMC、ADV-rd-off-ns =<25>;
    GPMC、ADV-power-off-ns =<25>;
    GPMC、WE-ON-ns =<0>;
    GPMC、WE-OFF-ns =<20>;
    GPMC、OE-ON-ns =<3>;
    GPMC、OE-off-ns =<30>;
    GPMC、access-ns =<30>;
    GPMC、第周期 ns =<40>;
    GPMC、电源周期 ns =<40>;
    GPMC、等待引脚=<0>;
    GPMC、总线周转-ns =<0>;
    gpcs、cycle2cycle-delay-ns =<0>;
    GPMC、clk-activation-ns =<0>;
    GPMC、等待监控 ns =<0>;
    gpcs、power-access-ns =<40>;
    GPMC、wr-data-mux-bus-ns =<0>;
    /* MTD 分区表*/
    #address-Cells =<1>;
    #size-cells =<1>;
    分区@0{
    标签="NAND.SPL";
    REG =<0x00000000 0x00040000>;
    };
    分区@1{
    标签="NAN.SPL.Backup1";
    寄存器=<0x00040000 0x00040000>;
    };
    分区@2{
    标签="NAN.SPL.Backup2";
    寄存器=<0x00080000 0x00040000>;
    };
    分区@3{
    标签="NAN.SPL.BACKUP3";
    REG =<0x000c0000 0x00040000>;
    };
    分区@4{
    标签="NAND.u-boot-spl-OS";
    寄存器=<0x00100000 0x00080000>;
    };
    分区@5{
    标签="NAD.u-boot";
    REG =<0x00180000 0x0010000>;
    };
    分区@6 {
    标签="NAD.u-boot-env";
    REG =<0x00280000 0x00040000>;
    };
    分区@7{
    标签="NAD.u-boot-env.Backup1";
    REG =<0x002c0000 0x00040000>;
    };
    分区@8{
    标签="NAND.kernel";
    REG =<0x00300000 0x00700000>;
    };
    分区@9{
    标签="NAND.文件系统";
    REG =<0x00a00000 0x3f600000>;
    };
    };

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

    您好!

    从 NAND 中读取以下数据:

    制造商 ID:0x2C

    读数: D3 90 A6 64

    根据 Micron 在0x90地址发出 NAND_CMD_GET_FEATTS 命令、可提供片上 ECC 的数据。

    我读取它是0。

    当我启用 ECC 时、我读取它为0x08、这是正确的。

    这意味着默认情况下、片上 ECC 未启用。 有人可以查看我先前附加的设置,并检查我是否做的正确吗??

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

    您好!
    如果 NAND 闪存中的片载 ECC 被禁用、SYSBOOT[9]=0。
    我们已经验证过 NAND 闪存的读取、写入。。。。 在电路板上的 u-boot @?
    此致!
    -hong

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

    SYSBOOT[9]被设置为0。

    我不知道如何验证闪存写入、并且 在 u-boot 中没有看到任何与 nand 验证相关的命令。

    我的配置可能有问题。

    下面是我生成的.config 文件的内容。  您能验证我的配置吗?

    e2e.ti.com/.../dotconfig.txt

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

    您好!
    NAND 读取、写入:
    e2e.ti.com/.../4093817
    此致!
    -hong

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

    将 MLO 和 u-boot 写入 nand 闪存后、我得到 OK 的响应。 读取时也没有错误。

    我有一个疑问。 如果写入操作出现问题、ROM 代码将无法引导 SPL、对吧? 但我的错误仅在读取 uboot 时出现。  正在读取内核、dtb、环境和 ubi fs 时没有错误。 将  这些文件写入闪存时使用的是相同的命令。

    我的写作步骤如下:

    => loadb 0x82000000
    ###准备二进制(KERIMIT)下载到0x82000000 (115200 bps)...

    高速缓存:未对齐操作在范围内[82000000、82012ee4]
    ##总大小= 0x00012EE4 = 77540字节
    ## Start Addr = 0x82000000

    =>写入0x82000000 NAN.SPL ${filesize}
    =>写入0x82000000 NAN.SPL.Backup1 ${filesize}
    =>写入0x82000000 NAN.SPL.Backup2 ${filesize}
    =>写入0x82000000 NAN.SPL.BACKUP3 ${FILESIZE}


    => loadb 0x82000000
    ###准备二进制(KERIMIT)下载到0x82000000 (115200 bps)...

    高速缓存:未对齐操作的范围[82000000、8208e81c]
    ##总大小= 0x0008e81c = 583708字节
    ## Start Addr = 0x82000000
    =>并写入0x82000000 NAN.u-boot ${filesize}
    NAND 写入:器件0偏移量0x180000、大小为0x8e81c
    写入的583708字节:确定

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

    您好!
    如果 NAND 闪存中的片载 ECC 被禁用、SYSBOOT[9]=0。
    在您上次的回复中将 SPL/u-boot 刷写到 NAND 后、您可以将完整的 NAND 引导日志作为附件上传吗?
    此致!
    -hong

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

    在闪存期间、我使用以下命令:

    e2e.ti.com/.../flashing_5F00_steps.txt

    重新启动日志后:

    e2e.ti.com/.../5340.boot_5F00_log.txt

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

    您好!
    在刷写 SPL 并将 u-boot 刷写到 NAND 后、我们是否已检查 OOB 区域中 SPL 和 u-boot 的 ECC 是否正确?
    当 SYSBOOT[9]=0时、NAND 闪存中的片上 ECC 被禁用、NAND 引导流程:
    1/. ROM 使用 AM335x SoC ELM 从 NAND 加载 SPL。
    2/. SPL 开始运行后、它会从 NAND 中加载 u-boot、其中 AM335x SoC ELM"应该"被 SPL 用于从 NAND 中加载 u-boot。
    =>如果 ECC 被正确地编程到 NAND 中 u-boot 的 OOB 区域中、正常情况下不会出现"OMAP-ELM:不可纠正的 ECC 错误"。
    此致!
    -hong

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

    如果我的 ECC 错误、如果我运行"nand Read"命令、我将收到同样的错误。 对吧?

    因为我在通过 u-boot 读取或扭曲时没有收到任何错误。

    uBoot 读取为:

    在以下文件中、我找到了此数据 "未知重定位类型"和"在%p 处重定位超出范围"。  这可能与我的问题有关 吗?

    82000ee0: 6e6b6e55 206e776f 6f6c6572 69746163 Unknown relocati.
    82000ef0:74206e6f 20657079 786c6c25 7325000a 在%llx..%s 类型上
    =>
    82000f00: 6552203a 61636f6c 6e6f6974 20746120
    82000f10:69207025 756f2073 666f2074 6e617220 %p 已超出运行范围

    e2e.ti.com/.../uboot_5F00_nand_5F00_data.txt

    UBoot nand RAW 读取为:

    e2e.ti.com/.../uboot_5F00_nand_5F00_raw_5F00_read.txt

    SPL 读取和原始读取为:

    e2e.ti.com/.../spl_5F00_nand_5F00_read_5F00_alongwith_5F00_raw_5F00_read.txt

    这是 OOB 数据:

    e2e.ti.com/.../oob_5F00_data.txt

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

    我的 MTD 列表命令输出如下所示。 其表述为 OOB 可用196字节。 这意味着正在使用196字节或免费使用? BCH16使用210字节、对吗??? 这个输出正常吗?

    => MTD
    器件列表:
    * nand0
    -类型:NAND 闪存
    -块大小:0x40000字节
    -最小 I/O:0x1000字节
    - OOB 大小:224字节
    - OOB 可用:196字节
    - ECC 强度
    
    :16位- ECC 步长:512字节-位翻转阈值: 12 bits
    - 0x0000000000000000-0x000040000000:"nand0"
    
    - 0x0000000000000000 - 0x000000040000:"NAD.SPL"- 0x000000040000 - 0x000000080000:"NAD.0x000000Backup1"
    
    
    
    
    
    
    
    - 0x0000000SPL.0x00000000 - 0x0000000SPL.0x0000000000 - NOD.0x0000000000 - NOD.0x0000000000 - 0x0000.NOD.0000.40000000 - NOD.0000.STU"- 0x0000.NOD.0000.STU"- 0x0000.0000.NOD.0000.NON-STUPIF- 0x0000.0000 - 0x0000.STUPIF000000 - 0x0000.STUPIF- 0x0000.STUPIF- NON.S - 0x0000.0000 - 0x0000.0000 - 0x00000000 - NO.STUPIF000000 -"
    

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

    对此有任何帮助吗??