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.

[参考译文] AM62A7:OSPI 引导模式无法使用复位信号识别 Micron MT35XU 闪存

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1593296/am62a7-ospi-boot-mode-not-recognizing-micron-mt35xu-flash-with-reset-signal

器件型号: AM62A7

您好:

我目前一直在努力让 OSPI/QSPI NOR 引导模式在基于 AM62A 的定制板上工作。 我们使用的是 Micron MT35XU02GCBA1G12。 我遇到了 SPL 无法在引导期间正确检索/解码 JEDEC ID 字节的问题。 当前处于 SD/MMC 引导模式下、我能够成功探测 SPI 闪存并报告正确的 JEDEC ID 字节。  

我在 AM62Ax TRM 中读到、由于我们的闪存器件大于 128MB、因此我们需要使用器件上的复位信号来执行复位、以更改寻址模式。 我已将其添加到 PinMux (AM62AX_IOPAD (0x0038、PIN_OUTPUT_PULLUP、1)/*(G20) OSPI0_CSn3.OSPI0_RESET_OUT0 */) 中、以便使复位能够发生、似乎我们通过读取 JEDEC ID 收到所有 0xFF 字节。 如果我没有将此复位包含在我的引脚多路复用中、则能够正确读取 ID 字节、但仍然无法再次进入引导过程。 以下是我在 SPL 中所做布线的片段。

为什么我们能够在不切换信号的情况下检索正确的 ID 字节、但在该过程的稍后阶段仍然失败? 为什么切换复位信号会报告 0xFF ID 字节? 我是否应该能够在不进行重置的情况下在引导过程中尽可能做到这一点?  

具有复位信号使能:

U-Boot SPL 2025.01-gfe371093a62c-dirty (Dec 01 2025 - 17:02:44 +0000)
SYSFW ABI: 4.0 (firmware rev 0x000b '11.1.5--v11.01.05 (Fancy Rat)')
Configuring LPDDR4 for 2GB
[TRACE] am62a_init: board_init_f done
SPL initial stack usage: 13568 bytes
[TRACE] get_primary_bootmedia: __get_primary_bootmedia: bootmode = 0x1 bootmode_cfg = 0x2
[TRACE] am62a_init: spl_boot_device: devstat = 0x10b bootmedia = 0x3 bootindex = 0
[TRACE] before boot_from_devices
Trying to boot from SPI
[TRACE] In spl_load_image
[TRACE] bootdev = 3
[TRACE] spl_spi_load_image: start
[TRACE] spl_spi_load_image: sf_bus=0 sf_cs=0
[TRACE] spl_spi_load_image: calling spi_flash_probe(bus=0, cs=0, speed=1000000, mode=0)
[TRACE] bootdev->boot_device = 3
[TRACE] CQSPI_REG_CONFIG = 0x80083881
[TRACE] CONFIG_SPI_FLASH_MT35XU is enabled
[TRACE] calling spi_flash_probe
Probing SPI flash ..
[TRACE] spi_nor_read_id(): sending nor
[TRACE] cdns-ospi: opcode=0x9f, nbytes=6, buswidth=1
[TRACE] cdns-ospi: data: 18 fe ff 81 2d 06
[TRACE] mode = 0, STIG_READ = 0, STIG_WRITE = 1, READ = 2, WRITE 3
[TRACE] ret = cadence_spi_mem_exec_op = 0
[TRACE] nor->read_reg; SPINOR_OP_RDID = 9f, SPI_NOR_MAX_ID_LEN = 06, tmp = 0, nor->info->id[0] = 18
[TRACE] info->name = n25q016a
[TRACE] spi_nor_ids addr = 43c19e54 first bytes: ac fe c1
...
[TRACE] in for loop info->name
[TRACE] in info->id_len
[TRACE] NOT in memcmp; info->name = mt35xu02g, info->id[0] = 2c, id[0] = ff
...
[TRACE} spi_nor_read_id JEDEC id bytes: ff, ff, ff
[TRACE] info: 00, 00, 00
jedec_spi_nor flash@0: unrecognized JEDEC id bytes: ff, ff, ff
[TRACE] JEDEC read: 00 00 00
[TRACE] ret = spi_nor_scan = -2
spi_nor_scan(flash) failed
[TRACE] return ret = -2
SPI flash probe failed for spi_flash
[TRACE] spi_flash_probe result = 0, err = 0
[TRACE] spi_flash_probe failed: 0
SPI probe failed.
[TRACE] bus 0 cs 0 speed 1000000 mode 0
spl_load_image ret = -19
In spl_load_image #2
ret = -19, -ENODEV = -19
after boot_from_devices
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###

一方 复位信号使能:

U-Boot SPL 2025.01-gfe371093a62c-dirty (Dec 01 2025 - 21:02:56 +0000)
SYSFW ABI: 4.0 (firmware rev 0x000b '11.1.5--v11.01.05 (Fancy Rat)')
Configuring LPDDR4 for 2GB
[TRACE] am62a_init: board_init_f done
SPL initial stack usage: 13568 bytes
[TRACE] get_primary_bootmedia: __get_primary_bootmedia: bootmode = 0x1 bootmode_cfg = 0x2
[TRACE] am62a_init: spl_boot_device: devstat = 0x10b bootmedia = 0x3 bootindex = 0
[TRACE] before boot_from_devices
Trying to boot from SPI
[TRACE] In spl_load_image
[TRACE] bootdev = 3
[TRACE] spl_spi_load_image: start
[TRACE] spl_spi_load_image: sf_bus=0 sf_cs=0
[TRACE] spl_spi_load_image: calling spi_flash_probe(bus=0, cs=0, speed=1000000, mode=0)
[TRACE] bootdev->boot_device = 3
[TRACE] CQSPI_REG_CONFIG = 0x80083881
[TRACE] CONFIG_SPI_FLASH_MT35XU is enabled
[TRACE] calling spi_flash_probe
Probing SPI flash ..
[TRACE] spi_nor_read_id(): sending nor
[TRACE] cdns-ospi: opcode=0x9f, nbytes=6, buswidth=1
[TRACE] cdns-ospi: data: 90 4b c2 43 08 2b
[TRACE] mode = 0, STIG_READ = 0, STIG_WRITE = 1, READ = 2, WRITE 3
[TRACE] ret = cadence_spi_mem_exec_op = 0
[TRACE] nor->read_reg; SPINOR_OP_RDID = 9f, SPI_NOR_MAX_ID_LEN = 06, tmp = 0, nor->info->id[0] = 18
[TRACE] info->name = n25q016a
[TRACE] spi_nor_ids addr = 43c19eb4 first bytes: 0c ff c1
[TRACE] in for loop info->name
[TRACE] in info->id_len
[TRACE] NOT in memcmp; info->name = n25q016a, info->id[0] = 20, id[0] = 2c
...
[TRACE] in for loop info->name
[TRACE] in info->id_len
[TRACE] NOT in memcmp; info->name = mt35xu02g, info->id[0] = 2c, id[0] = 2c
[TRACE] in memcmp; info->id = 2c, id = 2c
[TRACE] JEDEC read: 2c 5b 1c
[TRACE] Applying fixups
[TRACE] ret = spi_nor_scan = 0
[TRACE] ret = spi_flash_mtd_register(flash) = 0
[TRACE] return ret = 0
[TRACE] spi_flash_probe result = 81e003d8, err = -2116025384
[TRACE] after !flash; before spl_load_init()
[TRACE] after spl_load_init()
[TRACE] after CONFIG_IS_ENABLED(OS_BOOT)
[TRACE] before spl_load()
[TRACE] in _spl_load()
[TRACE] cdns-ospi: opcode=0x13, nbytes=64, buswidth=1
[TRACE] cdns-ospi: data: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[TRACE] mode = 2, STIG_READ = 0, STIG_WRITE = 1, READ = 2, WRITE 3
[TRACE] err = cadence_qspi_apb_read = 0
[TRACE] ret = cadence_spi_mem_exec_op = 0
[TRACE] spl_parse_board_header() ret = 0
[TRACE] spl_parse_board_header = -22
[TRACE] returning -EINVAL = -22
[TRACE] ret = spl_parse_image_header #2 = -22
[TRACE] after spl_load(); err = -22
spl_load_image ret = -22
In spl_load_image #2
ret = -19, -ENODEV = -19
after boot_from_devices
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jacob:

    我们的专家目前已离职。 请预计响应会延迟。

    此致、

    Dilna K

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

    尊敬的 Jacob:

    [quote userid=“676609" url="“ url="~“~/support/interface-group/interface/f/interface-forum/1593296/am62a7-ospi-boot-mode-not-recognizing-micron-mt35xu-flash-with-reset-signal 当前处于 SD/MMC 引导模式下、我能够成功地探测 SPI 闪存并报告正确的 JEDEC ID 字节。  [/报价]

    在这两种引导模式中的任何一种模式下、PORz ROM 都不会与闪存交互。

    [报价 userid=“676609" url="“ url="~“~/support/interface-group/interface/f/interface-forum/1593296/am62a7-ospi-boot-mode-not-recognizing-micron-mt35xu-flash-with-reset-signal

    我在 AM62Ax TRM 中读到、由于我们的闪存器件大于 128MB、因此我们需要使用器件上的复位信号来执行复位、以更改寻址模式。 我已将其添加到 PinMux (AM62AX_IOPAD (0x0038、PIN_OUTPUT_PULLUP、1)/*(G20) OSPI0_CSn3.OSPI0_RESET_OUT0 */) 中、以便使复位能够发生、似乎我们通过读取 JEDEC ID 收到所有 0xFF 字节。 如果我没有将此复位包含在我的引脚多路复用中、则能够正确读取 ID 字节、但仍然无法再次进入引导过程。 以下是我在 SPL 中所做布线的片段。

    为什么我们能够在不切换信号的情况下检索正确的 ID 字节、但在该过程的稍后阶段仍然失败? 为什么切换复位信号会报告 0xFF ID 字节? 我是否应该能够在不进行重置的情况下在引导过程中尽可能做到这一点?  

    [/报价]

    您能告诉我您尝试过哪种引导模式吗?

    此外、复位信号应该连接到闪存、它是否连接到闪存? 另外是所选的闪存、这是一个具有复位封装的闪存?

    期待您的答复。

    此致、

    Vaibhav

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

    你好、Vaibhav、

    我在 OSPI 引导中尝试了该操作;提供的日志也是在 OSPI 引导期间。 复位信号连接到 AM62 的闪存(引脚 OSPI0_CSn3/G20)、该闪存确实有一个专用的复位引脚。 我还通过基于软件的复位模拟了复位切换、以确认 RESET 引脚多路复用实际上执行了复位、并且检查时的行为是相似的。

    谢谢、

    Jake

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

    您好 Jacob:

    感谢您的意见。

    ]我在 OSPI 引导中尝试了该操作

    您能和我分享 DUT 上的引导模式引脚配置吗? 我先给出引导模式 0 的值、直到引导模式 15。

    此致、

    Vaibhav

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

    Vaibhav、

    OUT 引导模式引脚配置为 0x10B (0b0000000100001011)

    ——Jake

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

    您好 Jacob:

    我使用闪存数据表进行了验证、闪存确实支持 OSPI 引导模式、因为命令序列在 ROM 发送的内容与闪存预期内容之间相匹配。

    现在、我想知道您在 DTS 方面做了哪些更改?

    请与我分享您所做的更改列表,以满足您的板上的新闪存部件。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    以下是包含在 R5 SPL 的 DTS 文件中的 DTS 节点:

    &ospi0 {
            pinctrl-names = "default";
            pinctrl-0 = <&ospi0_pins_default>;
            bootph-all;
            status = "okay";
    
            spi_nor_flash: flash@0 {
                    compatible = "jedec,spi-nor";
                    reg = <0x0>;
                    spi-tx-bus-width = <8>;
                    spi-rx-bus-width = <8>;
                    spi-max-frequency = <25000000>;
                    cdns,tshsl-ns = <60>;
                    cdns,tsd2d-ns = <60>;
                    cdns,tchsh-ns = <60>;
                    cdns,tslch-ns = <60>;
                    cdns,read-delay = <0>;
                    bootph-all;
    
                    partitions {
                            compatible = "fixed-partitions";
                            #address-cells = <1>;
                            #size-cells = <1>;
                            bootph-all;
    
                            partition@0 {
                                    label = "ospi.tiboot3";
                                    reg = <0x0 0x80000>;
                            };
    
                            partition@80000 {
                                    label = "ospi.tispl";
                                    reg = <0x80000 0x200000>;
                            };
    
                            partition@280000 {
                                    label = "ospi.u-boot";
                                    reg = <0x280000 0x400000>;
                            };
                            
                            partition@680000 {
                                    label = "ospi.env";
                                    reg = <0x680000 0x40000>;
                            };
    
                            partition@6c0000 {
                                    label = "ospi.env.backup";
                                    reg = <0x6c0000 0x40000>;
                            };
    
                            partition@800000 {
                                    label = "ospi.rootfs";
                                    reg = <0x800000 0xf7c0000>;
                            };
    
                            partition@3fc0000 {
                                    label = "ospi.phypattern";
                                    reg = <0xffc0000 0x40000>;
                                    bootph-all;
                            };
                    };
            };
    };


    我们的 AM62A 电路板的*-u-boot.dtsi 文件中还包含以下内容、该文件包含在 DTS R5 SPL 文件中:
    &ospi0 {
            bootph-all;
    
            spi_nor_flash: flash@0 {
                    bootph-all;
    
                    partitions {
                            bootph-all;
                    };
            };
    };


    谢谢、
    Jacob

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

    您好 Jacob:

    让我循环一下另一位专家、他们可以评论让新闪存正常工作所需的更改。

    此致、

    Vaibhav

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

    您好 Jacob、感谢您迄今为止提供的详细信息。

    您能否请验证 sdk_dir/board-support/ti-u-boot-2025.01+git/drivers/mTD/spi/spi-nor-ids.c.中是否支持以下闪存

    { INFO("mt35xu02g",  0x2c5b1c, 0, 128 * 1024,  2048, USE_FSR | SPI_NOR_OCTAL_READ | SPI_NOR_4B_OPCODES) },


    如果不存在、请将相应的配置添加到 SDK-dir/board-support/ti-u-boot-2025.01+git/configs/am62ax_evm_a53_defconfig 中


    CONFIG_SPI_FLASH_MT35XU=y


    此致、
    Harshith

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

    您好 Harshith、

    是的、信息行位于 drivers/mtd/spi/spi-nor-ids.c 文件中、我们在特定于电路板的 defconfig 中启用了 CONFIG_SPI_FLASH_MT35XU。

    谢谢、
    Jacob

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

    尊敬的 Jacob:

    感谢您的澄清。

    [trace] cdns-ospi:数据:ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff f ff FF 和 FF FF 和 FF FF 和 FF FF 和 FF FF 和 FF FF 和 FF FF 和 FF FF 和 FF FF 和 FF FF 和 FF FF 和 FF ff ff ff ff ff ff ff ff ff

    在做出上述说明后、处理器看起来正在成功与闪存通信但无法读取任何内容、您是否可以尝试在 U-boot 控制台中使用从工作环境(SD 卡)读取 SF 的引导二进制文件的指定偏移量处转储内存。如果返回全部内容  f 则二进制文件丢失或未正确刷写。

    此致、
    Harshith

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

    您好 Harshith、

    以下是工作 SD 卡引导内指定偏移处的存储器转储、刷写后直接未启用复位线。

    => sf probe
    Probing SPI flash ..
    SF: Detected mt35xu02g with page size 256 Bytes, erase size 128 KiB, total 256 MiB
    => sf read 0x82000000 0x0 0x100
    device 0 offset 0x0, size 0x100
    [TRACE] cdns-ospi: opcode=0x7c, nbytes=256, buswidth=8
    [TRACE] cdns-ospi: data: 00 80 41 a9 63 26 00 14 f4 01 00 a8 bf 02 00 f1 04 18 00 9a 80 01 00 44 a3 00 40 f9 03 02 00 14 e4 03 00 8a 62 16 00 b9 60 86 41 a9 05 00 80 10 58 26 00 84 80 07 00 30 a0 02 40 f9 00 00 14 0b 80 02 00 51 f5 5b 40 a8 e0 03 14 0a f3 60 41 a9 fd 7b c1 b8 bf 23 01 d5 40 03 5f c6 14 0d 00 e0 d6 42 10 11 e0 03 16 82 00 92 00 52 68 4f 02 14 a0 02 00 d1 a3 03 00 0a 80 07 00 b0 20 86 41 a8 e4 03 14 aa 62 36 00 a1 05 00 80 90 40 26 00 94 a0 d9 ff b5 af 00 00 94 22 0f 00 80 00 44 01 90 80 00 16 0a 42 00 04 90 41 93 80 40 e5 30 01 14 01 02 80 52 02 00 80 d2 01 01 a0 22 00 02 80 52 b5 31 08 84 a0 02 40 e9 e1 03 06 2a 82 93 00 10 81 0f 00 84 f3 52 41 89 00 00 00 52 9f 02 00 71 f5 59 42 29 5b 7f fd 11 9a 30 01 90 20 0f 00 40 40 60 01 11 42 00 01 91 01 91 00 50 20 0d 00 f0
    [TRACE] mode = 2, STIG_READ = 0, STIG_WRITE = 1, READ = 2, WRITE 3
    [TRACE] err = cadence_qspi_apb_read = 0
    [TRACE] ret = cadence_spi_mem_exec_op = 0
    SF: 256 bytes @ 0x0 Read: OK
    => sf read 0x82000000 0x80000 0x100
    device 0 offset 0x80000, size 0x100
    [TRACE] cdns-ospi: opcode=0x7c, nbytes=256, buswidth=8
    [TRACE] cdns-ospi: data: 30 82 08 58 30 82 06 40 a0 03 02 01 02 02 14 45 fa b6 8c c5 26 c4 b5 eb 68 e2 3f 94 65 03 33 db c4 44 7c 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0d 05 00 30 81 9d 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0b 30 09 06 03 55 04 08 0c 02 54 58 31 0f 30 0d 06 03 55 04 07 0c 06 44 61 6c 6c 61 73 31 27 30 25 06 03 55 04 0a 0c 1e 54 65 78 61 73 20 49 6e 73 74 72 75 6d 65 6e 74 73 20 49 6e 63 6f 72 70 6f 72 61 74 65 64 31 13 30 11 06 03 55 04 0b 0c 0a 50 72 6f 63 65 73 73 6f 72 73 31 13 30 11 06 03 55 04 03 0c 0a 54 49 20 53 75 70 70 6f 72 74 31 1d 30 1b 06 09 2a 86 48 86 f7 0d 01 09 01 16 0e 73 75 70 70 6f 72 74 40 74 69 2e 63 6f 6d 30 1e 17 0d 32 35 31 32 33 31 31 36 33 39 34 36 5a 17 0d 32 36 30 31 33 30 31 36 33 39 34 36 5a 30 81 9d 31 0b 30 09 06 03 55 04 06 13 02
    [TRACE] mode = 2, STIG_READ = 0, STIG_WRITE = 1, READ = 2, WRITE 3
    [TRACE] err = cadence_qspi_apb_read = 0
    [TRACE] ret = cadence_spi_mem_exec_op = 0
    SF: 256 bytes @ 0x80000 Read: OK
    => sf read 0x82000000 0x280000 0x100
    device 0 offset 0x280000, size 0x100
    [TRACE] cdns-ospi: opcode=0x7c, nbytes=256, buswidth=8
    [TRACE] cdns-ospi: data: d0 0d fe ed 00 18 01 13 00 00 00 38 00 17 fc c0 00 00 00 28 00 00 00 11 00 00 00 02 00 00 00 00 00 00 00 6d 00 17 fc 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 63 69 55 51 d6 00 00 00 03 00 00 00 04 00 00 00 54 00 00 00 01 00 00 00 03 00 00 00 22 00 00 00 48 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 74 6f 20 6c 6f 61 64 20 41 54 46 20 61 6e 64 20 53 50 4c 00 00 00 00 00 00 01 69 6d 61 67 65 73 00 00 00 00 00 01 61 74 66 00 00 00 00 03 00 00 00 04 00 00 00 42 80 00 00 00 00 00 00 03 00 00 00 04 00 00 00 3d 80 00 00 00 00 00 00 03 00 00 00 15 00 00 00 3a 61 72 6d 2d 74 72 75 73 74 65 64 2d 66 69 72 6d 77 61 72 65 00 00 00 00 00 00 00 03 00 00 00 05 00 00 00 2e 6e 6f 6e 65 00 00 00 00 00 00 00 03
    [TRACE] mode = 2, STIG_READ = 0, STIG_WRITE = 1, READ = 2, WRITE 3
    [TRACE] err = cadence_qspi_apb_read = 0
    [TRACE] ret = cadence_spi_mem_exec_op = 0
    SF: 256 bytes @ 0x280000 Read: OK


    看起来它正在刷写、因为 Reads not return all  ff? 我们使用以下脚本命令刷写引导二进制文件:

    cd /run/media/boot-mmcblk1p1
    
    flash_erase /dev/mtd0 0 0
    flash_erase /dev/mtd1 0 0
    flash_erase /dev/mtd2 0 0
    
    cp -v tiboot3.bin /dev/mtd0 && \
    cp -v tispl.bin /dev/mtd1 && \
    cp -v u-boot.img /dev/mtd2
    
    sync


    如果我可以提供此问题的任何其他信息、请告诉我。

    谢谢你

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

    尊敬的 Jacob:

    日志确认闪存已在预期偏移 (0x0、0x80000 和 0x280000) 处使用有效数据正确编程。

    但是、由于 BootROM 和 SPL 之间的状态不匹配、OSPI 引导失败:

    • 寻址不匹配:由于器件大于 128MB、BootROM 会将闪存移至 4 字节寻址模式。 当 SPL 接管并重新初始化时、其默认为 3 字节寻址的加电标准、导致两者失去同步。

    • 协议不匹配:我可以在工作日志 (SF 读取 0x82000000 0x80000 0x100) 中看到总线在总线宽度= 8(八路模式)下运行。 在失败的日志中、SPL 尝试使用 buswidth=1 进行通信。 如果 BootROM 以八进制模式离开闪存、它将直接忽略这些 1 位命令。

    此致、
    Harshith

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

    谢谢 Harshith、请 Jacob 稍等片刻。  这听起来就像我们看到的问题。

    TI 是否支持使用超过 128MB 的器件进行 OSPI 引导?  您是否有办法解决这些问题? 根据您概述的内容、似乎这对于任何 OSPI 引导都是个问题。 因此、u-boot SPL 不应该已经期望 BootROM 将闪存置于 4 字节模式。  是否缺少设置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于器件大于 128MB、BootROM 将闪存转换为 4 字节寻址模式

    根据 TRM spruj16b 第 5.4.1 节 OSPI\xSPI\QSPI\SPI 引导、BootROM 仅支持 3 字节地址模式。  哪一项是正确的?

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

    由于这个主题已经很长,我想总结一下我认为当前状态是什么。

    前面介绍了几种情况:

    * SPL 的 SD 卡引导 OSPI0_RESET_OUT0 未进行多路复用

    RESETSTATz 会复位闪存

    引导 ROM 根本没有触摸 OSPI。

    U-boot 能够从闪存正常进行探测和读取。   

    * SPL OSPI0_RESET_OUT0 未进行多路复用的 OPSI0 引导 (0b0000000100001011)

    RESETSTATz 会复位闪存

    引导 ROM 检测闪存并加载 SPL。

    SPL 通过 JEDEC 检测到闪存、但尝试在 1 位模式下读取并获取所有 FF

    >大概引导 ROM 将我们置于八进制模式,因此 1 位读取是不正确的?  但是、如果是这样、为什么 JEDEC 读取可以正常工作?

    *具有 SPL 的 OSPI0_RESET_OUT0 多路复用的 OPSI0 引导 (0b0000000100001011)

    RESETSTATz 会复位闪存

    引导 ROM 检测闪存并加载 SPL。

    SPL 无法检测到闪存、JEDEC 返回 FF。  由于检测失败、未尝试闪存读取。

    >大概情况下、OSPI 控制器能够使用 OSPI0_RESET_OUT0 复位闪存。 但是、其不清楚为什么 SPL 会无法通过 JEDEC 读取...

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

    尊敬的 Jonathan:
    感谢您的总结。
    作为快速检查点、我们是否尝试配置 BOOTMODE[15:0]=0273 用于在电路板上引导?
    此致、
    - Hong

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    作为快速检查点、我们是否尝试过配置 BOOTMODE[15:0]=0273 以便在您的电路板上引导?

    否、我不知道 xSPI 引导用于 OSPI 闪存。  我会尝试并报告

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

    尊敬的 Jonathan:
    是的、我们在电路板上发布 BOOTMODE[15:0]=0273 测试。
    此致、
    - Hong

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

    我使 OSPI 引导功能正常工作。

    我想我们缺少一些 defconfig 设置。  我最终从 AM62x defconfig 中同步 SPI 相关设置、并重新测试、将电路板引导到 u-boot 中而不会出现问题。 这是不对复位信号进行多路复用、只是让系统复位来处理它。

    我们已经有了其中一些功能、但我认为最大的原因是之前没有设置 U_BOOT_OFFS、u-boot 默认值为 0x0、因此它本来是从错误的扇区读取的。

    diff --git a/configs/mitysom_am62ax_devkit_a53_defconfig b/configs/mitysom_am62ax_devkit_a53_defconfig
    index a3f458b6f83b..97a3c83621b3 100644
    --- a/configs/mitysom_am62ax_devkit_a53_defconfig
    +++ b/configs/mitysom_am62ax_devkit_a53_defconfig
    @@ -26,6 +26,7 @@ CONFIG_SPL_BSS_MAX_SIZE=0x80000
     CONFIG_SPL_STACK_R=y
     CONFIG_SPL_FS_FAT=y
     CONFIG_SPL_LIBDISK_SUPPORT=y
    +CONFIG_SPL_SPI_FLASH_SUPPORT=y
     CONFIG_SPL_SPI=y
     # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
     CONFIG_SPL_LOAD_FIT=y
    @@ -45,12 +46,12 @@ CONFIG_SPL_ENV_SUPPORT=y
     CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="u-boot.img"
     CONFIG_SPL_I2C=y
     CONFIG_SPL_DM_MAILBOX=y
    -CONFIG_SPL_MTD=y
    -CONFIG_SPL_MTD_LOAD=y
    -CONFIG_SYS_MTD_U_BOOT_OFFS=0x280000
    -CONFIG_SPL_NAND_SPI_SUPPORT=y
     CONFIG_SPL_DM_SPI_FLASH=y
     CONFIG_SPL_POWER_DOMAIN=y
    +# CONFIG_SPL_SPI_FLASH_TINY is not set
    +CONFIG_SPL_SPI_FLASH_SFDP_SUPPORT=y
    +CONFIG_SPL_SPI_LOAD=y
    +CONFIG_SYS_SPI_U_BOOT_OFFS=0x280000
     CONFIG_SPL_THERMAL=y
     CONFIG_SPL_YMODEM_SUPPORT=y
     CONFIG_CMD_MEMTEST=y
    @@ -82,7 +83,6 @@ CONFIG_CLK=y
     CONFIG_SPL_CLK=y
     CONFIG_CLK_TI_SCI=y
     CONFIG_DFU_MMC=y
    -CONFIG_DFU_MTD=y
     CONFIG_DFU_RAM=y
     CONFIG_DFU_SF=y
     CONFIG_SYS_DFU_DATA_BUF_SIZE=0x40000
    @@ -106,9 +106,6 @@ CONFIG_SPL_I2C_EEPROM=y
     CONFIG_SUPPORT_EMMC_BOOT=y
     CONFIG_MMC_IO_VOLTAGE=y
     CONFIG_SPL_MMC_IO_VOLTAGE=y
    -# Disabling UHS support since SDcard voltage is not controllable
    -CONFIG_MMC_UHS_SUPPORT=n
    -CONFIG_SPL_MMC_UHS_SUPPORT=n
     CONFIG_MMC_HS200_SUPPORT=y
     CONFIG_SPL_MMC_HS200_SUPPORT=y
     CONFIG_MMC_SDHCI=y
    @@ -116,9 +113,14 @@ CONFIG_MMC_SDHCI_ADMA=y
     CONFIG_SPL_MMC_SDHCI_ADMA=y
     CONFIG_MMC_SDHCI_AM654=y
     CONFIG_MTD=y
    -CONFIG_DM_MTD=y
    -CONFIG_MTD_SPI_NAND=y
     CONFIG_DM_SPI_FLASH=y
    +CONFIG_SPI_FLASH_SFDP_SUPPORT=y
    +CONFIG_SPI_FLASH_SOFT_RESET=y
    +CONFIG_SPI_FLASH_SOFT_RESET_ON_BOOT=y
    +CONFIG_SPI_FLASH_SPANSION=y
    +CONFIG_SPI_FLASH_S28HX_T=y
    +CONFIG_SPI_FLASH_STMICRO=y
    +CONFIG_SPI_FLASH_MT35XU=y
     CONFIG_PHY_TI_DP83867=y
     CONFIG_PHY_FIXED=y
     CONFIG_TI_AM65_CPSW_NUSS=y
    diff --git a/configs/mitysom_am62ax_devkit_r5_defconfig b/configs/mitysom_am62ax_devkit_r5_defconfig
    index 298e121af696..a6c8afd26e49 100644
    --- a/configs/mitysom_am62ax_devkit_r5_defconfig
    +++ b/configs/mitysom_am62ax_devkit_r5_defconfig
    @@ -9,6 +9,8 @@ CONFIG_K3_IODDR=y
     CONFIG_TARGET_MITYSOM_AM62AX_R5_DEVKIT=y
     CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
     CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x43c3a7f0
    +CONFIG_SF_DEFAULT_SPEED=25000000
    +CONFIG_SF_DEFAULT_MODE=0
     CONFIG_ENV_OFFSET=0x3E1000
     CONFIG_SPL_DM_SPI=y
     CONFIG_DEFAULT_DEVICE_TREE="k3-am62a7-r5-mitysom-devkit"
    @@ -27,6 +29,7 @@ CONFIG_SPL_SIZE_LIMIT=0x3A7F0
     CONFIG_SPL_SIZE_LIMIT_PROVIDE_STACK=0x3500
     CONFIG_SPL_FS_FAT=y
     CONFIG_SPL_LIBDISK_SUPPORT=y
    +CONFIG_SPL_SPI_FLASH_SUPPORT=y
     CONFIG_SPL_SPI=y
     CONFIG_SPL_LOAD_FIT=y
     CONFIG_SPL_LOAD_FIT_ADDRESS=0x80080000
    @@ -47,13 +50,15 @@ CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x400
     CONFIG_SPL_DMA=y
     CONFIG_SPL_I2C=y
     CONFIG_SPL_DM_MAILBOX=y
    -CONFIG_SPL_MTD=y
    -CONFIG_SPL_MTD_LOAD=y
     CONFIG_SPL_DM_SPI_FLASH=y
     CONFIG_SPL_DM_RESET=y
     CONFIG_SPL_POWER_DOMAIN=y
     CONFIG_SPL_RAM_DEVICE=y
     CONFIG_SPL_REMOTEPROC=y
    +# CONFIG_SPL_SPI_FLASH_TINY is not set
    +CONFIG_SPL_SPI_FLASH_SFDP_SUPPORT=y
    +CONFIG_SPL_SPI_LOAD=y
    +CONFIG_SYS_SPI_U_BOOT_OFFS=0x80000
     CONFIG_SPL_THERMAL=y
     CONFIG_SPL_YMODEM_SUPPORT=y
     CONFIG_HUSH_PARSER=y
    @@ -100,9 +105,14 @@ CONFIG_MMC_SDHCI_ADMA=y
     CONFIG_SPL_MMC_SDHCI_ADMA=y
     CONFIG_MMC_SDHCI_AM654=y
     CONFIG_MTD=y
    -CONFIG_DM_MTD=y
    -CONFIG_MTD_SPI_NAND=y
     CONFIG_DM_SPI_FLASH=y
    +CONFIG_SPI_FLASH_SFDP_SUPPORT=y
    +CONFIG_SPI_FLASH_SOFT_RESET=y
    +CONFIG_SPI_FLASH_SOFT_RESET_ON_BOOT=y
    +CONFIG_SPI_FLASH_SPANSION=y
    +CONFIG_SPI_FLASH_S28HX_T=y
    +CONFIG_SPI_FLASH_STMICRO=y
    +CONFIG_SPI_FLASH_MT35XU=y
     CONFIG_PINCTRL=y
     # CONFIG_PINCTRL_GENERIC is not set
     CONFIG_SPL_PINCTRL=y

    我还注意到内核是反向排序的 MTD 分区... 我以前从未见过这种情况、相当烦人

    [13:14:33.967] root@mitysom-am62ax:~# uname -a
    [13:14:35.274] Linux mitysom-am62ax 6.12.43-g-g26975df2e66f #1 SMP PREEMPT Tue Dec 30 20:22:52 UTC 2025 aarch64 GNU/Linux
    
    root@mitysom-am62ax:~# cat /proc/mtd 
    [13:13:24.231] dev:    size   erasesize  name
    [13:13:24.231] mtd0: 00040000 00020000 "ospi.phypattern"
    [13:13:24.231] mtd1: 0f7c0000 00020000 "ospi.rootfs"
    [13:13:24.232] mtd2: 00040000 00020000 "ospi.env.backup"
    [13:13:24.232] mtd3: 00040000 00020000 "ospi.env"
    [13:13:24.232] mtd4: 00400000 00020000 "ospi.u-boot"
    [13:13:24.232] mtd5: 00200000 00020000 "ospi.tispl"
    [13:13:24.235] mtd6: 00080000 00020000 "ospi.tiboot3"
    
    root@mitysom-am62ax:~# cd /run/media/boot-mmcblk1p1
    root@mitysom-am62ax:~# flash_erase /dev/mtd6 0 0
    root@mitysom-am62ax:~# flash_erase /dev/mtd5 0 0
    root@mitysom-am62ax:~# flash_erase /dev/mtd4 0 0
    root@mitysom-am62ax:~# cp tiboot3.bin /dev/mtd6
    root@mitysom-am62ax:~# cp tispl.bin /dev/mtd5
    root@mitysom-am62ax:~# cp u-boot.img /dev/mtd4

    是的、让我们在您的电路板上发布 BOOTMODE[15:0]=0273 测试。

    XSPI 和 OSPI 引导模式均正常工作。  我给他们计时、他们都花了大约 2.874 秒才到达“按任意键“提示符。

    您会建议我们选择一个而不是另一个吗?

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

    尊敬的 Jonathan:
    最好知道您已经制定了从电路板上的 OSPI-NOR 引导的流程。
    对于某些 OSPI-NOR 闪存、默认引导模式为“x1 默认引导“、xSPI 或 SPI 引导模式需要通过 BOOTMODE[15:0]进行配置、以便通过 ROM 从 OSPI-NOR 引导 tiboot3.bin。
    此致、
    - Hong

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

    我还通过 Hi-Z 引脚多路复用 OSPI 复位引脚来修复 AM62x OSPI 引导。  我不知道为什么、但 OSPI0_RESET_OUT1 似乎不起作用。  

    diff --git a/arch/arm64/boot/dts/ti/k3-am62x-mitysom-som.dtsi b/arch/arm64/boot/dts/ti/k3-am62x-mitysom-som.dtsi
    index c562eed2d0cd..73077bc3b8b4 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62x-mitysom-som.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62x-mitysom-som.dtsi
    @@ -260,7 +260,7 @@ AM62X_IOPAD(0x024, PIN_INPUT, 0) /* (H25) OSPI0_D6 */
                            AM62X_IOPAD(0x028, PIN_INPUT, 0) /* (J22) OSPI0_D7 */
                            AM62X_IOPAD(0x008, PIN_INPUT, 0) /* (J24) OSPI0_DQS */
                            AM62X_IOPAD(0x0034, PIN_INPUT_PULLUP, 7) /* (H21) OSPI0_CSn2.GPIO0_13 SOM:OSPI_INTn_0 NC(R42) external pullup */
    -                       AM62X_IOPAD(0x0038, PIN_OUTPUT, 1) /* (E24) OSPI0_CSn3.OSPI0_RESET_OUT0 SOM:OSPI_RESET_GPIO external pullup */
    +                       AM62X_IOPAD(0x0038, PIN_OUTPUT, 7) /* (E24) OSPI0_CSn3.GPIO0_14 SOM:OSPI_RESET_GPIO external pullup */
                    >;
            };

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

    尊敬的 Jonathan:
    最好是通过在电路板上使用 RESETSTATz 来了解 OSPI_NOR 引导的工作方式。
    此致、
    - Hong