Hello Sabina,
thank you for your reply and i hope you are also doing well.
It seems to me the problem is a wrong configered LUT. I changed the entries in the LUT and also the according defines and the project works with and without debugger currently. I have parts of the previous and currently used LUT appended below.
to your questions:
We are using a custom board. The NOR flash stores our bootloader and firmware. Both, the bootloader and the firmware, are separate MCUXpresso projects. The NAND flash stores images currently.
main project components currently used:
NOR flash 0x6000 0000 - 0x6200 0000 size 0x0200 0000 32 Mb (IS25LP256D) flexspi port A1
NAND flash 0x6200 0000 - 0x6A00 0000 size 0x0800 0000 128 Mb (W25N01GVZEIGIT) flexspi port B1 (currently)
Which LUT entries are used, required for execute in place (XIP)? Exists there a specific LUT order for XIP equivalent to system boot? Do I have to use a kFLEXSPI_Command_STOP for each sequence?
Kind regards,
Patrick
previous used defines and LUT:
#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 0
#define NAND_LUT_WRITE_ENABLE 1
#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 2
#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 3
#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 4
#define NAND_LUT_ERASE_128KB 5
#define NAND_LUT_FAST_READ_QUAD_OUTPUT 6
#define NAND_LUT_QUAD_LOAD_PROGRAM_DATA 7
#define NAND_LUT_DEVICE_RESET 8
#define NAND_LUT_PROGRAM_EXECUTE 9
#define NAND_LUT_READ_DATA 10
#define NAND_LUT_PAGE_DATA_READ 11
#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 12
#define NAND_LUT_WRITE_STATUS_REG 13
#define NAND_LUT_READ_STATUS_REG 14
const uint32_t customLUT[] = {
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xEB,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_4PAD, 0x06,
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, 0xD7,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x32,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04,
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
[4 * NOR_CMD_LUT_SEQ_IDX_READSTATUSREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05,
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),
.....
currently used defines and LUT:
#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 0
#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 2
#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 3
#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 4
#define NAND_LUT_PAGE_DATA_READ 5
#define NAND_LUT_FAST_READ_QUAD_OUTPUT 6
#define NAND_LUT_READ_DATA 7
#define NAND_LUT_READ_STATUS_REG 8
#define NAND_LUT_WRITE_ENABLE 9
#define NAND_LUT_QUAD_LOAD_PROGRAM_DATA 10
#define NAND_LUT_PROGRAM_EXECUTE 11
#define NAND_LUT_WRITE_STATUS_REG 12
#define NAND_LUT_DEVICE_RESET 13
#define NAND_LUT_ERASE_128KB 14
const uint32_t customLUT[] = {
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xEB,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_4PAD, 0x06,
kFLEXSPI_Command_READ_SDR, kFLEXSPI_4PAD, 0x04),
[4 * NOR_CMD_LUT_SEQ_IDX_READSTATUSREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05,
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 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, 0xD7,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x32,
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04,
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
....