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.

[参考译文] AM3351:引导加载程序无法从 MMC0加载

Guru**** 2559110 points
Other Parts Discussed in Thread: AM3351

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597393/am3351-bootloader-fails-to-load-from-mmc0

器件型号:AM3351

我使用的是 AM3351处理器、并通过 TI SDK 3.00从 micro SD 卡引导。 在某些启动情况下(可能是10次尝试中的1次)、处理器无法检测到我的 SD 卡(MMC0)上的引导加载程序、并返回 UART 输出 CCCCCCCC。 这个问题可以通过另一个电源周期快速解决、但这个解决方案对于我们的最终应用来说会有问题。

通过观察示波器上的 MMC0 CMD 信号和 CLK 线、可以看出从低速数据通信转换到高速数据通信时、它似乎会失败。 在良好和不良启动情况下、我看到命令 CMD4或 SET_DSR 后跟字节04、04、00、00。 这是过渡到高速之前的最后一条命令。 一旦高速通信开始、在无法启动的情况下、CMD 线路变为高电平并保持高电平。

是否有人在尝试从 SD 卡运行引导加载程序时遇到过类似的问题? 我知道、在许多情况下、MLO 和 u-boot.img 文件存储在板载存储器中。 如果您有任何建议、请告诉我。

此致、

Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是不寻常的。 这可能是由电路板相关问题或 SD 卡问题引起的。 您是否尝试过不同的 SD 卡? 这是单个电路板、还是您在多个电路板上看到了相同的问题? 您能否发布原理图的 MMC0部分?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    早上好、

    感谢您对项目的快速响应和帮助。 在过去的~5个月里、我们一直在解决这个问题、在此过程中、我们尝试了许多不同的 SD 卡制造商、例如 Lexar 和多个电路板。 我复制了下面原理图的 micro SD 卡部分以供参考。 在 MMC0上使用 u-boot 引导加载程序是否存在任何类似的问题? 查看原理图后有什么建议?

    此致、

    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    除了 MMC_CLK 线路上的上拉电阻外、这似乎正常。 我担心的是这个2x4接头。 它如何放置在布局上? 如果 MMC 信号布线中有残桩、则可能会导致问题。 此外、MMC_CLK 线路上是否有一个靠近处理器的串行电阻器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    上拉电阻器用于在设置外设之前的初始条件下提供稳定性。 该图稿如下所示:

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

    问题似乎出在 Sitara 的初始化期间。 在初始化序列的某个点、时钟从大约68Khz 变为大约6MHz。 发生这种情况时、数据将继续在 CMD 行上(成功引导)、或者终止(失败引导)。 使用逻辑分析仪和示波器捕获信号。 信号本身看起来正常。 请参阅初始化失败的图片:

    成功初始化如下所示:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MMC 布线的长度、尤其是 CLK 和 CMD? 您在哪里捕获示波器截图? 它应该位于处理器侧、以查看是否有任何反射。 您是否曾尝试在靠近处理器的 CLK 线路上放置一个22 Ω 串行电阻器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在2x4接头上捕获信号。 所有信号的长度都只有3英寸以上、请参阅图稿。 我怀疑、如果出现任何时钟问题、串扰问题或其他与艺术品相关的问题、即使接口成功初始化、它也会持续出现问题、无法可靠地工作。 一旦初始化并全速运行、它就可以正常工作。 此故障的问题在于、一旦发生故障、恢复的唯一方法是重启电源或进行复位。 我一直在使用 SYSBOOT[4:0]为10111b 的引导序列。 这将首先尝试从 MMC0接口、SPI0接口、UART0接口和 USB0接口引导。 我监视 UART 接口的调试情况、我知道如果我看到 UART 端口输出的'C、则会失败。 引导结束并完成。 我开始对引导顺序进行实验、发现如果我选择 SYSBOOT[4:0]为11010b、引导过程不会失败。 该引导顺序从我们的系统不支持的 XIP 接口开始。 我已验证内部引导代码对该接口的初始化不会导致系统出现问题、我希望它失败、并尝试列表中的下一个外设、即 UART0。 由于系统无法从此处引导、因此也会失败、并选择下一个外设 SPI0。 同样、无法从 SPI0引导、因此它失败、并且选择了 MMC0。 现在90%以上从 MMC0成功引导。 但是、我确实会看到 MMC 接口在这个序列中偶尔出现故障。 发生这种情况时、启动序列重新开始、其他外设再次失败、下一次 MMC0启动成功。 我没有看到序列在另一个引导序列中重试。 我怀疑由于我们的 USB0接口、也就是该序列中的最后一个外设、连接到了一个集线器芯片上、而 USB 引导接口在这些条件下挂起、因此在这些条件下不会重试引导序列。 虽然此解决方案看起来可以解决启动可靠性问题、但它并不能解释为什么另一个序列存在如此多的问题或任何此类问题。 我想知道 SD 卡内部是否有初始化时间要求、有时也会受到违反。 如我之前的帖子中所示、我发现 MMC 引导失败的地方、但我还不知道原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    James、让我们回到 Biser 提出的问题:MMC_CLK 信号上是否有串联电阻器?
    我从您提供的示波器照片中看到时钟信号中有一个轻微的阶梯。 这可能会导致您看到的问题、因为 MMC 时钟输出也会在 IO 处环回并在读取数据时用作时钟输入。 如果时钟信号中的轻微悬挂装置接近电压阈值、则可以将其解释为额外的时钟边沿、从而导致读取的数据出错。 由于示波器截图位于标头、因此它不代表处理器看到的内容、但表示信号上存在反射。
    由于时钟信号上的悬挂装置是由布线上的反射引起的、因此我们建议将一个串联电阻靠近处理器放置、以使反射远离时钟信号的电压阈值。

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

    我们在处理器上插入了一个与 MMC 时钟串联的22欧姆电阻器。 从处理器引脚到电阻器的信号大约为3mm。 我将 SYSBOOT[4:0]设置为原始的10111b、这意味着它将首先尝试 MMC 器件。 我启动了电路100次。 有25个失败的引导序列、其中处理器挂起。 引导挂起部分通过引导顺序时出现两个新的故障。 我以前没见过这种情况。 实际上、如果时钟或串扰问题或其他物理问题出现、我会期望发生这种情况。 到目前、我还没有看到任何这类问题。 然后移除电阻器。 此处的示波器截图显示了在时钟从大约60kHz 切换到大约6MHz 后所走线的每一端的时钟信号。 黄色迹线位于电阻所在的处理器上、绿色迹线位于 MMC 卡的接头块上。 示波器是 Agilent 16534A 1G 带宽示波器、具有500MHz 带宽探针。