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/AM5728:QSPI-4引导问题

Guru**** 2540720 points
Other Parts Discussed in Thread: AM5728, BEAGLEBOARD-X15

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633520/linux-am5728-qspi-4-boot-issue

器件型号:AM5728
主题中讨论的其他器件: BeagleBoard-X15PMP

工具/软件:Linux

我们正在开发基于 AM5728 EVM 的产品。  我们正在尝试使 u-boot 从闪存运行。  我们使用 的 ISSI is25lq016连接到处理器的 QSPI-4。

产品从 SD 卡引导、我们使用相同的映像对闪存部件进行编程。

我们可以加载并显示 SPL、但它会在该点停止。  我怀疑我们在闪存中将错误的位置用于主 u-boot 映像。

按照以下位置的说明操作:

http://processors.wiki.ti.com/index.php/Linux_Core_U-Boot_User%27s_Guide#Booting_from_QSPI_from_u-boot

以下过程用于加载闪存部件:

SF 探头

SF 擦除0 0x200000

加载 MMC 0 0x82000000 /boot/MLO

SF 写入0x82000000 0x00000 0x20000

加载 MMC 0 0x82000000 /boot/u-boot.img

SF 写入0x82000000 0x40000 0xBA000

该器件已成功编程、当我们尝试启动时、我们会看到 SPL 开始:

U-Boot SPL 2017.01-00020-g986edbf-Dirty (2017年10月19日- 15:22:08)
DRA752-GP ES2.0
尝试从 SPISF 引导:Macronix/ISSI 校验 SR 四位
SF:Macronix/ISSI SR 四位置位
**设备 MMC 0 **错误
使用默认环境

但没有。

以下是编程序列的快照:

=> SF 探头
SF:Macronix/ISSI 校验 SR 四位
SF:Macronix/ISSI SR 四位置位
SF:检测到 is25lq016、页面大小为256字节、擦除大小为64 KiB、总共2个 MIB、映射为5c000000
=> SF 擦除0 0x200000
SF:2097152字节@ 0x0已擦除:确定
=>加载 MMC 0 0x82000000 /boot/MLO
105736字节在28ms 内读取(3.6 MIB/s)
=> SF 写入0x82000000 0x00000 0x20
器件0偏移量0x0、大小0x20
SF:32字节@ 0x0写入:正常
=>加载 MMC 0 0x82000000 /boot/u-boot.img
751784字节在62ms 内读取(11.6 MiB/s)
=> SF 写入0x82000000 0x40000 0xBA000
器件0偏移量0x40000、大小0xba000
SF:761856字节@ 0x40000写入:确定

MLO 和 u-boot.img 是 MLO 和 u-boot.img 的副本、我们可以在 SD 卡上成功引导它。

成功的 SD 卡引导如下所示:

U-Boot SPL 2017.01-00020-g986edbf-Dirty (2017年10月19日- 15:22:08)
DRA752-GP ES2.0
尝试从 MMC1引导
**无法使用 MMC 0:1加载 env **
使用默认环境

U-Boot 2017.01-00020-g986edbf-n脏(2017年10月19日- 15:22:08 -0400)

CPU:DRA752-GP ES2.0
型号:TI AM5728 BeagleBoard-X15
电路板:AM572x EVM 修订版
DRAM:2GiB
MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.

**无法使用 MMC 0:1加载 env **
使用默认环境

重置 USB 集线器
设置 USB 集线器
重置 PCIe 1
闪存状态寄存器0x00000040 RET:0
闪存 JEDEC:0x0040159d RET:0
显示设置
SCSI:SATA link 0 timeout。
AHCI 0001.0300 32插槽1端口3 Gbps 0x1不支持 SATA 模式
标志:64位 NCQ stag pm led clo only pmp pio 贫民窟 part ccc apst
正在扫描设备总线...
找到0个器件。
网络: 未设置。 验证第一个电子保险丝 MAC
CPsw
按空格键可在2秒钟内中止自动引导
=>  

如果有任何建议,将不胜感激。  提前感谢!

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

    查看以下链接是否位于帮助中:

    processors.wiki.ti.com/.../Linux_Core_QSPI_User's_Guide

    e2e.ti.com/.../579606

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

    感谢您提供的参考资料、但它们没有太大帮助。

    核心 QSPI 用户指南涉及内核、而不是 u-boot、因此我在其中找不到任何有用的内容。

    在帮助文章中、我可以得到的最好的设置似乎是确认我具有我认为是必需的设置、特别是来自 QSPI 引导开发模式的信息似乎是为了确认我正在根据需要刷写器件。

    我只能根据我的读数怀疑我的器件树可能存在问题。 具体而言 ,SPL 报告的错误"** Bad device MMC 0**"意味着什么?  以下是我的引导失败:

    U-Boot SPL 2017.01-00020-g986edbf-Dirty (2017年10月19日- 15:22:08)
    DRA752-GP ES2.0
    尝试从 SPISF 引导:Macronix/ISSI 校验 SR 四位
    SF:Macronix/ISSI SR 四位置位
    **设备 MMC 0 **错误
    使用默认环境

    SPL 的"MMC"器件设置是什么?  我对此感到困惑、因为 MMC 与 SD 卡相关、而不是与 QSPI 相关。  下面是我要使用的器件树:

    &QSPI{
    状态="正常";
    /* SPI-max-frequency =<76800000>;*/
    SPI-max-frequency =<12000000>;
    /* SPI-max-frequency =<1000000>;*/
    is25lq016@0{
    /* CGW 兼容="s25fl256s1"、"SPI-FLASH"、"JEDEC、SPI-NOR ";*
    /*生产卡上的 CGW 部件为 is25q016 */
    兼容="ISSI、is25lq016"、"SPI-FLASH"、"JEDEC、SPI-NOR ";
    /* SPI-max-frequency =<76800000>;*/
       SPI-max-frequency =<12000000>;
    /* SPI-max-frequency =<1000000>;*/
    /*我们需要模式3,因为我们缺少 RT 时钟线*/   
    SPI-cpol;
    spi-cpha;
    reg =<0>;
    SPI-TX-bus-width =<1>;  
    SPI-Rx-bus-width =<4>;   
    #address-cells =<1>;
    大小单元格=<1>;
    /* MTD 分区表。
    * ROM 检查前四个物理块
    *以启动有效文件、此处的闪存为
    * 64KiB 块大小。
    *
    分区@0{
    标签="QSPI.SPL";
    REG =<0x00000000 0x000040000>;
    };
    分区@1{
    标签="qspi.u-boot";
    REG =<0x00040000 0x00100000 >;
    };
    分区@2{
    label ="qspi.u-boot-spl-os";
    REG =<0x00140000 0x00080000>;
    };
    分区@3{
    label ="qspi.u-boot-env";
    REG =<0x001c0000 0x00010000>;
    };
    分区@4{
    label ="qspi.u-boot-env.Backup1";
    REG =<0x001d0000 0x0010000>;
    };
    分区@5{
    标签="qspi.kernel";
    REG =<0x001e0000 0x0800000>;
    };
    分区@6{
    label ="qspi.file-system";
    REG =<0x009e0000 0x01620000>;
    };
    };
    };
    SPI_FLASH_IDS.c 中的条目:

    #ifdef CONFIG_SPI_FLASH_ISSI //
    {"is25lq08"、INFO (0x9d4014、0x0、64 * 1024、16、 0)}、
    {"is25lq016"、info (0x9d4015、0x0、64 * 1024、32、 0)}、
    {"is25lp032"、info (0x9d6016、0x0、64 * 1024、64、 0)}、
    {"is25lp064"、INFO (0x9d6017、0x0、64 * 1024、128、 0)}、
    {"is25lp128"、info (0x9d6018、0x0、64 * 1024、256、 0)}、
    #endif

    我相信 u-boot 根据我所读的内容位于适当的位置、我使用的写入命令也是:

    =>加载 MMC 0 0x82000000 /boot/u-boot.img
    751784字节在62ms 内读取(11.6 MiB/s)
    => SF 写入0x82000000 0x40000 0xBA000
    器件0偏移量0x40000、大小0xba000
    SF:761856字节@ 0x40000写入:确定

    对应于:

    分区@1{
    标签="qspi.u-boot";
    REG =<0x00040000 0x00100000 >;
    };
    设备树中。
    还有其他建议吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、

    根据 Linux 内核 U-Boot 用户指南、AM57x 器件仅支持 SD 和 UART 引导。 您可以尝试从 DRA75x/74x u-boot 移植 AM572x u-boot 中的 QSPI 引导支持。

    另请查看 AM572x 器件勘误报告:

    i851:QSPI 冗余 SBL 特性扇区大小与闪存不匹配
    i855:QSPI Mode0/1/2不起作用、mode3限制为48MHz
    i861:QSPI-4引导模式无法正常工作

    另请参见以下 e2e 线程:

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

    那么、TI AM5728 IDK 是如何工作的?  您是否说它不支持 Linux u-boot?

    请参阅 IDK 原理图的第7页。  它连接了一个 S25FL256S 以进行 QSPI 4操作。

    尽管我们使用了不同的存储器部件、但我们仍遵循此设计。  SPL 即将推出、因此我们知道初始启动确实起作用。

    关于 erratta 商品:

    i861仅适用于 Silicon rev 1.0、我们使用2.0。  请参阅我们去年春季与 TI 就这一问题进行的先前讨论: https://e2e.ti.com/support/arm/sitara_arm/f/791/t/591831

    i855我们遵循了限制条件、它在 SPL 出现时起作用、我们也能够刷写并确认器件数据是否成功。

    i851我们没有使用冗余 SPL 功能、只是在器件中刷写了单个 SPL (MLO)和单个 u-boot.img。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、这是一个声称具有有效 AM5728 QSPI u-boot 的线程。

    e2e.ti.com/.../615123

    同样、u-boot make menuconfig 中的引导介质配置选择了"Support for booting from QSPI"

    ││[]支持从 NAND 闪存引导 ││μ A
    ││[]支持从 ONENAND 引导 ││μ A
    ││[*]支持从 QSPI 闪存引导 ││μ A
    ││[]支持从 SATA 引导 ││μ A
    ││[*]支持从 SD/EMMC 引导 ││μ A
    ││[]支持从 SPI 闪存引导

    这是来自 ti-processor-sdk-linux-am57xx-evm-04.00.04。 如果不支持该条目、为什么会在此处输入?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您还参加了在 AM5728上使用 QSPI u-boot 的进一步讨论:

    e2e.ti.com/.../2158026

    更确切地说、我们不是尝试从 QSPI 引导内核、而是仅从 u-boot 引导。 内核和 rootfs 将从 SD 引导。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Chris Welch66"]

    那么、TI AM5728 IDK 是如何工作的?  您是否说它不支持 Linux u-boot?

    请参阅 IDK 原理图的第7页。  它连接了一个 S25FL256S 以进行 QSPI 4操作。

    尽管我们使用了不同的存储器部件、但我们仍遵循此设计。  SPL 即将推出、因此我们知道初始启动确实起作用。

    [/报价]

    AM572x IDK 具有 QSPI 闪存(S25FL256S)、但默认情况下、它只能用于数据存储、不能用于引导。

    我不是说您完全无法从 QSPI 闪存引导、我是说默认的 u-boot 源码不支持这一点、应该进行修改。 您可以将 DRA75x u-boot 代码库作为参考、首先比较 am57xx_EVM_defconfig 和 dra7xx_EVM_defconfig 文件之间的 QSPI 支持。 确保您具有 QSPI_BOOT、而不是 ENV_Is_in_MMC。

    您能否在 QSPI u-boot 驱动程序(u-boot/drivers/spi/ti_qspi.c)中启用调试打印并共享日志。 请在 u-boot 中启用 debug()消息以获取更多打印内容,并查看您的流程如何:

    从 QSPI 引导 MLO/SPL 时、请先卸下 SD 卡、这样您就可以确保确实从 QSPI 引导 MLO/SPL。

    另请注意、MLO/SPL 从内部 OCMC RAM 执行、而 u-boot 从外部 DDR3存储器执行。 您是否已验证 DDR3内存是否正确?

    [引用 user="Chris Welch66"]仅适用于 Silicon rev 1.0,我们使用的是2.0。  请参阅我们去年春季与 TI 就这一问题进行的先前讨论: https://e2e.ti.com/support/arm/sitara_arm/f/791/t/591831

    好的

    [报价用户="Chris Welch66"]i855我们遵守了限制、它在 SPL 出现时起作用、并且我们能够刷写并确认器件数据是否成功。

    好的

    [引用 user="Chris Welch66"]i851我们没有使用冗余 SPL 功能、只是在器件中刷写了单个 SPL (MLO)和单个 u-boot.img。

    好的

    此致、
    帕维尔

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

    对于那些研究类似问题的人:

    1) 1) QSPI Linux 引导正常工作、并且已经完成。  请参阅我在10月27日这个主题中提供的先前链接、您将找到其他示例。  使用 u-boot 配置菜单、您将找到 QSPI 引导模式。  确保为 QSPI 引导操作设置了 SYS 引导。  PROM 引导加载程序适用于 QSPI-1和 QSPI-4。

    2) 2)问题是 QSPI-1与 QSPI-4。  QSPI-1正常工作、但 QSPI-4仅部分用于 u-boot 加载。  

    PROM 引导 QSPI-4加载 程序正常工作、这就是我们成功启动 MLO 的原因、但是 TI u-boot 代码 ti_QSPI.c 不适用于 QSPI-4。 当 MLO 加载 u-boot.img 数据时,数据是无用的,并且失败。  您可以使用 uboot SF 命令对此进行诊断。  除了我们使用不同的闪存器件外、我们还关注用于 QSPI-4布线的 TI AM5728 IDK EVM 设计。  由于 PROM QSPI-4加载程序使用 QSPI-4成功启动 u-boot 的 MLO 部分、因此硬件正常工作。  所以问题是 u-boot 代码。

    我们决定坚持使用 QSPI-1、因为引导时间差对我们来说是最小的。

    3) 3)如果您想让 QSPI-4正常工作、请记住、现有的 u-boot 材料仅支持 QSPI-1进行写入、而 QSPI-4用于读取。  这可能会令人困惑。  您需要确定 ti_qspi.c 不适用于 QSPI-4操作的原因、您应该可以继续操作。   问题似乎不在 SF 代码中、因为它适用于其他 SPI 驱动器的 QSPI-4操作。 代码中有两个示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于那些想了解 Pavel 说不支持 Linux QSPI 加载 u-boot 的人、以下是 TI 发布的 u-boot 补丁、提供 QSPI 支持以及 u-boot 布局定义:

    lists.denx.de/.../262257.html