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.

[参考译文] DM385:无法从 NAND 引导

Guru**** 2575385 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/628187/dm385-unable-to-boot-from-nand

器件型号:DM385

您好!

我们正在尝试获取基于从 nand 引导的 DM385的定制板。 我们使用以下 NAND: MT29F2G08ABAEAH4-IT

我们的引导模式如下:01000010011b、我还通过读取 CONTRAL_STATUS 寄存器并验证我们的引导模式位来验证这一点。 我们从引导模式开始的引导顺序应为 NAND -> NANDI2C->MMC->UART。

我能够从 MMC 和 UART 引导、但不能从 NAND 引导。

之前、我们的设计使用具有128位 OOB 数据的不同 NAND、由于 TI ROM 代码选择了 BCH16、因此无法启动。 有关该问题的主题如下:

我们使用的新芯片具有64字节的 OOB 数据、导致 TI ROM 代码使用 BCH8进行 ECC。 我们实际上可以生成 BCH8 ECC、因此我们怀疑我们的引导过程应该起作用、但实际上不能起作用。

我们现在使用的芯片 与我们的 nSketch 开发板完全相同、它能够从 NAND 中顺利启动。  

我想验证我在两个器件上都有相同的代码、因此我决定从工作开发板启动 u-boot.min 并将其放在定制板上。 这些是我采取的步骤

在正确引导的开发板上、我输入了命令"Cat /dev/mtd0 >/mnt/mmc/working-uboot.bin "、这会将第一个0x80000字节的数据复制到 SD 卡上的文件中。

2.我使用 SD 卡启动了定制板、然后使用以下命令将 working-uboot.bin 刷写到定制板中:  

mw.b 0x81000000 0xFF 0x00080000
MMC 重新扫描0;fatload MMC 0 0x81000000 working-uboot.bin
纳瓦级硬件2.
NAND 擦除0x00000000 0x80000;nand write.I 0x81000000 0x0 0x80000

3.为了验证所有匹配项(包括 OOB 数据)是否都匹配,我使用以下命令再次转储两个 nandump  -f /mnt/mmc/nanddump.bin -o /dev/mtd0

通过比较每个器件的 nanddump.bin 文件、我能够验证每个 NAND 的前0x80000字节是否完全相同、包括 OOB 数据。

遗憾的是、定制板仍然无法启动。 由于代码应该完全相同、因此我认为这可能是硬件问题。 硬件工程师和我探测了几个引脚、以查看我们是否可以发现任何问题。

我们能够在重启时看到 NAND CE_引脚变为低电平。 我相信 DM385正试图访问 NAND。 D0引脚最初看起来短暂为低电平、然后变为高电平、然后进入中间电压、然后再次短暂地升高、直到它返回到接地并保持在那里。 在探测更多线路之前、我们已经没有时间了、但明天会尝试更多线路。

我对等待信号感到好奇。 我们的引导模式配置为忽略等待信号、我们的开发套件配置方式相同。 NAND 的数据表显示、主机必须等待 R/B#(等待)信号变为高电平、然后才能向目标发出复位(0xFF)。 我想知道 DM385是否在 NAND 准备就绪之前尝试通信。 开发板上的 NAND 可能在 DM385之前加电、并且有足够的时间准备就绪、并且我们的也很快就会启动。

我有以下问题:

1. ROM 引导代码是否在进行任何其它访问之前先向 NAND 发出复位命令(0xFF)? 如果是、我将在明天的数据线上查找0xFF。

2.等待线是否导致了我们的问题?

3.我的 Nand 转储过程是否看起来应该正常工作? 或者我是否错过了任何步骤。 在引导 NAND 之前、我是否需要对其执行任何其他操作?

4.我们是否应该寻找任何其他东西来诊断 NAND 为什么不是从引导的?  

谢谢!

 

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

    您好 Mikael、

    此查询已转发给相应的团队。

    此致、
    普拉什兰特
    Pathpartner Technology Pvt. Ltd.

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

    只是快速更新。

    我们能够对来自 DM385的 BTMODE_15 (焊球 P2)、CE_和来自 NAND 的 R/B#信号进行示波。 我希望验证 DM385中的 CE_是否发生在 NAND 中的 R/B+信号为高电平之前、以证明我们试图过早访问 NAND、但情况似乎并非如此。

    在以下图像中:

    黄色-来自 NAND 的 R/B#。 上电或复位时、该信号短暂为低电平、然后变为高电平并保持高电平。 它在处理器的第一个 CE_之前变为高电平。

    品红色-来自处理器的 CE_。 我假设这必须是尝试访问(和复位) NAND 芯片的 TI ROM 启动代码。 请注意、当 R/B#为高电平时会发生这种情况、表示芯片已准备就绪。

    绿色- BTMODE_15在我们的原理图中、使用10k 电阻器将其拉至接地。 这是为了告诉处理器、在引导期间、不要使用来自 NAND 的 R/B#等待信号。

    我对引导应该如何发生的理解是、发送到 NAND 的第一个内容是复位命令(0xFF)。 当 CE_为低电平时应发生这种情况。 然后、NAND 应该执行一个内部复位、在此期间、R/B#拉低大约1ms (根据 NAND 的数据表)。 根据我可以通过示波器得出的结果、NAND 永远不会将 R/B+拉低。 对我来说、这是一个很好的指标、表明我们遇到的问题与此相关。

    我们将通过探针 D0-D7来查看是否可以捕获发送到 NAND 的复位命令(0xFF)。 我将在得到这些照片后立即发布这些照片。

    我们发现的另一个奇怪现象是、BTMODE_15似乎从接地端变为1V (持续很短或很长的时间)、然后恰好在 DM385上的 CE_变为低电平之前返回。 我不确定这是否是问题、或者它是否与我们的问题有关、但我想指出这一点。

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

    好的、我们做了一个小发现。


    我们的硬件工程师和我忽略了工作开发板上引导模式位的第13位和第14位。 我们认为它们被设置为10b、这是地址/数据多路复用、但它们实际上是00b (非多路复用)。 我们更改了电路板以匹配、现在我们确实得到了差异、但没有引导。

    现在、终端输出 C 约2秒、然后停止。 我们板上的 LED 开始闪烁(在它们稳定之前)、然后最终停止闪烁。 这使我认为正在执行一些代码。

    我们将逻辑分析仪放置在引脚 D0-D6 (跳过 D7、因为我们需要 CE_的最后一个通道)和 CE_上。 从 CE_信号的判断来看、DM385现在似乎正在尝试大量访问 NAND。 但是、数据线路上仍然没有显示任何转换。  下面是一些屏幕截图。 底部信号是 CE_信号。

    有什么想法、为什么我们看不到 NAND 数据线上的任何活动?

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

    我还应该注意的是、我们已经看到 NAND 数据线在工作。 我们可以使用从 NAND 加载内核和文件系统的 u-boot 从 SD 卡引导。 在这种情况下、我们确实看到 NAND 正常运行。 引导时、NAND 数据线似乎没有任何活动。

    另一个注意事项是、我们可以看到 DM385也在示波器上对引导模式电阻器进行采样的位置。 因此、这似乎是正确的。

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

    您这边有任何更新吗? 我们确实需要在这个问题上提供一些帮助。

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

    是否有更新?

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

    您好、Mikael、

    由于您提到您在 EVM 和电路板上尝试了相同的图像、因此我有几个实验可以尝试。

    • 使用 PRE_built u-boot&尝试从 NAND 中"删除并擦除"以擦除整个 NAND。  
    • 使用您在 EVM 软件版本中收到的 NAND 预构建的映像。
    • 从 u-boot 本身闪存 MLO/u-boot。

    我怀疑 RBL 和 uboot/内核的 ECC 机制(不是 uboot.bin -这可能是您当前运行的软件中的不匹配)配置不匹配。  

    谢谢

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

    您好 Mikael、

        是否可以共享原理图? 如果没有、请分享原理图片段。

    此外、您能否执行以下操作。

    1) 1) BTMODE15引脚切换看起来可疑。 在 nsketch 开发板上检查这一点。

    2) 2)确保 nand 映像正确与否、您能否使用 nand 命令将复制的映像(/mnt/mmc/working-uboot.bin)刷新回 nsketch NAND 并进行验证。

    在复制之前,请确保删除特定分区。

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

    首先、我想我们发现了为什么在我之前的帖子中没有看到 NAND 数据活动。 我们的其中一个启动电阻器焊接不良、一旦它被固定、我们就发现我们没有看到 NAND 数据活动。 不仅如此、我们不再在系统锁定之前在系统上打印少数 CCCC、现在似乎直接从 NAND 引导。 遗憾的是、没有代码正在运行、但我们正在取得进展。

    我已经尝试过您的指示。 我使用 SD 卡启动了器件、然后输入以下说明:

    DM385_MV2#n 清理

    NAND 擦除:器件0整个芯片
    警告:擦除选项将擦除所有工厂设置的坏块!
    没有可靠的方法来恢复它们。
    如果您使用此命令进行测试、请仅将其用于测试目的
    您一定要做什么!

    真正擦除该 NAND 闪存?
    在0xffe0000擦除-- 100%完成。
    好的
    DM385_MV2#nandecc 硬件2.
    已选择 HW ECC BCH8
    DM385_MV2#MMC 重新扫描0;fatload MMC 0 0x81000000 u-boot.min.nand;
    正在读取 u-boot.min.nand

    92408字节读取
    DM385_MV2#n 和擦除0x0 0x20000;n 和 WRITE.I 0x81000000 0x0 0x20000

    NAND 擦除:器件0偏移量0x0、大小0x20000
    在0x0时擦除-- 100%完成。
    好的

    NAND 写入:器件0偏移量0x0、大小0x20000
    131072字节被写入:好的
    DM385_MV2#

    不幸的是,这没有任何变化。 当我对器件进行循环通电时、我不会获得任何输出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嘿、我取得了一些成功!

    我在 MLO 文件中完成了从引导 SD 卡到 u-boot.min.nn 位置的编程、通常会执行此操作、现在它将从 NAND 引导。 遗憾的是、它尝试从 SD 卡加载第二级 u-boot、而不是从 NAND 中加载。

    你们中的任何一方是否知道 MLO 文件为什么工作、但 u-boot.min.nand 不工作? 此外、我还可以使用 MLO、是否有方法将其配置为从 NAND 中加载 uboot?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Mikael、

    如何构建 uboot.min.nand? 基本上、使 MLO 从 NAND 中加载将产生 uboot.min.nand

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

    基本上、我确保 Rules.make 设置为 nand 作为 binary_mode、然后执行"make sysall"。 完成后、我可以在 tftp/DM38X/nand/文件夹中找到 uboot.min.nand。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Mikael、

    您是否按照建议尝试了预构建的图像? 在尝试128字节 OOB 时,是否对 NAND 的 uboot 代码进行了本地更改?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dwarakesh、

    是的、我尝试了开发板附带的预构建映像、但它们不起作用。 我刚刚尝试了预构建的 MLO、但它也不起作用。

    我使用的 MLO 是在几个月前构建的、当时我们第一次进行电路板上电。 我认为我们唯一改变的是 DDR RAM 的 RAM 时序。

    我将尝试将我的代码恢复到该早期状态、看看我是否可以重新创建正常工作的 MLO。 我假设如果我可以使其正常工作、那么该编译中的 uboot.min.nand 也会正常工作。 您的假设是这样吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Mikael、

    是的。 RAM 时序发生变化、您需要确保它是 uboot.min.n,并且它是 MLO 的一部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dwarakesh、

    我相信它现在正在工作。 这可能有两个问题、但我尚未跟踪确切的原因。 我返回到原始 MLO 文件来自的旧版本代码。 我还注意到、Linux Devkit 和 uboot 文件夹中的一些库文件不再是与 SDK 附带的库文件相比的二进制文件、因此我也重新复制了它们。 这两项更改使其生效。

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

    很高兴听到这个消息。 我坚信恢复使用旧版本会有所帮助。 无论如何、祝您好运。