器件型号: 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 ###

