こんにちは。カスタムボードを扱っているのですが、サプライチェーンの問題により、Macronix MX25U51245G 54 の機能フラッシュを交換する必要があります。ブートローダーROM APIを使用したSFDP検出に関して、問題が発生しているようです。
回路図の接続図は以下のとおりです。
デフォルトでは、新しいフラッシュではシリアルダウンローダーやLinkServerのどちらでも書き書き/消去操作を正しく行えません。しかし、フラッシュの読み取りはうまくいくようだ。
SDK 25.12.00の例プロジェクトevkbmimxrt1170_flexspi_nor_polling_transfer_cm7をRAM(TCM)で動作させ、ボード/hardware_init.cでカスタムLUTだけを変更したことで、新しいフラッシュで正しく書き込み・読み取り・消去ができました。問題の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検出に関して、既知の問題はありますか?
こんにちは、 @achampoux さん。
NXP MIMXRTシリーズにご関心をお寄せいただきありがとうございます!
使用されているフラッシュチップ(MX25U51245G 54)のデータシートを確認したところ、いくつかの独自の機能があるようです。
最も重要な点: 4バイトアドレスモードが永続的
フラッシュローダーによって自動生成されたLUTが、4バイトアドレスモードを使用していない可能性があると推測されます。SDKのfsl_romapiプロジェクトを見て確認することをお勧めします。