iMXRT1176DVMAA + Macronix MX25U51245G 54 闪存存在问题 您好,我们正在使用定制电路板,由于供应链问题,我们需要更换 Macronix MX25U51245G 54 的功能闪存。我怀疑在使用引导加载程序 ROM API 进行 SFDP 发现时遇到了问题。 使用 MIMXRT1176DVMAA 的定制 PCBA 将闪存设备从 Winbond W25Q512NWEIQ 更换为 Macronix MX25U51245G 54 使用 FlexSPI1 1V8电源 信号完整性符合规范 以下是电路连接示意图: 默认情况下,使用新的闪存,我无法使用串行下载器或 LinkServer 正确执行写入/擦除操作。读取闪存数据似乎可行。 我通过修改 SDK 25.12.00 中的示例项目 evkbmimxrt1170_flexspi_nor_polling_transfer_cm7,使其在 RAM (TCM) 上运行,并仅修改板/hardware_init.c 中的 customLUT,成功地在新闪存上实现了写入/读取/擦除操作。以下是相关的 LUT: const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
[4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x03,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x20
),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL + 1] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04,
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0
),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x0B,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x20
),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST + 1] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_1PAD, 0x0A,
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04
),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xEB,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 0x20
),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD + 1] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_4PAD, 0x0A,
kFLEXSPI_Command_READ_SDR, kFLEXSPI_4PAD, 0x04
),
[4 * NOR_CMD_LUT_SEQ_IDX_WRITEENABLE] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06,
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0
),
[4 * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x20,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x20
),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_SINGLE] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x02,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x20
),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_SINGLE + 1] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04,
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0
),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x38,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 0x20
),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04,
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0
),
[4 * NOR_CMD_LUT_SEQ_IDX_READID] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x9F,
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x03
),
[4 * NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x01,
kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x02
),
[4 * NOR_CMD_LUT_SEQ_IDX_READSTATUSREG] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05,
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x01
),
[4 * NOR_CMD_LUT_SEQ_IDX_ERASECHIP] =
FLEXSPI_LUT_SEQ(
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xC7,
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0
),
}; 该闪存设备与引导加载程序 API 或 SFDP 发现是否存在已知问题? Re: Issue with iMXRT1176DVMAA + Macronix MX25U51245G 54 flash 嗨@achampoux ,
感谢您对 NXP MIMXRT 系列产品的关注!
我查看了您正在使用的闪存芯片(MX25U51245G 54)的数据手册,发现它似乎有一些独特的功能。
最重要的是: 4字节地址模式永久启用
我怀疑 flashloader 自动生成的 LUT 可能没有使用 4 字节地址模式。我建议您查看SDK中的fsl_romapi项目来验证这一点。
ROM_FLEXSPI_NorFlash_GetConfig(instance, &norConfig, &option);
接下来,检索 norConfig 并检查其值。如果这确实是问题所在,您需要在串行下载模式下直接使用自定义 FCB 标头,而不是使用工具生成的标头。通过调试器下载时,需要使用自定义下载算法。
此致, 加文
View full article