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.

[参考译文] AM3354:有时无法从引导跳转到 Linux

Guru**** 2482225 points
Other Parts Discussed in Thread: AM3354

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1438017/am3354-sometimes-can-not-jump-from-boot-to-linux

器件型号:AM3354

工具与软件:

尊敬的先生/女士:

我在产品中使用 AM3354来运行 Linux 操作系统。 电路板是我们使用分立式组件设计的。

我们已经运行了2轮原型构建、每轮30块、这两轮开发的电路板都可以正常运行 Linux OS +应用程序。

现在我们正处于小批量生产阶段、但其中的一部分(30个中有5个)存在问题:NOR 闪存上的引导加载程序可以很好地从 NAND 闪存读取映像文件并加载到 DDR3、映像文件的校验和计算也可以通过、但是、当从引导到 Linux 时、Linux 启动失败。 "Jump to Linux"(跳转至 Linux)后没有显示任何信息。 此问题偶尔发生、可能是 Linux 启动在10次开机/关机后3次失败。

问: 您是否可以为电子端提供一份调查此问题的清单、让我了解哪个部件导致了此问题? 我可以做些什么来检查或确保此问题是否在电子端?

谢谢你。

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

    您好、Wenhai:

    Unknown 说:
    "跳转至 Linux"后没有信息输出。

    什么是"跳转到 Linux"? 是"正在启动内核..."消息吗?

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

    您好、Bin、

    是的、您是对的、它是起始内核。 你可以看到下面的部分日志,当问题发生时,它停止在"[2976]  Linux.c : 26 跳到 Linux"。

    ***

    [6] main.c : 127引导加载程序1.6.2.0版
    O2HOST_synchro
    [2233 ] main.c : 145启动 BootLdr_1.6.2.0
    [2242 ] bsp_eeprom.c:45在0x0000处读取512个字节
    [2306 ] main.c : 155正在加载树
    [2312 ] bsp_nand.c : 1153从0x00760000读取64257字节
    [2327] bsp_nand.c : 1233完成读取
    [2333 ] main.c : 161正在加载 zImage
    [2339] bsp_nand.c : 1153从0x00160000读取41904字节
    [2844 ] bsp_nand.c : 1233完成读取
    [2895 ] bsp_eeprom.c:45在0x0200处读取512个字节
    [2959] main.c : 174 booting Linux
    [2965 ] Linux.c : 20禁用高速缓存
    [2971 ] Linux.c : 24关闭 MMU
    [2976] Linux.c:26跳转至 Linux
    [ 0.000000]在物理 CPU 上引导 Linux 0x0
    [ 0.000000] Linux 版本5.10.166 (OE-USER@OE-HOST)(ARM-OE-LINUX-gnueabi-gcc (Sourcery CodeBench 12.0.17) 9.5.0、GNU ld (Sourcery CodeBench 12.0.17) 2.34.0.20200910)#1 SMP 抢占 Thu 5月16日07:11:14 UTC 2024
    [ 0.000000] CPU:ARMv7处理器[413fc082]修订版2 (ARMv7)、cr=10c5387d
    [ 0.000000] CPU:PIPT/VIPT 非别名数据高速缓存、VIPT 别名指令高速缓存

    ......

    ***

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

    您好、Wenhai:

    您可以看到下面日志的一部分,当问题发生时,它将停止在"[2976]  linux.c :26 跳到 Linux"。

    似乎内核没有启动。 您的电路板是否具有 JTAG 访问权限? 您可能需要连接调试器、以查看代码卡住的位置。

    由于只有少量板存在问题、因此您可能需要检查电路板组件、电源轨的电压以及 DDR 配置等

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

    您好、Bin、

    我们正在尝试使用 JTAG 调试电路板、以查看它卡住了。

    对于电源轨的电压、我们已进行检查、但未发现问题。

    上电顺序是否会导致此问题? 我们使用的 PMIC 是 TPS65910A3。

    对于 DDR 配置、您是否还需要检查其他项目。

    非常感谢。

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

    您好、Bin、

    我发现一个有趣的情况:当内核无法正常启动时、如果我通过下拉 AM3354的 PWRONRSTn 引脚重置电路板、内核将一直不启动。 甚至我试了20次。 当 内核 可以 正常启动时、  如果我通过 PWRONRSTn 复位电路板、内核将在每次(我尝试了20次)正常启动。 因此、在不关闭电源/在电路板上时、启动正常/异常的状态将是稳定的。

     通过下拉 PWRONRSTn 引脚进行复位后、PMIC 的电源轨不会受到影响、但电源轨断电/上电时将重新应用。 使用关机/开机操作时、内核启动或不启动是 偶尔发生的。

    我已经检查了 PMIC 的加电顺序、但找不到这一点。 你有什么建议吗?

    谢谢你。

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

    您好、Wenhai:

    [报价 userid="480639" url="~/support/processors-group/processors/f/processors-forum/1438017/am3354-sometimes-can-not-jump-from-boot-to-linux/5515734 #5510734"]如果我通过下拉 AM3354的 PWRONRSTn 引脚复位电路板、内核将不会继续启动。 甚至我试了20次。 [报价]

    在这种情况下、引导加载程序始终可以重新启动、但内核无法启动?

    我不知道还需要检查什么。

    您是否遵循了 TRM 第8.1.4.3.6节"内部 RTC LDO"中有关 RTC 的指导? 我看到 TRM 表8-25"复位源"显示 PWRONRSTn 引脚不会复位 RTC。

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

    您好、Bin、

    "在这种情况下、引导加载程序始终可以重新启动、但内核无法启动?"

    是的、如果此循环上电时内核正常启动、那么如果我在没有断电的情况下复位电路板、引导加载程序和内核每次都正常工作;

    如果此下电上电周期内核无法启动、那么如果我在没有断电的情况下复位电路板、引导加载程序可以正常重新启动、但内核每次都无法启动。  

     在我的设计中、PWRONRSTn 上的复位也应用于 RTCPWRONRSTn 、PWRONRSTn 使用3V3 上拉、RTCPWRONRSTn 使用1.8V 上拉、执行复位操作时、两者都下拉至接地。

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

    您好、Wenhai:

    感谢您的澄清。

    除了连接 JTAG 调试器来查看执行进度之外、我没有其他任何建议。

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

    您好、Bin、

    非常感谢。 如果有更新、我将执行此操作并向您提供反馈。

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

    您好、Bin、

    最终我们解决了这个问题。

    这是由于未遵循  TRM 第8.1.4.3.6节"内部 RTC LDO"而导致的。 我们将 CAP_VDD_RTC 连接到1uF 去耦电容器接地、但 RTC_KALDO_ENn 连接到1.8V 而不是接地、这是错误的。 在我们的软件应用程序中、我们使用外部 RTC 芯片而不是内部 RTC、因此我们在开发过程中没有发现该问题。 但是、在 Linux 的初始化中启用了内部 RTC、有时 Linux 可能会检测到该问题而不会启动。 我想跟你确认一下:

    1、为什么在我的故障配置连接中, Linux 在大多数情况下仍能正常启动,您有进一步的信息吗?

    2.如您在8.1.4.3.6中所知、需要满足5个条件才能"使用 RTC 功能和仅 RTC 模式"、我不想修改 PCB 来满足条件 d 和 e、而且在我的软件应用程序中、也可以保留使用外部 RTC。 如果仅遵循 a、b 和 c、是否会有一些问题阻止我的器件正常使用?

    •a. RTC_KALDO_ENn 接地(BOM 更改后开会)
    •b. CAP_VDD_RTC 连接到1uF 去耦电容器并接地(满足)
    •c. RTC_PWRONRSTn 连接到1.8V RTC 上电复位(满足)
    •d. PMIC_POWER_EN 连接到 PMIC 的电源输入(PMIC_POWER_EN 在电路板上悬空、未连接)
    •EXT_WAKEUP0连接到一个唤醒源(EXT_WAKEUP 通过22R 电阻器接地)。

    谢谢你。

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

    您好、Wenhai:

    很高兴听到您能够找出您的系统出了问题并使其正常工作。

    关于继续讨论、请注意、Bin 本周(美国假期)不在办公室、下周将回来。 请在此处留出一些额外的时间进行回复。

    此致、Andreas

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

    您好、Wenhai:

    很高兴听到您找到了根本原因。

    我不是回答您所有 RTC 设计问题的 RTC 专家。 但是、您能否尝试应用以下内核补丁以查看 Linux 引导问题是否得到解决? 补丁会禁用内核中的内部 RTC 模块。

    diff --git a/arch/arm/boot/dts/am33xx-l4.dtsi b/arch/arm/boot/dts/am33xx-l4.dtsi
    index b2b44b9b5239..06cb455b679f 100644
    --- a/arch/arm/boot/dts/am33xx-l4.dtsi
    +++ b/arch/arm/boot/dts/am33xx-l4.dtsi
    @@ -438,6 +438,7 @@ target-module@3e000 {                       /* 0x44e3e000, ap 35 60.0 */
                            #address-cells = <1>;
                            #size-cells = <1>;
                            ranges = <0x0 0x3e000 0x1000>;
    +                       status = "disabled";
     
                            rtc: rtc@0 {
                                    compatible = "ti,am3352-rtc", "ti,da830-rtc";

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

    您好、Bin、

    是的、如果我们使用此补丁、它也能正常工作。

    感谢您的帮助!

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

    您好、Wenhai:

    感谢您的更新。