summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/mimxrt/Makefile63
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK.ld1
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK_flexspi_nor_config.h257
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/clock_config.h104
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/evkmimxrt1010_flexspi_nor_config.h257
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/flash_config.c124
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.h6
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.mk9
-rw-r--r--ports/mimxrt/boards/MIMXRT1010_EVK/qspi_nor_flash_config.c124
-rw-r--r--ports/mimxrt/boards/MIMXRT1011.ld21
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK.ld1
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK_flexspi_nor_config.h258
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/clock_config.h114
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/evkmimxrt1020_flexspi_nor_config.h258
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/flash_config.c136
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h22
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.mk9
-rw-r--r--ports/mimxrt/boards/MIMXRT1020_EVK/qspi_nor_flash_config.c136
-rw-r--r--ports/mimxrt/boards/MIMXRT1021.ld23
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK.ld1
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK_flexspi_nor_config.h263
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/clock_config.h119
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/evkmimxrt1050_flexspi_nor_config.h255
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/flash_config.c129
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h21
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.mk7
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/qspi_hyper_flash_config.c186
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVK/qspi_nor_flash_config.c129
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVKB/MIMXRT1050_EVKB.ld1
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVKB/evkbmimxrt1050_flexspi_nor_config.h263
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVKB/flash_config.c186
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.h68
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.mk13
-rw-r--r--ports/mimxrt/boards/MIMXRT1050_EVKB/pins.csv31
-rw-r--r--ports/mimxrt/boards/MIMXRT1052.ld19
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK.ld1
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK_flexspi_nor_config.h264
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/clock_config.h122
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/evkmimxrt1060_flexspi_nor_config.h264
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/flash_config.c186
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h18
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.mk6
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/qspi_hyper_flash_config.c186
-rw-r--r--ports/mimxrt/boards/MIMXRT1060_EVK/qspi_nor_flash_config.c129
-rw-r--r--ports/mimxrt/boards/MIMXRT1062.ld19
-rw-r--r--ports/mimxrt/boards/MIMXRT1064.ld21
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK.ld1
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK_flexspi_nor_config.h264
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/clock_config.h122
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/evkmimxrt1064_flexspi_nor_config.h264
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/flash_config.c186
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h16
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.mk7
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/qspi_hyper_flash_config.c186
-rw-r--r--ports/mimxrt/boards/MIMXRT1064_EVK/qspi_nor_flash_config.c129
-rw-r--r--ports/mimxrt/boards/TEENSY40/TEENSY40.ld2
-rw-r--r--ports/mimxrt/boards/TEENSY40/TEENSY40_flexspi_nor_config.h259
-rw-r--r--ports/mimxrt/boards/TEENSY40/clock_config.h122
-rw-r--r--ports/mimxrt/boards/TEENSY40/flash_config.c144
-rw-r--r--ports/mimxrt/boards/TEENSY40/mpconfigboard.h18
-rw-r--r--ports/mimxrt/boards/TEENSY40/mpconfigboard.mk6
-rw-r--r--ports/mimxrt/boards/TEENSY40/qspi_nor_flash_config.c144
-rw-r--r--ports/mimxrt/boards/TEENSY40/teensy40_flexspi_nor_config.h259
-rwxr-xr-xports/mimxrt/boards/TEENSY41/TEENSY41.ld2
-rw-r--r--ports/mimxrt/boards/TEENSY41/TEENSY41_flexspi_nor_config.h259
-rw-r--r--ports/mimxrt/boards/TEENSY41/clock_config.h122
-rwxr-xr-xports/mimxrt/boards/TEENSY41/flash_config.c144
-rw-r--r--ports/mimxrt/boards/TEENSY41/mpconfigboard.h18
-rwxr-xr-xports/mimxrt/boards/TEENSY41/mpconfigboard.mk6
-rw-r--r--ports/mimxrt/boards/TEENSY41/qspi_nor_flash_config.c144
-rwxr-xr-xports/mimxrt/boards/TEENSY41/teensy41_flexspi_nor_config.h259
-rw-r--r--ports/mimxrt/boards/make-flexram-config.py219
-rw-r--r--ports/mimxrt/hal/board.h33
-rw-r--r--ports/mimxrt/hal/flexspi_hyper_flash.c99
-rw-r--r--ports/mimxrt/hal/flexspi_hyper_flash.h3
-rw-r--r--ports/mimxrt/hal/flexspi_nor_flash.c15
-rw-r--r--ports/mimxrt/hal/flexspi_nor_flash.h1
-rw-r--r--ports/mimxrt/hal/peripherals.h1
-rw-r--r--ports/mimxrt/hal/pin_mux.h1
-rw-r--r--ports/mimxrt/hal/resethandler_MIMXRT10xx.S175
-rwxr-xr-xtools/autobuild/build-mimxrt-latest.sh2
-rwxr-xr-xtools/codeformat.py1
82 files changed, 4830 insertions, 3633 deletions
diff --git a/ports/mimxrt/Makefile b/ports/mimxrt/Makefile
index 8b1bb2bfa..fcbd97b20 100644
--- a/ports/mimxrt/Makefile
+++ b/ports/mimxrt/Makefile
@@ -13,6 +13,17 @@ endif
include ../../py/mkenv.mk
include $(BOARD_DIR)/mpconfigboard.mk
+# Set optional flash configuration variables
+BOARD_FLASH_RESERVED ?=
+
+LD_MEMORY_CONFIG_DEFINES += \
+ BOARD_FLASH_TYPE=$(BOARD_FLASH_TYPE) \
+ BOARD_FLASH_SIZE=$(BOARD_FLASH_SIZE)
+
+ifdef $(BOARD_FLASH_RESERVED)
+LD_MEMORY_CONFIG_DEFINES += BOARD_FLASH_RESERVED=$(BOARD_FLASH_RESERVED)
+endif
+
# Qstr definitions (must come before including py.mk)
QSTR_DEFS = qstrdefsport.h
QSTR_GLOBAL_DEPENDENCIES = $(BOARD_DIR)/mpconfigboard.h
@@ -28,9 +39,10 @@ include $(TOP)/py/py.mk
GIT_SUBMODULES = lib/tinyusb lib/nxp_driver
MCU_DIR = lib/nxp_driver/sdk/devices/$(MCU_SERIES)
-LD_FILES = boards/$(BOARD)/$(BOARD).ld boards/$(MCU_SERIES).ld boards/common.ld
+LD_FILES = boards/$(MCU_SERIES).ld boards/common.ld
MAKE_PINS = boards/make-pins.py
+MAKE_FLEXRAM_LD = boards/make-flexram-config.py
BOARD_PINS = $(BOARD_DIR)/pins.csv
AF_FILE = boards/$(MCU_SERIES)_af.csv
PREFIX_FILE = boards/mimxrt_prefix.c
@@ -39,18 +51,19 @@ GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
GEN_PINS_QSTR = $(BUILD)/pins_qstr.h
GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h
GEN_PINS_AF_PY = $(BUILD)/pins_af.py
+GEN_FLEXRAM_CONFIG_SRC = $(BUILD)/flexram_config.s
# mcu driver cause following warnings
#CFLAGS += -Wno-error=float-equal -Wno-error=nested-externs
CFLAGS += -Wno-error=unused-parameter
INC += -I.
+INC += -Ihal
INC += -I$(BOARD_DIR)
INC += -I$(BUILD)
INC += -I$(TOP)
INC += -I$(TOP)/$(MCU_DIR)
INC += -I$(TOP)/$(MCU_DIR)/drivers
-INC += -I$(TOP)/$(MCU_DIR)/project_template
INC += -I$(TOP)/lib/cmsis/inc
INC += -I$(TOP)/lib/oofatfs
INC += -I$(TOP)/lib/tinyusb/hw
@@ -67,10 +80,20 @@ CFLAGS += -DXIP_EXTERNAL_FLASH=1 \
-D__STARTUP_CLEAR_BSS \
-D__STARTUP_INITIALIZE_RAMFUNCTION \
-D__START=main \
- -DCPU_HEADER_H='<$(MCU_SERIES).h>'
+ -DCPU_HEADER_H='<$(MCU_SERIES).h>' \
+ -DBOARD_FLASH_SIZE=$(BOARD_FLASH_SIZE) \
+ -DBOARD_FLASH_CONFIG_HEADER_H=\"$(BOARD)_flexspi_nor_config.h\"
+
+ifeq ($(BOARD_FLASH_TYPE), qspi_nor)
+CFLAGS += -DBOARD_FLASH_OPS_HEADER_H=\"hal/flexspi_nor_flash.h\"
+else ifeq ($(BOARD_FLASH_TYPE), hyperflash)
+CFLAGS += -DBOARD_FLASH_OPS_HEADER_H=\"hal/flexspi_hyper_flash.h\"
+endif
+
ifeq ($(MICROPY_PY_MACHINE_SDCARD),1)
CFLAGS += -DMICROPY_PY_MACHINE_SDCARD=1
endif
+
CFLAGS += $(CFLAGS_MOD) $(CFLAGS_EXTRA)
# Configure floating point support
@@ -88,7 +111,8 @@ endif
SUPPORTS_HARDWARE_FP_SINGLE = 0
SUPPORTS_HARDWARE_FP_DOUBLE = 0
-LDFLAGS = $(addprefix -T,$(LD_FILES)) -Map=$@.map --cref --print-memory-usage
+LDFLAGS = -Map=$@.map --cref --print-memory-usage
+LDDEFINES = $(addprefix -D, $(LD_MEMORY_CONFIG_DEFINES))
LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
# Tune for Debugging or Optimization
@@ -144,7 +168,6 @@ SRC_HAL_IMX_C += $(MCU_DIR)/drivers/fsl_usdhc.c
endif
SRC_C += \
- $(BOARD_DIR)/flash_config.c \
board_init.c \
dma_channel.c \
drivers/bus/softspi.c \
@@ -184,6 +207,18 @@ SRC_C += \
$(SRC_TINYUSB_C) \
$(SRC_HAL_IMX_C) \
+ifeq ($(BOARD_FLASH_TYPE), qspi_nor)
+SRC_C += \
+ hal/flexspi_nor_flash.c \
+ $(BOARD_DIR)/qspi_nor_flash_config.c
+else ifeq ($(BOARD_FLASH_TYPE), hyperflash)
+SRC_C += \
+ hal/flexspi_hyper_flash.c \
+ $(BOARD_DIR)/qspi_hyper_flash_config.c
+else
+$(error Error: Unknown board flash type $(BOARD_FLASH_TYPE))
+endif
+
ifeq ($(MICROPY_FLOAT_IMPL),double)
LIBM_SRC_C += $(addprefix lib/libm_dbl/,\
__cos.c \
@@ -277,7 +312,9 @@ ifeq ($(MICROPY_FLOAT_IMPL),double)
$(LIBM_O): CFLAGS := $(filter-out -Wdouble-promotion -Wfloat-conversion, $(CFLAGS))
endif
-SRC_SS += $(MCU_DIR)/gcc/startup_$(MCU_SERIES).S
+SRC_SS = \
+ $(MCU_DIR)/gcc/startup_$(MCU_SERIES).S \
+ hal/resethandler_MIMXRT10xx.S
SRC_S += shared/runtime/gchelper_m3.s \
@@ -316,8 +353,10 @@ $(BUILD)/lib/tinyusb/src/device/usbd.o: CFLAGS += -Wno-missing-braces
all: $(BUILD)/firmware.hex $(BUILD)/firmware.bin
$(BUILD)/firmware.elf: $(OBJ)
+ $(ECHO) "PREPROCESS LINK $@"
+ $(Q)$(CC) -E -x c $(LDDEFINES) $(LD_FILES) | grep -v '^#' > $(BUILD)/link.ld
$(ECHO) "LINK $@"
- $(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
+ $(Q)$(LD) -T$(BUILD)/link.ld $(LDFLAGS) -o $@ $^ $(LIBS)
$(Q)$(SIZE) $@
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
@@ -326,17 +365,23 @@ $(BUILD)/firmware.bin: $(BUILD)/firmware.elf
$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
$(Q)$(OBJCOPY) -O ihex -R .eeprom $< $@
-# Making OBJ use an order-only depenedency on the generated pins.h file
+# Making OBJ use an order-only dependency on the generated pins.h file
# has the side effect of making the pins.h file before we actually compile
# any of the objects. The normal dependency generation will deal with the
# case when pins.h is modified. But when it doesn't exist, we don't know
# which source files might need it.
-$(OBJ): | $(GEN_PINS_HDR)
+$(OBJ): | $(GEN_PINS_HDR) $(GEN_FLEXRAM_CONFIG_SRC)
# With conditional pins, we may need to regenerate qstrdefs.h when config
# options change.
$(HEADER_BUILD)/qstrdefs.generated.h: $(BOARD_DIR)/mpconfigboard.h
+$(GEN_FLEXRAM_CONFIG_SRC):
+ $(ECHO) "Create $@"
+ $(Q)$(PYTHON) $(MAKE_FLEXRAM_LD) -d $(TOP)/$(MCU_DIR)/$(MCU_SERIES).h \
+ -f $(TOP)/$(MCU_DIR)/$(MCU_SERIES)_features.h -l boards/$(MCU_SERIES).ld -c $(MCU_SERIES) > $(GEN_FLEXRAM_CONFIG_SRC)
+
+
# Use a pattern rule here so that make will only call make-pins.py once to make
# both pins_gen.c and pins.h
$(BUILD)/%_gen.c $(HEADER_BUILD)/%.h: $(BOARD_PINS) $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD)
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK.ld b/ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK.ld
deleted file mode 100644
index 83da7ec73..000000000
--- a/ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK.ld
+++ /dev/null
@@ -1 +0,0 @@
-flash_size = 16M; \ No newline at end of file
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK_flexspi_nor_config.h
new file mode 100644
index 000000000..aeb5f356e
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1010_EVK/MIMXRT1010_EVK_flexspi_nor_config.h
@@ -0,0 +1,257 @@
+/*
+ * Copyright 2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1010_flexspi_nor_config.h
+
+#ifndef __EVKMIMXRT1011_FLEXSPI_NOR_CONFIG__
+#define __EVKMIMXRT1011_FLEXSPI_NOR_CONFIG__
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_common.h"
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief XIP_BOARD driver version 2.0.0. */
+#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
+/*@}*/
+
+/* FLEXSPI memory config block related defintions */
+#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
+#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
+#define FLEXSPI_CFG_BLK_SIZE (512)
+
+/* FLEXSPI Feature related definitions */
+#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related defintions */
+#define CMD_INDEX_READ 0
+#define CMD_INDEX_READSTATUS 1
+#define CMD_INDEX_WRITEENABLE 2
+#define CMD_INDEX_WRITE 4
+
+#define CMD_LUT_SEQ_IDX_READ 0
+#define CMD_LUT_SEQ_IDX_READSTATUS 1
+#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define CMD_LUT_SEQ_IDX_WRITE 9
+
+#define CMD_SDR 0x01
+#define CMD_DDR 0x21
+#define RADDR_SDR 0x02
+#define RADDR_DDR 0x22
+#define CADDR_SDR 0x03
+#define CADDR_DDR 0x23
+#define MODE1_SDR 0x04
+#define MODE1_DDR 0x24
+#define MODE2_SDR 0x05
+#define MODE2_DDR 0x25
+#define MODE4_SDR 0x06
+#define MODE4_DDR 0x26
+#define MODE8_SDR 0x07
+#define MODE8_DDR 0x27
+#define WRITE_SDR 0x08
+#define WRITE_DDR 0x28
+#define READ_SDR 0x09
+#define READ_DDR 0x29
+#define LEARN_SDR 0x0A
+#define LEARN_DDR 0x2A
+#define DATSZ_SDR 0x0B
+#define DATSZ_DDR 0x2B
+#define DUMMY_SDR 0x0C
+#define DUMMY_DDR 0x2C
+#define DUMMY_RWDS_SDR 0x0D
+#define DUMMY_RWDS_DDR 0x2D
+#define JMP_ON_CS 0x1F
+#define STOP 0
+
+#define FLEXSPI_1PAD 0
+#define FLEXSPI_2PAD 1
+#define FLEXSPI_4PAD 2
+#define FLEXSPI_8PAD 3
+
+#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
+ (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+ FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+// !@brief Definitions for FlexSPI Serial Clock Frequency
+typedef enum _FlexSpiSerialClockFreq
+{
+ kFlexSpiSerialClk_30MHz = 1,
+ kFlexSpiSerialClk_50MHz = 2,
+ kFlexSpiSerialClk_60MHz = 3,
+ kFlexSpiSerialClk_75MHz = 4,
+ kFlexSpiSerialClk_80MHz = 5,
+ kFlexSpiSerialClk_100MHz = 6,
+ kFlexSpiSerialClk_120MHz = 7,
+ kFlexSpiSerialClk_133MHz = 8,
+} flexspi_serial_clk_freq_t;
+
+// !@brief FlexSPI clock configuration type
+enum
+{
+ kFlexSpiClk_SDR, // !< Clock configure for SDR mode
+ kFlexSpiClk_DDR, // !< Clock configurat for DDR mode
+};
+
+// !@brief FlexSPI Read Sample Clock Source definition
+typedef enum _FlashReadSampleClkSource
+{
+ kFlexSPIReadSampleClk_LoopbackInternally = 0,
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
+ kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
+ kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
+} flexspi_read_sample_clk_t;
+
+// !@brief Misc feature bit definitions
+enum
+{
+ kFlexSpiMiscOffset_DiffClkEnable = 0, // !< Bit for Differential clock enable
+ kFlexSpiMiscOffset_Ck2Enable = 1, // !< Bit for CK2 enable
+ kFlexSpiMiscOffset_ParallelEnable = 2, // !< Bit for Parallel mode enable
+ kFlexSpiMiscOffset_WordAddressableEnable = 3, // !< Bit for Word Addressable enable
+ kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, // !< Bit for Safe Configuration Frequency enable
+ kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, // !< Bit for Pad setting override enable
+ kFlexSpiMiscOffset_DdrModeEnable = 6, // !< Bit for DDR clock confiuration indication.
+};
+
+// !@brief Flash Type Definition
+enum
+{
+ kFlexSpiDeviceType_SerialNOR = 1, // !< Flash devices are Serial NOR
+ kFlexSpiDeviceType_SerialNAND = 2, // !< Flash devices are Serial NAND
+ kFlexSpiDeviceType_SerialRAM = 3, // !< Flash devices are Serial RAM/HyperFLASH
+ kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, // !< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
+ kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, // !< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
+};
+
+// !@brief Flash Pad Definitions
+enum
+{
+ kSerialFlash_1Pad = 1,
+ kSerialFlash_2Pads = 2,
+ kSerialFlash_4Pads = 4,
+ kSerialFlash_8Pads = 8,
+};
+
+// !@brief FlexSPI LUT Sequence structure
+typedef struct _lut_sequence
+{
+ uint8_t seqNum; // !< Sequence Number, valid number: 1-16
+ uint8_t seqId; // !< Sequence Index, valid number: 0-15
+ uint16_t reserved;
+} flexspi_lut_seq_t;
+
+// !@brief Flash Configuration Command Type
+enum
+{
+ kDeviceConfigCmdType_Generic, // !< Generic command, for example: configure dummy cycles, drive strength, etc
+ kDeviceConfigCmdType_QuadEnable, // !< Quad Enable command
+ kDeviceConfigCmdType_Spi2Xpi, // !< Switch from SPI to DPI/QPI/OPI mode
+ kDeviceConfigCmdType_Xpi2Spi, // !< Switch from DPI/QPI/OPI to SPI mode
+ kDeviceConfigCmdType_Spi2NoCmd, // !< Switch to 0-4-4/0-8-8 mode
+ kDeviceConfigCmdType_Reset, // !< Reset device command
+};
+
+// !@brief FlexSPI Memory Configuration Block
+typedef struct _FlexSPIConfig
+{
+ uint32_t tag; // !< [0x000-0x003] Tag, fixed value 0x42464346UL
+ uint32_t version; // !< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
+ uint32_t reserved0; // !< [0x008-0x00b] Reserved for future use
+ uint8_t readSampleClkSrc; // !< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
+ uint8_t csHoldTime; // !< [0x00d-0x00d] CS hold time, default value: 3
+ uint8_t csSetupTime; // !< [0x00e-0x00e] CS setup time, default value: 3
+ uint8_t columnAddressWidth; // !< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
+ // ! Serial NAND, need to refer to datasheet
+ uint8_t deviceModeCfgEnable; // !< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
+ uint8_t deviceModeType; // !< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
+ // ! Generic configuration, etc.
+ uint16_t waitTimeCfgCommands; // !< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
+ // ! DPI/QPI/OPI switch or reset command
+ flexspi_lut_seq_t deviceModeSeq; // !< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
+ // ! sequence number, [31:16] Reserved
+ uint32_t deviceModeArg; // !< [0x018-0x01b] Argument/Parameter for device configuration
+ uint8_t configCmdEnable; // !< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
+ uint8_t configModeType[3]; // !< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
+ flexspi_lut_seq_t
+ configCmdSeqs[3]; // !< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
+ uint32_t reserved1; // !< [0x02c-0x02f] Reserved for future use
+ uint32_t configCmdArgs[3]; // !< [0x030-0x03b] Arguments/Parameters for device Configuration commands
+ uint32_t reserved2; // !< [0x03c-0x03f] Reserved for future use
+ uint32_t controllerMiscOption; // !< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
+ // ! details
+ uint8_t deviceType; // !< [0x044-0x044] Device Type: See Flash Type Definition for more details
+ uint8_t sflashPadType; // !< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
+ uint8_t serialClkFreq; // !< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
+ // ! Chapter for more details
+ uint8_t lutCustomSeqEnable; // !< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
+ // ! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
+ uint32_t reserved3[2]; // !< [0x048-0x04f] Reserved for future use
+ uint32_t sflashA1Size; // !< [0x050-0x053] Size of Flash connected to A1
+ uint32_t sflashA2Size; // !< [0x054-0x057] Size of Flash connected to A2
+ uint32_t sflashB1Size; // !< [0x058-0x05b] Size of Flash connected to B1
+ uint32_t sflashB2Size; // !< [0x05c-0x05f] Size of Flash connected to B2
+ uint32_t csPadSettingOverride; // !< [0x060-0x063] CS pad setting override value
+ uint32_t sclkPadSettingOverride; // !< [0x064-0x067] SCK pad setting override value
+ uint32_t dataPadSettingOverride; // !< [0x068-0x06b] data pad setting override value
+ uint32_t dqsPadSettingOverride; // !< [0x06c-0x06f] DQS pad setting override value
+ uint32_t timeoutInMs; // !< [0x070-0x073] Timeout threshold for read status command
+ uint32_t commandInterval; // !< [0x074-0x077] CS deselect interval between two commands
+ uint16_t dataValidTime[2]; // !< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
+ uint16_t busyOffset; // !< [0x07c-0x07d] Busy offset, valid value: 0-31
+ uint16_t busyBitPolarity; // !< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
+ // ! busy flag is 0 when flash device is busy
+ uint32_t lookupTable[64]; // !< [0x080-0x17f] Lookup table holds Flash command sequences
+ flexspi_lut_seq_t lutCustomSeq[12]; // !< [0x180-0x1af] Customizable LUT Sequences
+ uint32_t reserved4[4]; // !< [0x1b0-0x1bf] Reserved for future use
+} flexspi_mem_config_t;
+
+/* */
+#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
+#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
+#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
+#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
+#define NOR_CMD_LUT_SEQ_IDX_READID 8
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
+#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
+#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
+
+/*
+ * Serial NOR configuration block
+ */
+typedef struct _flexspi_nor_config
+{
+ flexspi_mem_config_t memConfig; // !< Common memory configuration info via FlexSPI
+ uint32_t pageSize; // !< Page size of Serial NOR
+ uint32_t sectorSize; // !< Sector size of Serial NOR
+ uint8_t ipcmdSerialClkFreq; // !< Clock frequency for IP command
+ uint8_t isUniformBlockSize; // !< Sector/Block size is the same
+ uint8_t reserved0[2]; // !< Reserved for future use
+ uint8_t serialNorType; // !< Serial NOR Flash type: 0/1/2/3
+ uint8_t needExitNoCmdMode; // !< Need to exit NoCmd mode before other IP command
+ uint8_t halfClkForNonReadCmd; // !< Half the Serial Clock for non-read command: true/false
+ uint8_t needRestoreNoCmdMode; // !< Need to Restore NoCmd mode after IP commmand execution
+ uint32_t blockSize; // !< Block size
+ uint32_t reserve2[11]; // !< Reserved for future use
+} flexspi_nor_config_t;
+
+#define FLASH_BUSY_STATUS_POL 0
+#define FLASH_BUSY_STATUS_OFFSET 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __EVKMIMXRT1011_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/clock_config.h b/ports/mimxrt/boards/MIMXRT1010_EVK/clock_config.h
new file mode 100644
index 000000000..76f3df422
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1010_EVK/clock_config.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
+
+#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 500000000U /*!< Core clock frequency: 500000000Hz */
+
+/* Clock outputs (values are in Hz): */
+#define BOARD_BOOTCLOCKRUN_ADC_ALT_CLK 40000000UL
+#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
+#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
+#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
+#define BOARD_BOOTCLOCKRUN_CORE_CLK_ROOT 500000000UL
+#define BOARD_BOOTCLOCKRUN_ENET_500M_REF_CLK 500000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 132000000UL
+#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 62500000UL
+#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 62500000UL
+#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 125000000UL
+#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
+#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
+#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
+#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 62500000UL
+#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
+#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL
+#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
+#define BOARD_BOOTCLOCKRUN_USBPHY_CLK 0UL
+
+/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
+/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
+ */
+extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
+/*! @brief Enet PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_enet_pll_config_t enetPllConfig_BOARD_BootClockRUN;
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/evkmimxrt1010_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1010_EVK/evkmimxrt1010_flexspi_nor_config.h
deleted file mode 100644
index 2cb4535ed..000000000
--- a/ports/mimxrt/boards/MIMXRT1010_EVK/evkmimxrt1010_flexspi_nor_config.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2019 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1010_flexspi_nor_config.h
-
-#ifndef __EVKMIMXRT1011_FLEXSPI_NOR_CONFIG__
-#define __EVKMIMXRT1011_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_common.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related defintions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_120MHz = 7,
- kFlexSpiSerialClk_133MHz = 8,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1011_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/flash_config.c b/ports/mimxrt/boards/MIMXRT1010_EVK/flash_config.c
deleted file mode 100644
index 5e7e5dcf1..000000000
--- a/ports/mimxrt/boards/MIMXRT1010_EVK/flash_config.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2019 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1010_flexspi_nor_config.c
-
-#include "evkmimxrt1010_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
- .sflashPadType = kSerialFlash_4Pads,
- .serialClkFreq = kFlexSpiSerialClk_100MHz,
- .sflashA1Size = 16u * 1024u * 1024u,
- .lookupTable =
- {
- // 0 Read LUTs 0 -> 0
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 1 Read status register -> 1
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 2 Fast read quad mode - SDR
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 3 Write Enable -> 3
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 4 Read extend parameters
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 5 Erase Sector -> 5
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 6 Write Status Reg
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 7 Page Program - quad mode (-> 9)
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 8 Read ID
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 9 Page Program - single mode -> 9
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 10 Enter QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 11 Erase Chip
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 12 Exit QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- },
- },
- .pageSize = 256u,
- .sectorSize = 4u * 1024u,
- .blockSize = 256u * 1024u,
- .isUniformBlockSize = false,
-};
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.h
index 2cdb433e1..918513b23 100644
--- a/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.h
+++ b/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.h
@@ -1,14 +1,10 @@
#define MICROPY_HW_BOARD_NAME "i.MX RT1010 EVK"
#define MICROPY_HW_MCU_NAME "MIMXRT1011DAE5A"
-#define BOARD_FLASH_SIZE (16 * 1024 * 1024)
-
// i.MX RT1010 EVK has 1 board LED
#define MICROPY_HW_LED1_PIN (pin_GPIO_11)
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "evkmimxrt1010_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_nor_flash.h"
#define MICROPY_HW_NUM_PIN_IRQS (2 * 32)
@@ -33,7 +29,7 @@
{ IOMUXC_GPIO_AD_04_LPSPI1_SDO }, { IOMUXC_GPIO_AD_03_LPSPI1_SDI },
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx }
-#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx }
+#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx }
// Define mapping hardware I2C # to logical I2C #
// SDA/SCL HW-I2C Logical I2C
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.mk b/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.mk
index f616d5afd..c4c911d7d 100644
--- a/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.mk
+++ b/ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.mk
@@ -3,21 +3,18 @@ MCU_VARIANT = MIMXRT1011DAE5A
MICROPY_FLOAT_IMPL = single
MICROPY_PY_MACHINE_SDCARD = 0
+BOARD_FLASH_TYPE ?= qspi_nor
+BOARD_FLASH_SIZE ?= 0x1000000 # 16MB
-SRC_C += \
- hal/flexspi_nor_flash.c \
-
-JLINK_PATH = /media/RT1010-EVK/
+JLINK_PATH ?= /media/RT1010-EVK/
JLINK_COMMANDER_SCRIPT = $(BUILD)/script.jlink
-
ifdef JLINK_IP
JLINK_CONNECTION_SETTINGS = -IP $(JLINK_IP)
else
JLINK_CONNECTION_SETTINGS = -USB
endif
-
deploy_jlink: $(BUILD)/firmware.hex
$(Q)$(TOUCH) $(JLINK_COMMANDER_SCRIPT)
$(ECHO) "ExitOnError 1" > $(JLINK_COMMANDER_SCRIPT)
diff --git a/ports/mimxrt/boards/MIMXRT1010_EVK/qspi_nor_flash_config.c b/ports/mimxrt/boards/MIMXRT1010_EVK/qspi_nor_flash_config.c
new file mode 100644
index 000000000..83a45159c
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1010_EVK/qspi_nor_flash_config.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1010_flexspi_nor_config.c
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .sflashPadType = kSerialFlash_4Pads,
+ .serialClkFreq = kFlexSpiSerialClk_100MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .lookupTable =
+ {
+ // 0 Read LUTs 0 -> 0
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 1 Read status register -> 1
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 2 Fast read quad mode - SDR
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 3 Write Enable -> 3
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 4 Read extend parameters
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 5 Erase Sector -> 5
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 6 Write Status Reg
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 7 Page Program - quad mode (-> 9)
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 8 Read ID
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 9 Page Program - single mode -> 9
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 10 Enter QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 11 Erase Chip
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 12 Exit QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ },
+ },
+ .pageSize = 256u,
+ .sectorSize = 4u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = false,
+};
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1011.ld b/ports/mimxrt/boards/MIMXRT1011.ld
index d9a495685..22d5da319 100644
--- a/ports/mimxrt/boards/MIMXRT1011.ld
+++ b/ports/mimxrt/boards/MIMXRT1011.ld
@@ -1,15 +1,24 @@
/* Memory configuration */
+#if BOARD_FLASH_RESERVED
+reserved_size = BOARD_FLASH_RESERVED;
+#endif
+
+#if BOARD_FLASH_TYPE==qspi_nor
flash_start = 0x60000000;
+#else
+#error Unknown BOARD_FLASH_TYPE
+#endif
+flash_size = BOARD_FLASH_SIZE;
flash_end = DEFINED(reserved_size) ? ((flash_start) + (flash_size - reserved_size)) : ((flash_start) + (flash_size));
-flash_config_start = 0x60000400;
+flash_config_start = flash_start + 0x00000400;
flash_config_size = 0x00000C00;
-ivt_start = 0x60001000;
+ivt_start = flash_start + 0x00001000;
ivt_size = 0x00001000;
-interrupts_start = 0x60002000;
+interrupts_start = flash_start + 0x00002000;
interrupts_size = 0x00000400;
-text_start = 0x60002400;
-text_size = ((((text_start) + 1M) + (4k - 1)) & ~(4k - 1)) - (text_start); /* reserve 1M for code but align on 4k boundary */
-vfs_start = (text_start) + (text_size);
+text_start = flash_start + 0x00002400;
+vfs_start = flash_start + 0x00100000;
+text_size = ((vfs_start) - (text_start));
vfs_size = ((flash_end) - (vfs_start));
itcm_start = 0x00000000;
itcm_size = 0x00008000;
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK.ld b/ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK.ld
deleted file mode 100644
index fd1bf32ed..000000000
--- a/ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK.ld
+++ /dev/null
@@ -1 +0,0 @@
-flash_size = 8M; \ No newline at end of file
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK_flexspi_nor_config.h
new file mode 100644
index 000000000..26ed3de36
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1020_EVK/MIMXRT1020_EVK_flexspi_nor_config.h
@@ -0,0 +1,258 @@
+/*
+ * Copyright 2019 NXP.
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1020_flexspi_nor_config.h
+
+#ifndef __EVKMIMXRT1020_FLEXSPI_NOR_CONFIG__
+#define __EVKMIMXRT1020_FLEXSPI_NOR_CONFIG__
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_common.h"
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief XIP_BOARD driver version 2.0.0. */
+#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
+/*@}*/
+
+/* FLEXSPI memory config block related defintions */
+#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
+#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
+#define FLEXSPI_CFG_BLK_SIZE (512)
+
+/* FLEXSPI Feature related definitions */
+#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related defintions */
+#define CMD_INDEX_READ 0
+#define CMD_INDEX_READSTATUS 1
+#define CMD_INDEX_WRITEENABLE 2
+#define CMD_INDEX_WRITE 4
+
+#define CMD_LUT_SEQ_IDX_READ 0
+#define CMD_LUT_SEQ_IDX_READSTATUS 1
+#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define CMD_LUT_SEQ_IDX_WRITE 9
+
+#define CMD_SDR 0x01
+#define CMD_DDR 0x21
+#define RADDR_SDR 0x02
+#define RADDR_DDR 0x22
+#define CADDR_SDR 0x03
+#define CADDR_DDR 0x23
+#define MODE1_SDR 0x04
+#define MODE1_DDR 0x24
+#define MODE2_SDR 0x05
+#define MODE2_DDR 0x25
+#define MODE4_SDR 0x06
+#define MODE4_DDR 0x26
+#define MODE8_SDR 0x07
+#define MODE8_DDR 0x27
+#define WRITE_SDR 0x08
+#define WRITE_DDR 0x28
+#define READ_SDR 0x09
+#define READ_DDR 0x29
+#define LEARN_SDR 0x0A
+#define LEARN_DDR 0x2A
+#define DATSZ_SDR 0x0B
+#define DATSZ_DDR 0x2B
+#define DUMMY_SDR 0x0C
+#define DUMMY_DDR 0x2C
+#define DUMMY_RWDS_SDR 0x0D
+#define DUMMY_RWDS_DDR 0x2D
+#define JMP_ON_CS 0x1F
+#define STOP 0
+
+#define FLEXSPI_1PAD 0
+#define FLEXSPI_2PAD 1
+#define FLEXSPI_4PAD 2
+#define FLEXSPI_8PAD 3
+
+#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
+ (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+ FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+// !@brief Definitions for FlexSPI Serial Clock Frequency
+typedef enum _FlexSpiSerialClockFreq
+{
+ kFlexSpiSerialClk_30MHz = 1,
+ kFlexSpiSerialClk_50MHz = 2,
+ kFlexSpiSerialClk_60MHz = 3,
+ kFlexSpiSerialClk_75MHz = 4,
+ kFlexSpiSerialClk_80MHz = 5,
+ kFlexSpiSerialClk_100MHz = 6,
+ kFlexSpiSerialClk_133MHz = 7,
+ kFlexSpiSerialClk_166MHz = 8,
+ kFlexSpiSerialClk_200MHz = 9,
+} flexspi_serial_clk_freq_t;
+
+// !@brief FlexSPI clock configuration type
+enum
+{
+ kFlexSpiClk_SDR, // !< Clock configure for SDR mode
+ kFlexSpiClk_DDR, // !< Clock configurat for DDR mode
+};
+
+// !@brief FlexSPI Read Sample Clock Source definition
+typedef enum _FlashReadSampleClkSource
+{
+ kFlexSPIReadSampleClk_LoopbackInternally = 0,
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
+ kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
+ kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
+} flexspi_read_sample_clk_t;
+
+// !@brief Misc feature bit definitions
+enum
+{
+ kFlexSpiMiscOffset_DiffClkEnable = 0, // !< Bit for Differential clock enable
+ kFlexSpiMiscOffset_Ck2Enable = 1, // !< Bit for CK2 enable
+ kFlexSpiMiscOffset_ParallelEnable = 2, // !< Bit for Parallel mode enable
+ kFlexSpiMiscOffset_WordAddressableEnable = 3, // !< Bit for Word Addressable enable
+ kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, // !< Bit for Safe Configuration Frequency enable
+ kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, // !< Bit for Pad setting override enable
+ kFlexSpiMiscOffset_DdrModeEnable = 6, // !< Bit for DDR clock confiuration indication.
+};
+
+// !@brief Flash Type Definition
+enum
+{
+ kFlexSpiDeviceType_SerialNOR = 1, // !< Flash devices are Serial NOR
+ kFlexSpiDeviceType_SerialNAND = 2, // !< Flash devices are Serial NAND
+ kFlexSpiDeviceType_SerialRAM = 3, // !< Flash devices are Serial RAM/HyperFLASH
+ kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, // !< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
+ kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, // !< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
+};
+
+// !@brief Flash Pad Definitions
+enum
+{
+ kSerialFlash_1Pad = 1,
+ kSerialFlash_2Pads = 2,
+ kSerialFlash_4Pads = 4,
+ kSerialFlash_8Pads = 8,
+};
+
+// !@brief FlexSPI LUT Sequence structure
+typedef struct _lut_sequence
+{
+ uint8_t seqNum; // !< Sequence Number, valid number: 1-16
+ uint8_t seqId; // !< Sequence Index, valid number: 0-15
+ uint16_t reserved;
+} flexspi_lut_seq_t;
+
+// !@brief Flash Configuration Command Type
+enum
+{
+ kDeviceConfigCmdType_Generic, // !< Generic command, for example: configure dummy cycles, drive strength, etc
+ kDeviceConfigCmdType_QuadEnable, // !< Quad Enable command
+ kDeviceConfigCmdType_Spi2Xpi, // !< Switch from SPI to DPI/QPI/OPI mode
+ kDeviceConfigCmdType_Xpi2Spi, // !< Switch from DPI/QPI/OPI to SPI mode
+ kDeviceConfigCmdType_Spi2NoCmd, // !< Switch to 0-4-4/0-8-8 mode
+ kDeviceConfigCmdType_Reset, // !< Reset device command
+};
+
+// !@brief FlexSPI Memory Configuration Block
+typedef struct _FlexSPIConfig
+{
+ uint32_t tag; // !< [0x000-0x003] Tag, fixed value 0x42464346UL
+ uint32_t version; // !< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
+ uint32_t reserved0; // !< [0x008-0x00b] Reserved for future use
+ uint8_t readSampleClkSrc; // !< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
+ uint8_t csHoldTime; // !< [0x00d-0x00d] CS hold time, default value: 3
+ uint8_t csSetupTime; // !< [0x00e-0x00e] CS setup time, default value: 3
+ uint8_t columnAddressWidth; // !< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
+ // ! Serial NAND, need to refer to datasheet
+ uint8_t deviceModeCfgEnable; // !< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
+ uint8_t deviceModeType; // !< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
+ // ! Generic configuration, etc.
+ uint16_t waitTimeCfgCommands; // !< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
+ // ! DPI/QPI/OPI switch or reset command
+ flexspi_lut_seq_t deviceModeSeq; // !< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
+ // ! sequence number, [31:16] Reserved
+ uint32_t deviceModeArg; // !< [0x018-0x01b] Argument/Parameter for device configuration
+ uint8_t configCmdEnable; // !< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
+ uint8_t configModeType[3]; // !< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
+ flexspi_lut_seq_t
+ configCmdSeqs[3]; // !< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
+ uint32_t reserved1; // !< [0x02c-0x02f] Reserved for future use
+ uint32_t configCmdArgs[3]; // !< [0x030-0x03b] Arguments/Parameters for device Configuration commands
+ uint32_t reserved2; // !< [0x03c-0x03f] Reserved for future use
+ uint32_t controllerMiscOption; // !< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
+ // ! details
+ uint8_t deviceType; // !< [0x044-0x044] Device Type: See Flash Type Definition for more details
+ uint8_t sflashPadType; // !< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
+ uint8_t serialClkFreq; // !< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
+ // ! Chapter for more details
+ uint8_t lutCustomSeqEnable; // !< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
+ // ! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
+ uint32_t reserved3[2]; // !< [0x048-0x04f] Reserved for future use
+ uint32_t sflashA1Size; // !< [0x050-0x053] Size of Flash connected to A1
+ uint32_t sflashA2Size; // !< [0x054-0x057] Size of Flash connected to A2
+ uint32_t sflashB1Size; // !< [0x058-0x05b] Size of Flash connected to B1
+ uint32_t sflashB2Size; // !< [0x05c-0x05f] Size of Flash connected to B2
+ uint32_t csPadSettingOverride; // !< [0x060-0x063] CS pad setting override value
+ uint32_t sclkPadSettingOverride; // !< [0x064-0x067] SCK pad setting override value
+ uint32_t dataPadSettingOverride; // !< [0x068-0x06b] data pad setting override value
+ uint32_t dqsPadSettingOverride; // !< [0x06c-0x06f] DQS pad setting override value
+ uint32_t timeoutInMs; // !< [0x070-0x073] Timeout threshold for read status command
+ uint32_t commandInterval; // !< [0x074-0x077] CS deselect interval between two commands
+ uint16_t dataValidTime[2]; // !< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
+ uint16_t busyOffset; // !< [0x07c-0x07d] Busy offset, valid value: 0-31
+ uint16_t busyBitPolarity; // !< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
+ // ! busy flag is 0 when flash device is busy
+ uint32_t lookupTable[64]; // !< [0x080-0x17f] Lookup table holds Flash command sequences
+ flexspi_lut_seq_t lutCustomSeq[12]; // !< [0x180-0x1af] Customizable LUT Sequences
+ uint32_t reserved4[4]; // !< [0x1b0-0x1bf] Reserved for future use
+} flexspi_mem_config_t;
+
+/* */
+#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
+#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
+#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
+#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
+#define NOR_CMD_LUT_SEQ_IDX_READID 8
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
+#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
+#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
+
+/*
+ * Serial NOR configuration block
+ */
+typedef struct _flexspi_nor_config
+{
+ flexspi_mem_config_t memConfig; // !< Common memory configuration info via FlexSPI
+ uint32_t pageSize; // !< Page size of Serial NOR
+ uint32_t sectorSize; // !< Sector size of Serial NOR
+ uint8_t ipcmdSerialClkFreq; // !< Clock frequency for IP command
+ uint8_t isUniformBlockSize; // !< Sector/Block size is the same
+ uint8_t reserved0[2]; // !< Reserved for future use
+ uint8_t serialNorType; // !< Serial NOR Flash type: 0/1/2/3
+ uint8_t needExitNoCmdMode; // !< Need to exit NoCmd mode before other IP command
+ uint8_t halfClkForNonReadCmd; // !< Half the Serial Clock for non-read command: true/false
+ uint8_t needRestoreNoCmdMode; // !< Need to Restore NoCmd mode after IP commmand execution
+ uint32_t blockSize; // !< Block size
+ uint32_t reserve2[11]; // !< Reserved for future use
+} flexspi_nor_config_t;
+
+#define FLASH_BUSY_STATUS_POL 0
+#define FLASH_BUSY_STATUS_OFFSET 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __EVKMIMXRT1020_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/clock_config.h b/ports/mimxrt/boards/MIMXRT1020_EVK/clock_config.h
new file mode 100644
index 000000000..21d4e630a
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1020_EVK/clock_config.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2018-2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
+
+#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 500000000U /*!< Core clock frequency: 500000000Hz */
+
+/* Clock outputs (values are in Hz): */
+#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 500000000UL
+#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL
+#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
+#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
+#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
+#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_ENET_500M_REF_CLK 500000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 132000000UL
+#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 62500000UL
+#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 62500000UL
+#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 125000000UL
+#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
+#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
+#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
+#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 62500000UL
+#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 62500000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
+#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL
+#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
+#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 176000000UL
+#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 176000000UL
+
+/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
+/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
+ */
+extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
+/*! @brief Enet PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_enet_pll_config_t enetPllConfig_BOARD_BootClockRUN;
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/evkmimxrt1020_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1020_EVK/evkmimxrt1020_flexspi_nor_config.h
deleted file mode 100644
index 195c0c225..000000000
--- a/ports/mimxrt/boards/MIMXRT1020_EVK/evkmimxrt1020_flexspi_nor_config.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright 2019 NXP.
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1020_flexspi_nor_config.h
-
-#ifndef __EVKMIMXRT1020_FLEXSPI_NOR_CONFIG__
-#define __EVKMIMXRT1020_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_common.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related defintions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_133MHz = 7,
- kFlexSpiSerialClk_166MHz = 8,
- kFlexSpiSerialClk_200MHz = 9,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1020_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/flash_config.c b/ports/mimxrt/boards/MIMXRT1020_EVK/flash_config.c
deleted file mode 100644
index 5377cc1b2..000000000
--- a/ports/mimxrt/boards/MIMXRT1020_EVK/flash_config.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright 2019 NXP.
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1010_flexspi_nor_config.c
-
-#include "evkmimxrt1020_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
- .busyOffset = FLASH_BUSY_STATUS_OFFSET, // Status bit 0 indicates busy.
- .busyBitPolarity = FLASH_BUSY_STATUS_POL, // Busy when the bit is 1.
- .deviceModeCfgEnable = 1u,
- .deviceModeType = kDeviceConfigCmdType_QuadEnable,
- .deviceModeSeq = {
- .seqId = 4u,
- .seqNum = 1u,
- },
- .deviceModeArg = 0x40,
- // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
- .deviceType = kFlexSpiDeviceType_SerialNOR,
- .sflashPadType = kSerialFlash_4Pads,
- .serialClkFreq = kFlexSpiSerialClk_30MHz,
- .sflashA1Size = 8u * 1024u * 1024u,
- .lookupTable =
- {
- // 0 Read LUTs 0 -> 0
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 1 Read status register -> 1
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 2 Fast read quad mode - SDR
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 3 Write Enable -> 3
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 4 Read extend parameters
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 5 Erase Sector -> 5
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 6 Write Status Reg
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 7 Page Program - quad mode (-> 9)
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 8 Read ID
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 9 Page Program - single mode -> 9
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 10 Enter QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 11 Erase Chip
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 12 Exit QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- },
- },
- .pageSize = 256u,
- .sectorSize = 4u * 1024u,
- .blockSize = 256u * 1024u,
- .isUniformBlockSize = false,
- .ipcmdSerialClkFreq = kFlexSpiSerialClk_30MHz,
-};
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h
index d7fe575ab..35c24b3d4 100644
--- a/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h
+++ b/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h
@@ -1,15 +1,11 @@
#define MICROPY_HW_BOARD_NAME "i.MX RT1020 EVK"
#define MICROPY_HW_MCU_NAME "MIMXRT1021DAG5A"
-#define BOARD_FLASH_SIZE (8 * 1024 * 1024)
-
// i.MX RT1020 EVK has 1 board LED
// Todo: think about replacing the define with searching in the generated pins?
#define MICROPY_HW_LED1_PIN (pin_GPIO_AD_B0_05)
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "evkmimxrt1020_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_nor_flash.h"
#define MICROPY_HW_NUM_PIN_IRQS (3 * 32)
@@ -43,13 +39,13 @@
{ 0 }, { 0 }, \
{ 0 }, { 0 }, \
{ IOMUXC_GPIO_AD_B1_12_LPSPI3_SCK }, { IOMUXC_GPIO_AD_B1_13_LPSPI3_PCS0 }, \
- { IOMUXC_GPIO_AD_B1_14_LPSPI3_SDO }, { IOMUXC_GPIO_AD_B1_15_LPSPI3_SDI },
+ { IOMUXC_GPIO_AD_B1_14_LPSPI3_SDO }, { IOMUXC_GPIO_AD_B1_15_LPSPI3_SDI },
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx, \
- kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
+ kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx, \
- kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
+ kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
// Define mapping hardware I2C # to logical I2C #
// SDA/SCL HW-I2C Logical I2C
@@ -65,14 +61,14 @@
{ 0 }, { 0 }, \
{ IOMUXC_GPIO_SD_B1_02_LPI2C4_SCL }, { IOMUXC_GPIO_SD_B1_03_LPI2C4_SDA },
-#define USDHC_DUMMY_PIN NULL , 0
+#define USDHC_DUMMY_PIN NULL, 0
#define MICROPY_USDHC1 \
{ \
.cmd = {GPIO_SD_B0_02_USDHC1_CMD}, \
.clk = { GPIO_SD_B0_03_USDHC1_CLK }, \
- .cd_b = { GPIO_SD_B0_06_USDHC1_CD_B },\
- .data0 = { GPIO_SD_B0_04_USDHC1_DATA0 },\
- .data1 = { GPIO_SD_B0_05_USDHC1_DATA1 },\
- .data2 = { GPIO_SD_B0_00_USDHC1_DATA2 },\
- .data3 = { GPIO_SD_B0_01_USDHC1_DATA3 },\
+ .cd_b = { GPIO_SD_B0_06_USDHC1_CD_B }, \
+ .data0 = { GPIO_SD_B0_04_USDHC1_DATA0 }, \
+ .data1 = { GPIO_SD_B0_05_USDHC1_DATA1 }, \
+ .data2 = { GPIO_SD_B0_00_USDHC1_DATA2 }, \
+ .data3 = { GPIO_SD_B0_01_USDHC1_DATA3 }, \
}
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.mk b/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.mk
index 6dd168652..34b714e62 100644
--- a/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.mk
+++ b/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.mk
@@ -3,21 +3,20 @@ MCU_VARIANT = MIMXRT1021DAG5A
MICROPY_FLOAT_IMPL = double
MICROPY_PY_MACHINE_SDCARD = 1
+BOARD_FLASH_TYPE ?= qspi_nor
+BOARD_FLASH_SIZE ?= 0x800000 # 8MB
JLINK_PATH ?= /media/RT1020-EVK/
JLINK_COMMANDER_SCRIPT = $(BUILD)/script.jlink
-
ifdef JLINK_IP
JLINK_CONNECTION_SETTINGS = -IP $(JLINK_IP)
else
-JLINK_CONNECTION_SETTINGS =
+JLINK_CONNECTION_SETTINGS = -USB
endif
-SRC_C += \
- hal/flexspi_nor_flash.c
-
deploy_jlink: $(BUILD)/firmware.hex
+ $(Q)$(TOUCH) $(JLINK_COMMANDER_SCRIPT)
$(ECHO) "ExitOnError 1" > $(JLINK_COMMANDER_SCRIPT)
$(ECHO) "speed auto" >> $(JLINK_COMMANDER_SCRIPT)
$(ECHO) "r" >> $(JLINK_COMMANDER_SCRIPT)
diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/qspi_nor_flash_config.c b/ports/mimxrt/boards/MIMXRT1020_EVK/qspi_nor_flash_config.c
new file mode 100644
index 000000000..7b2584d3d
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1020_EVK/qspi_nor_flash_config.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2019 NXP.
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/evkmimxrt1010_flexspi_nor_config.c
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .busyOffset = FLASH_BUSY_STATUS_OFFSET, // Status bit 0 indicates busy.
+ .busyBitPolarity = FLASH_BUSY_STATUS_POL, // Busy when the bit is 1.
+ .deviceModeCfgEnable = 1u,
+ .deviceModeType = kDeviceConfigCmdType_QuadEnable,
+ .deviceModeSeq = {
+ .seqId = 4u,
+ .seqNum = 1u,
+ },
+ .deviceModeArg = 0x40,
+ // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
+ .deviceType = kFlexSpiDeviceType_SerialNOR,
+ .sflashPadType = kSerialFlash_4Pads,
+ .serialClkFreq = kFlexSpiSerialClk_100MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .lookupTable =
+ {
+ // 0 Read LUTs 0 -> 0
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 1 Read status register -> 1
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 2 Fast read quad mode - SDR
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 3 Write Enable -> 3
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 4 Read extend parameters
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 5 Erase Sector -> 5
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 6 Write Status Reg
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 7 Page Program - quad mode (-> 9)
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 8 Read ID
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 9 Page Program - single mode -> 9
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 10 Enter QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 11 Erase Chip
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 12 Exit QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ },
+ },
+ .pageSize = 256u,
+ .sectorSize = 4u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = false,
+ // .ipcmdSerialClkFreq = kFlexSpiSerialClk_30MHz,
+};
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1021.ld b/ports/mimxrt/boards/MIMXRT1021.ld
index de0f259dc..92cd59d66 100644
--- a/ports/mimxrt/boards/MIMXRT1021.ld
+++ b/ports/mimxrt/boards/MIMXRT1021.ld
@@ -1,20 +1,29 @@
/* Memory configuration */
+#if defined BOARD_FLASH_RESERVED
+reserved_size = BOARD_FLASH_RESERVED;
+#endif
+
+#if BOARD_FLASH_TYPE == qspi_nor
flash_start = 0x60000000;
+#else
+#error Unknown BOARD_FLASH_TYPE
+#endif
+flash_size = BOARD_FLASH_SIZE;
flash_end = DEFINED(reserved_size) ? ((flash_start) + (flash_size - reserved_size)) : ((flash_start) + (flash_size));
flash_config_start = flash_start;
flash_config_size = 0x00001000;
-ivt_start = 0x60001000;
+ivt_start = flash_start + 0x00001000;
ivt_size = 0x00001000;
-interrupts_start = 0x60002000;
+interrupts_start = flash_start + 0x00002000;
interrupts_size = 0x00000400;
-text_start = 0x60002400;
-text_size = ((((text_start) + 1M) + (4k - 1)) & ~(4k - 1)) - (text_start); /* reserve 1M for code but align on 4k boundary */
-vfs_start = (text_start) + (text_size);
+text_start = flash_start + 0x00002400;
+vfs_start = flash_start + 0x00100000;
+text_size = ((vfs_start) - (text_start));
vfs_size = ((flash_end) - (vfs_start));
itcm_start = 0x00000000;
-itcm_size = 0x00010000;
+itcm_size = 0x00008000;
dtcm_start = 0x20000000;
-dtcm_size = 0x00010000;
+dtcm_size = 0x00018000;
ocrm_start = 0x20200000;
ocrm_size = 0x00020000;
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK.ld b/ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK.ld
deleted file mode 100644
index fd1bf32ed..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK.ld
+++ /dev/null
@@ -1 +0,0 @@
-flash_size = 8M; \ No newline at end of file
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK_flexspi_nor_config.h
new file mode 100644
index 000000000..b4e921741
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1050_EVK/MIMXRT1050_EVK_flexspi_nor_config.h
@@ -0,0 +1,263 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__
+#define __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_flexspi.h"
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief XIP_BOARD driver version 2.0.0. */
+#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
+/*@}*/
+
+/* FLEXSPI memory config block related defintions */
+#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
+#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
+#define FLEXSPI_CFG_BLK_SIZE (512)
+
+/* FLEXSPI Feature related definitions */
+#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related defintions */
+#define CMD_INDEX_READ 0
+#define CMD_INDEX_READSTATUS 1
+#define CMD_INDEX_WRITEENABLE 2
+#define CMD_INDEX_WRITE 4
+
+#define CMD_LUT_SEQ_IDX_READ 0
+#define CMD_LUT_SEQ_IDX_READSTATUS 1
+#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define CMD_LUT_SEQ_IDX_WRITE 9
+
+#define CMD_SDR 0x01
+#define CMD_DDR 0x21
+#define RADDR_SDR 0x02
+#define RADDR_DDR 0x22
+#define CADDR_SDR 0x03
+#define CADDR_DDR 0x23
+#define MODE1_SDR 0x04
+#define MODE1_DDR 0x24
+#define MODE2_SDR 0x05
+#define MODE2_DDR 0x25
+#define MODE4_SDR 0x06
+#define MODE4_DDR 0x26
+#define MODE8_SDR 0x07
+#define MODE8_DDR 0x27
+#define WRITE_SDR 0x08
+#define WRITE_DDR 0x28
+#define READ_SDR 0x09
+#define READ_DDR 0x29
+#define LEARN_SDR 0x0A
+#define LEARN_DDR 0x2A
+#define DATSZ_SDR 0x0B
+#define DATSZ_DDR 0x2B
+#define DUMMY_SDR 0x0C
+#define DUMMY_DDR 0x2C
+#define DUMMY_RWDS_SDR 0x0D
+#define DUMMY_RWDS_DDR 0x2D
+#define JMP_ON_CS 0x1F
+#define STOP 0
+
+#define FLEXSPI_1PAD 0
+#define FLEXSPI_2PAD 1
+#define FLEXSPI_4PAD 2
+#define FLEXSPI_8PAD 3
+
+#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
+ (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+ FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+// !@brief Definitions for FlexSPI Serial Clock Frequency
+typedef enum _FlexSpiSerialClockFreq
+{
+ kFlexSpiSerialClk_30MHz = 1,
+ kFlexSpiSerialClk_50MHz = 2,
+ kFlexSpiSerialClk_60MHz = 3,
+ kFlexSpiSerialClk_75MHz = 4,
+ kFlexSpiSerialClk_80MHz = 5,
+ kFlexSpiSerialClk_100MHz = 6,
+ kFlexSpiSerialClk_133MHz = 7,
+ kFlexSpiSerialClk_166MHz = 8,
+} flexspi_serial_clk_freq_t;
+
+// !@brief FlexSPI clock configuration type
+enum
+{
+ kFlexSpiClk_SDR, // !< Clock configure for SDR mode
+ kFlexSpiClk_DDR, // !< Clock configurat for DDR mode
+};
+
+// !@brief FlexSPI Read Sample Clock Source definition
+typedef enum _FlashReadSampleClkSource
+{
+ kFlexSPIReadSampleClk_LoopbackInternally = 0,
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
+ kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
+ kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
+} flexspi_read_sample_clk_t;
+
+// !@brief Misc feature bit definitions
+enum
+{
+ kFlexSpiMiscOffset_DiffClkEnable = 0, // !< Bit for Differential clock enable
+ kFlexSpiMiscOffset_Ck2Enable = 1, // !< Bit for CK2 enable
+ kFlexSpiMiscOffset_ParallelEnable = 2, // !< Bit for Parallel mode enable
+ kFlexSpiMiscOffset_WordAddressableEnable = 3, // !< Bit for Word Addressable enable
+ kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, // !< Bit for Safe Configuration Frequency enable
+ kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, // !< Bit for Pad setting override enable
+ kFlexSpiMiscOffset_DdrModeEnable = 6, // !< Bit for DDR clock confiuration indication.
+};
+
+// !@brief Flash Type Definition
+enum
+{
+ kFlexSpiDeviceType_SerialNOR = 1, // !< Flash devices are Serial NOR
+ kFlexSpiDeviceType_SerialNAND = 2, // !< Flash devices are Serial NAND
+ kFlexSpiDeviceType_SerialRAM = 3, // !< Flash devices are Serial RAM/HyperFLASH
+ kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, // !< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
+ kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, // !< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
+};
+
+// !@brief Flash Pad Definitions
+enum
+{
+ kSerialFlash_1Pad = 1,
+ kSerialFlash_2Pads = 2,
+ kSerialFlash_4Pads = 4,
+ kSerialFlash_8Pads = 8,
+};
+
+// !@brief FlexSPI LUT Sequence structure
+typedef struct _lut_sequence
+{
+ uint8_t seqNum; // !< Sequence Number, valid number: 1-16
+ uint8_t seqId; // !< Sequence Index, valid number: 0-15
+ uint16_t reserved;
+} flexspi_lut_seq_t;
+
+// !@brief Flash Configuration Command Type
+enum
+{
+ kDeviceConfigCmdType_Generic, // !< Generic command, for example: configure dummy cycles, drive strength, etc
+ kDeviceConfigCmdType_QuadEnable, // !< Quad Enable command
+ kDeviceConfigCmdType_Spi2Xpi, // !< Switch from SPI to DPI/QPI/OPI mode
+ kDeviceConfigCmdType_Xpi2Spi, // !< Switch from DPI/QPI/OPI to SPI mode
+ kDeviceConfigCmdType_Spi2NoCmd, // !< Switch to 0-4-4/0-8-8 mode
+ kDeviceConfigCmdType_Reset, // !< Reset device command
+};
+
+// !@brief FlexSPI Memory Configuration Block
+typedef struct _FlexSPIConfig
+{
+ uint32_t tag; // !< [0x000-0x003] Tag, fixed value 0x42464346UL
+ uint32_t version; // !< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
+ uint32_t reserved0; // !< [0x008-0x00b] Reserved for future use
+ uint8_t readSampleClkSrc; // !< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
+ uint8_t csHoldTime; // !< [0x00d-0x00d] CS hold time, default value: 3
+ uint8_t csSetupTime; // !< [0x00e-0x00e] CS setup time, default value: 3
+ uint8_t columnAddressWidth; // !< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
+ // ! Serial NAND, need to refer to datasheet
+ uint8_t deviceModeCfgEnable; // !< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
+ uint8_t deviceModeType; // !< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
+ // ! Generic configuration, etc.
+ uint16_t waitTimeCfgCommands; // !< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
+ // ! DPI/QPI/OPI switch or reset command
+ flexspi_lut_seq_t deviceModeSeq; // !< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
+ // ! sequence number, [31:16] Reserved
+ uint32_t deviceModeArg; // !< [0x018-0x01b] Argument/Parameter for device configuration
+ uint8_t configCmdEnable; // !< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
+ uint8_t configModeType[3]; // !< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
+ flexspi_lut_seq_t
+ configCmdSeqs[3]; // !< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
+ uint32_t reserved1; // !< [0x02c-0x02f] Reserved for future use
+ uint32_t configCmdArgs[3]; // !< [0x030-0x03b] Arguments/Parameters for device Configuration commands
+ uint32_t reserved2; // !< [0x03c-0x03f] Reserved for future use
+ uint32_t controllerMiscOption; // !< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
+ // ! details
+ uint8_t deviceType; // !< [0x044-0x044] Device Type: See Flash Type Definition for more details
+ uint8_t sflashPadType; // !< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
+ uint8_t serialClkFreq; // !< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
+ // ! Chapter for more details
+ uint8_t lutCustomSeqEnable; // !< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
+ // ! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
+ uint32_t reserved3[2]; // !< [0x048-0x04f] Reserved for future use
+ uint32_t sflashA1Size; // !< [0x050-0x053] Size of Flash connected to A1
+ uint32_t sflashA2Size; // !< [0x054-0x057] Size of Flash connected to A2
+ uint32_t sflashB1Size; // !< [0x058-0x05b] Size of Flash connected to B1
+ uint32_t sflashB2Size; // !< [0x05c-0x05f] Size of Flash connected to B2
+ uint32_t csPadSettingOverride; // !< [0x060-0x063] CS pad setting override value
+ uint32_t sclkPadSettingOverride; // !< [0x064-0x067] SCK pad setting override value
+ uint32_t dataPadSettingOverride; // !< [0x068-0x06b] data pad setting override value
+ uint32_t dqsPadSettingOverride; // !< [0x06c-0x06f] DQS pad setting override value
+ uint32_t timeoutInMs; // !< [0x070-0x073] Timeout threshold for read status command
+ uint32_t commandInterval; // !< [0x074-0x077] CS deselect interval between two commands
+ uint16_t dataValidTime[2]; // !< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
+ uint16_t busyOffset; // !< [0x07c-0x07d] Busy offset, valid value: 0-31
+ uint16_t busyBitPolarity; // !< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
+ // ! busy flag is 0 when flash device is busy
+ uint32_t lookupTable[64]; // !< [0x080-0x17f] Lookup table holds Flash command sequences
+ flexspi_lut_seq_t lutCustomSeq[12]; // !< [0x180-0x1af] Customizable LUT Sequences
+ uint32_t reserved4[4]; // !< [0x1b0-0x1bf] Reserved for future use
+} flexspi_mem_config_t;
+
+/* */
+#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
+#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
+#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
+#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
+#define NOR_CMD_LUT_SEQ_IDX_READID 8
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
+#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
+#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
+
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA 0
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA 1
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS 2
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE 4
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR 6
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM 10
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP 12
+
+/*
+ * Serial NOR configuration block
+ */
+typedef struct _flexspi_nor_config
+{
+ flexspi_mem_config_t memConfig; // !< Common memory configuration info via FlexSPI
+ uint32_t pageSize; // !< Page size of Serial NOR
+ uint32_t sectorSize; // !< Sector size of Serial NOR
+ uint8_t ipcmdSerialClkFreq; // !< Clock frequency for IP command
+ uint8_t isUniformBlockSize; // !< Sector/Block size is the same
+ uint8_t reserved0[2]; // !< Reserved for future use
+ uint8_t serialNorType; // !< Serial NOR Flash type: 0/1/2/3
+ uint8_t needExitNoCmdMode; // !< Need to exit NoCmd mode before other IP command
+ uint8_t halfClkForNonReadCmd; // !< Half the Serial Clock for non-read command: true/false
+ uint8_t needRestoreNoCmdMode; // !< Need to Restore NoCmd mode after IP commmand execution
+ uint32_t blockSize; // !< Block size
+ uint32_t reserve2[11]; // !< Reserved for future use
+} flexspi_nor_config_t;
+
+#define FLASH_BUSY_STATUS_POL 0
+#define FLASH_BUSY_STATUS_OFFSET 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/clock_config.h b/ports/mimxrt/boards/MIMXRT1050_EVK/clock_config.h
new file mode 100644
index 000000000..f213ac7e2
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1050_EVK/clock_config.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2017-2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
+
+#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 600000000U /*!< Core clock frequency: 600000000Hz */
+
+/* Clock outputs (values are in Hz): */
+#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 600000000UL
+#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL
+#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
+#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
+#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
+#define BOARD_BOOTCLOCKRUN_CSI_CLK_ROOT 12000000UL
+#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO2_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 160000000UL
+#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 150000000UL
+#define BOARD_BOOTCLOCKRUN_LCDIF_CLK_ROOT 9642857UL
+#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
+#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
+#define BOARD_BOOTCLOCKRUN_LVDS1_CLK 1200000000UL
+#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
+#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_PLL7_MAIN_CLK 24000000UL
+#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
+#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL
+#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
+#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL
+#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 198000000UL
+
+/*! @brief Arm PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN;
+/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
+/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
+ */
+extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/evkmimxrt1050_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1050_EVK/evkmimxrt1050_flexspi_nor_config.h
deleted file mode 100644
index e038967e1..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVK/evkmimxrt1050_flexspi_nor_config.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__
-#define __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_common.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related defintions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_133MHz = 7,
- kFlexSpiSerialClk_166MHz = 8,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/flash_config.c b/ports/mimxrt/boards/MIMXRT1050_EVK/flash_config.c
deleted file mode 100644
index 2a9303fc9..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVK/flash_config.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "evkmimxrt1050_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
- .columnAddressWidth = 3u,
- // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
- .controllerMiscOption =
- (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
- (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
- .sflashPadType = kSerialFlash_8Pads,
- .serialClkFreq = kFlexSpiSerialClk_133MHz,
- .sflashA1Size = 64u * 1024u * 1024u,
- .dataValidTime = {16u, 16u},
- .lookupTable =
- {
- // 0 Read LUTs 0 -> 0
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 1 Read status register -> 1
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 2 Fast read quad mode - SDR
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 3 Write Enable -> 3
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 4 Read extend parameters
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 5 Erase Sector -> 5
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 6 Write Status Reg
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 7 Page Program - quad mode (-> 9)
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 8 Read ID
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 9 Page Program - single mode -> 9
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 10 Enter QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 11 Erase Chip
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 12 Exit QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- },
- },
- .pageSize = 512u,
- .sectorSize = 256u * 1024u,
- .blockSize = 256u * 1024u,
- .isUniformBlockSize = true,
-};
-
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h
index 976de9c07..b6b70be05 100644
--- a/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h
+++ b/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h
@@ -1,14 +1,10 @@
#define MICROPY_HW_BOARD_NAME "i.MX RT1050 EVK"
#define MICROPY_HW_MCU_NAME "MIMXRT1052DVL6B"
-#define BOARD_FLASH_SIZE (64 * 1024 * 1024)
-
-// MIMXRT1050_EVK has 1 user LED
+// MIMXRT1050_EVKB has 1 user LED
#define MICROPY_HW_LED1_PIN (pin_GPIO_AD_B0_09)
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "evkmimxrt1050_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_nor_flash.h"
#define MICROPY_HW_NUM_PIN_IRQS (4 * 32 + 3)
@@ -38,10 +34,10 @@
{ IOMUXC_GPIO_SD_B0_02_LPSPI1_SDO }, { IOMUXC_GPIO_SD_B0_03_LPSPI1_SDI },
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx, \
- kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
+ kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx, \
- kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
+ kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
// Define the mapping hardware I2C # to logical I2C #
// SDA/SCL HW-I2C Logical I2C
@@ -56,13 +52,14 @@
{ IOMUXC_GPIO_AD_B1_07_LPI2C3_SCL }, { IOMUXC_GPIO_AD_B1_06_LPI2C3_SDA },
#define USDHC_DUMMY_PIN NULL, 0
+
#define MICROPY_USDHC1 \
{ \
.cmd = {GPIO_SD_B0_00_USDHC1_CMD}, \
.clk = { GPIO_SD_B0_01_USDHC1_CLK }, \
- .cd_b = { GPIO_B1_12_USDHC1_CD_B },\
- .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 },\
- .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 },\
- .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 },\
- .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 },\
+ .cd_b = { GPIO_B1_12_USDHC1_CD_B }, \
+ .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 }, \
+ .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 }, \
+ .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 }, \
+ .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 }, \
}
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.mk b/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.mk
index fdbf47f01..1ea85b7b4 100644
--- a/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.mk
+++ b/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.mk
@@ -3,11 +3,10 @@ MCU_VARIANT = MIMXRT1052DVL6B
MICROPY_FLOAT_IMPL = double
MICROPY_PY_MACHINE_SDCARD = 1
+BOARD_FLASH_TYPE ?= hyperflash
+BOARD_FLASH_SIZE ?= 0x4000000 # 64MB
-JLINK_PATH ?= /media/RT1050-EVK/
+JLINK_PATH ?= /media/RT1050-EVKB/
deploy: $(BUILD)/firmware.bin
cp $< $(JLINK_PATH)
-
-SRC_C += \
- hal/flexspi_nor_flash.c
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/qspi_hyper_flash_config.c b/ports/mimxrt/boards/MIMXRT1050_EVK/qspi_hyper_flash_config.c
new file mode 100644
index 000000000..1b3349f91
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1050_EVK/qspi_hyper_flash_config.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .columnAddressWidth = 3u,
+ // Enable DDR mode, Wordaddressable, Safe configuration, Differential clock
+ .controllerMiscOption =
+ (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
+ (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
+ .sflashPadType = kSerialFlash_8Pads,
+ .serialClkFreq = kFlexSpiSerialClk_133MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .dataValidTime = {16u, 16u},
+ .lookupTable =
+ {
+ /* 0 Read Data */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
+
+ /* 1 Write Data */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x02),
+
+ /* 2 Read Status */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x70), // DATA 0x70
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 5] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x0B),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0),
+
+ /* 4 Write Enable */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // DATA 0xAA
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 7] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+
+ /* 6 Erase Sector */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80), // DATA 0x80
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 7] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ // +2
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 8] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 9] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 10] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 11] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ // +3
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 12] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 13] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 14] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x30, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
+
+ /* 10 program page with word program command sequence */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0), // DATA 0xA0
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 5] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x80),
+
+ /* 12 Erase chip */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 1] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 3] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80),
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 7] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ // +2
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 8] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 9] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 10] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 11] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ // +3
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 12] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 13] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 14] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 15] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x10),
+ },
+ },
+ .pageSize = 512u,
+ .sectorSize = 256u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = true,
+};
+
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/qspi_nor_flash_config.c b/ports/mimxrt/boards/MIMXRT1050_EVK/qspi_nor_flash_config.c
new file mode 100644
index 000000000..290c6bc15
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1050_EVK/qspi_nor_flash_config.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .columnAddressWidth = 3u,
+ // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
+ .controllerMiscOption =
+ (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
+ (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
+ .sflashPadType = kSerialFlash_8Pads,
+ .serialClkFreq = kFlexSpiSerialClk_133MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .dataValidTime = {16u, 16u},
+ .lookupTable =
+ {
+ // 0 Read LUTs 0 -> 0
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 1 Read status register -> 1
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 2 Fast read quad mode - SDR
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 3 Write Enable -> 3
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 4 Read extend parameters
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 5 Erase Sector -> 5
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 6 Write Status Reg
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 7 Page Program - quad mode (-> 9)
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 8 Read ID
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 9 Page Program - single mode -> 9
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 10 Enter QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 11 Erase Chip
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 12 Exit QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ },
+ },
+ .pageSize = 512u,
+ .sectorSize = 256u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = true,
+};
+
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVKB/MIMXRT1050_EVKB.ld b/ports/mimxrt/boards/MIMXRT1050_EVKB/MIMXRT1050_EVKB.ld
deleted file mode 100644
index f616178a9..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVKB/MIMXRT1050_EVKB.ld
+++ /dev/null
@@ -1 +0,0 @@
-flash_size = 64M; \ No newline at end of file
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVKB/evkbmimxrt1050_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1050_EVKB/evkbmimxrt1050_flexspi_nor_config.h
deleted file mode 100644
index 02ac394e9..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVKB/evkbmimxrt1050_flexspi_nor_config.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__
-#define __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_flexspi.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related defintions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_133MHz = 7,
- kFlexSpiSerialClk_166MHz = 8,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA 0
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA 1
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS 2
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE 4
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR 6
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM 10
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1050_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVKB/flash_config.c b/ports/mimxrt/boards/MIMXRT1050_EVKB/flash_config.c
deleted file mode 100644
index e8190bcb6..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVKB/flash_config.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "evkbmimxrt1050_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
- .columnAddressWidth = 3u,
- // Enable DDR mode, Wordaddressable, Safe configuration, Differential clock
- .controllerMiscOption =
- (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
- (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
- .sflashPadType = kSerialFlash_8Pads,
- .serialClkFreq = kFlexSpiSerialClk_133MHz,
- .sflashA1Size = 64u * 1024u * 1024u,
- .dataValidTime = {16u, 16u},
- .lookupTable =
- {
- /* 0 Read Data */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
-
- /* 1 Write Data */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x02),
-
- /* 2 Read Status */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x70), // DATA 0x70
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 5] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x0B),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0),
-
- /* 4 Write Enable */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // DATA 0xAA
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 7] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
-
- /* 6 Erase Sector */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80), // DATA 0x80
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 7] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- // +2
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 8] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 9] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 10] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 11] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- // +3
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 12] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 13] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 14] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x30, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
-
- /* 10 program page with word program command sequence */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0), // DATA 0xA0
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 5] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x80),
-
- /* 12 Erase chip */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 1] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 3] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80),
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 7] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- // +2
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 8] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 9] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 10] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 11] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- // +3
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 12] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 13] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 14] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 15] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x10),
- },
- },
- .pageSize = 512u,
- .sectorSize = 256u * 1024u,
- .blockSize = 256u * 1024u,
- .isUniformBlockSize = true,
-};
-
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.h
deleted file mode 100644
index 963c42cb6..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#define MICROPY_HW_BOARD_NAME "i.MX RT1050 EVKB"
-#define MICROPY_HW_MCU_NAME "MIMXRT1052DVL6B"
-
-#define BOARD_FLASH_SIZE (64 * 1024 * 1024)
-
-// MIMXRT1050_EVKB has 1 user LED
-#define MICROPY_HW_LED1_PIN (pin_GPIO_AD_B0_09)
-#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))
-#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "evkbmimxrt1050_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_hyper_flash.h"
-
-#define MICROPY_HW_NUM_PIN_IRQS (4 * 32 + 3)
-
-// Define mapping logical UART # to hardware UART #
-// LPUART3 on D0/D1 -> 1
-// LPUART2 on D7/D6 -> 2
-// LPUART6 on D8/D9 -> 3
-// LPUART8 on A1/A0 -> 4
-
-#define MICROPY_HW_UART_NUM (sizeof(uart_index_table) / sizeof(uart_index_table)[0])
-#define MICROPY_HW_UART_INDEX { 0, 3, 2, 6, 8 }
-
-#define IOMUX_TABLE_UART \
- { 0 }, { 0 }, \
- { IOMUXC_GPIO_AD_B1_02_LPUART2_TX }, { IOMUXC_GPIO_AD_B1_03_LPUART2_RX }, \
- { IOMUXC_GPIO_AD_B1_06_LPUART3_TX }, { IOMUXC_GPIO_AD_B1_07_LPUART3_RX }, \
- { 0 }, { 0 }, \
- { 0 }, { 0 }, \
- { IOMUXC_GPIO_AD_B0_02_LPUART6_TX }, { IOMUXC_GPIO_AD_B0_03_LPUART6_RX }, \
- { 0 }, { 0 }, \
- { IOMUXC_GPIO_AD_B1_10_LPUART8_TX }, { IOMUXC_GPIO_AD_B1_11_LPUART8_RX },
-
-#define MICROPY_HW_SPI_INDEX { 1 }
-
-#define IOMUX_TABLE_SPI \
- { IOMUXC_GPIO_SD_B0_00_LPSPI1_SCK }, { IOMUXC_GPIO_SD_B0_01_LPSPI1_PCS0 }, \
- { IOMUXC_GPIO_SD_B0_02_LPSPI1_SDO }, { IOMUXC_GPIO_SD_B0_03_LPSPI1_SDI },
-
-#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx, \
- kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
-
-#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx, \
- kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
-
-// Define the mapping hardware I2C # to logical I2C #
-// SDA/SCL HW-I2C Logical I2C
-// D14/D15 LPI2C1 -> 0
-// D1/D0 LPI2C3 -> 1
-
-#define MICROPY_HW_I2C_INDEX { 1, 3 }
-
-#define IOMUX_TABLE_I2C \
- { IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL }, { IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA }, \
- { 0 }, { 0 }, \
- { IOMUXC_GPIO_AD_B1_07_LPI2C3_SCL }, { IOMUXC_GPIO_AD_B1_06_LPI2C3_SDA },
-
-#define USDHC_DUMMY_PIN NULL , 0
-#define MICROPY_USDHC1 \
- { \
- .cmd = {GPIO_SD_B0_00_USDHC1_CMD}, \
- .clk = { GPIO_SD_B0_01_USDHC1_CLK }, \
- .cd_b = { GPIO_B1_12_USDHC1_CD_B },\
- .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 },\
- .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 },\
- .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 },\
- .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 },\
- }
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.mk b/ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.mk
deleted file mode 100644
index e6cd1a63e..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVKB/mpconfigboard.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-MCU_SERIES = MIMXRT1052
-MCU_VARIANT = MIMXRT1052DVL6B
-
-MICROPY_FLOAT_IMPL = double
-MICROPY_PY_MACHINE_SDCARD = 1
-
-JLINK_PATH ?= /media/RT1050-EVKB/
-
-SRC_C += \
- hal/flexspi_hyper_flash.c
-
-deploy: $(BUILD)/firmware.bin
- cp $< $(JLINK_PATH)
diff --git a/ports/mimxrt/boards/MIMXRT1050_EVKB/pins.csv b/ports/mimxrt/boards/MIMXRT1050_EVKB/pins.csv
deleted file mode 100644
index 366a141ff..000000000
--- a/ports/mimxrt/boards/MIMXRT1050_EVKB/pins.csv
+++ /dev/null
@@ -1,31 +0,0 @@
-D0,GPIO_AD_B1_07
-D1,GPIO_AD_B1_06
-D2,GPIO_AD_B0_11
-D3,GPIO_AD_B1_08
-D4,GPIO_AD_B0_09
-D5,GPIO_AD_B0_10
-D6,GPIO_AD_B1_02
-D7,GPIO_AD_B1_03
-D8,GPIO_AD_B0_03
-D9,GPIO_AD_B0_02
-D10,GPIO_SD_B0_01
-D11,GPIO_SD_B0_02
-D12,GPIO_SD_B0_03
-D13,GPIO_SD_B0_00
-D14,GPIO_AD_B1_01
-D15,GPIO_AD_B1_00
-A0,GPIO_AD_B1_10
-A1,GPIO_AD_B1_11
-A2,GPIO_AD_B1_04
-A3,GPIO_AD_B1_05
-A4,GPIO_AD_B1_01
-A5,GPIO_AD_B1_00
-RX,GPIO_AD_B1_07
-TX,GPIO_AD_B1_06
-SCL,GPIO_AD_B1_00
-SDA,GPIO_AD_B1_01
-SCK,GPIO_SD_B0_00
-SDI,GPIO_SD_B0_03
-SDO,GPIO_SD_B0_02
-CS,GPIO_SD_B0_01
-LED_GREEN,GPIO_AD_B0_09
diff --git a/ports/mimxrt/boards/MIMXRT1052.ld b/ports/mimxrt/boards/MIMXRT1052.ld
index 751929794..d8c51d530 100644
--- a/ports/mimxrt/boards/MIMXRT1052.ld
+++ b/ports/mimxrt/boards/MIMXRT1052.ld
@@ -1,14 +1,25 @@
/* Memory configuration */
+#if BOARD_FLASH_RESERVED
+reserved_size = BOARD_FLASH_RESERVED;
+#endif
+
+#if BOARD_FLASH_TYPE==qspi_nor
+flash_start = 0x60000000;
+#elif BOARD_FLASH_TYPE==hyperflash
flash_start = 0x60000000;
+#else
+#error Unknown BOARD_FLASH_TYPE
+#endif
+flash_size = BOARD_FLASH_SIZE;
flash_end = DEFINED(reserved_size) ? ((flash_start) + (flash_size - reserved_size)) : ((flash_start) + (flash_size));
flash_config_start = flash_start;
flash_config_size = 0x00001000;
-ivt_start = 0x60001000;
+ivt_start = flash_start + 0x00001000;
ivt_size = 0x00001000;
-interrupts_start = 0x60002000;
+interrupts_start = flash_start + 0x00002000;
interrupts_size = 0x00000400;
-text_start = 0x60002400;
-vfs_start = 0x60100000;
+text_start = flash_start + 0x00002400;
+vfs_start = flash_start + 0x00100000;
text_size = ((vfs_start) - (text_start));
vfs_size = ((flash_end) - (vfs_start));
itcm_start = 0x00000000;
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK.ld b/ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK.ld
deleted file mode 100644
index f616178a9..000000000
--- a/ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK.ld
+++ /dev/null
@@ -1 +0,0 @@
-flash_size = 64M; \ No newline at end of file
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK_flexspi_nor_config.h
new file mode 100644
index 000000000..e447733f0
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1060_EVK/MIMXRT1060_EVK_flexspi_nor_config.h
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__
+#define __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_flexspi.h"
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief XIP_BOARD driver version 2.0.0. */
+#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
+/*@}*/
+
+/* FLEXSPI memory config block related defintions */
+#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
+#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
+#define FLEXSPI_CFG_BLK_SIZE (512)
+
+/* FLEXSPI Feature related definitions */
+#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related defintions */
+#define CMD_INDEX_READ 0
+#define CMD_INDEX_READSTATUS 1
+#define CMD_INDEX_WRITEENABLE 2
+#define CMD_INDEX_WRITE 4
+
+#define CMD_LUT_SEQ_IDX_READ 0
+#define CMD_LUT_SEQ_IDX_READSTATUS 1
+#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define CMD_LUT_SEQ_IDX_WRITE 9
+
+#define CMD_SDR 0x01
+#define CMD_DDR 0x21
+#define RADDR_SDR 0x02
+#define RADDR_DDR 0x22
+#define CADDR_SDR 0x03
+#define CADDR_DDR 0x23
+#define MODE1_SDR 0x04
+#define MODE1_DDR 0x24
+#define MODE2_SDR 0x05
+#define MODE2_DDR 0x25
+#define MODE4_SDR 0x06
+#define MODE4_DDR 0x26
+#define MODE8_SDR 0x07
+#define MODE8_DDR 0x27
+#define WRITE_SDR 0x08
+#define WRITE_DDR 0x28
+#define READ_SDR 0x09
+#define READ_DDR 0x29
+#define LEARN_SDR 0x0A
+#define LEARN_DDR 0x2A
+#define DATSZ_SDR 0x0B
+#define DATSZ_DDR 0x2B
+#define DUMMY_SDR 0x0C
+#define DUMMY_DDR 0x2C
+#define DUMMY_RWDS_SDR 0x0D
+#define DUMMY_RWDS_DDR 0x2D
+#define JMP_ON_CS 0x1F
+#define STOP 0
+
+#define FLEXSPI_1PAD 0
+#define FLEXSPI_2PAD 1
+#define FLEXSPI_4PAD 2
+#define FLEXSPI_8PAD 3
+
+#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
+ (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+ FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+// !@brief Definitions for FlexSPI Serial Clock Frequency
+typedef enum _FlexSpiSerialClockFreq
+{
+ kFlexSpiSerialClk_30MHz = 1,
+ kFlexSpiSerialClk_50MHz = 2,
+ kFlexSpiSerialClk_60MHz = 3,
+ kFlexSpiSerialClk_75MHz = 4,
+ kFlexSpiSerialClk_80MHz = 5,
+ kFlexSpiSerialClk_100MHz = 6,
+ kFlexSpiSerialClk_120MHz = 7,
+ kFlexSpiSerialClk_133MHz = 8,
+ kFlexSpiSerialClk_166MHz = 9,
+} flexspi_serial_clk_freq_t;
+
+// !@brief FlexSPI clock configuration type
+enum
+{
+ kFlexSpiClk_SDR, // !< Clock configure for SDR mode
+ kFlexSpiClk_DDR, // !< Clock configurat for DDR mode
+};
+
+// !@brief FlexSPI Read Sample Clock Source definition
+typedef enum _FlashReadSampleClkSource
+{
+ kFlexSPIReadSampleClk_LoopbackInternally = 0,
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
+ kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
+ kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
+} flexspi_read_sample_clk_t;
+
+// !@brief Misc feature bit definitions
+enum
+{
+ kFlexSpiMiscOffset_DiffClkEnable = 0, // !< Bit for Differential clock enable
+ kFlexSpiMiscOffset_Ck2Enable = 1, // !< Bit for CK2 enable
+ kFlexSpiMiscOffset_ParallelEnable = 2, // !< Bit for Parallel mode enable
+ kFlexSpiMiscOffset_WordAddressableEnable = 3, // !< Bit for Word Addressable enable
+ kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, // !< Bit for Safe Configuration Frequency enable
+ kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, // !< Bit for Pad setting override enable
+ kFlexSpiMiscOffset_DdrModeEnable = 6, // !< Bit for DDR clock confiuration indication.
+};
+
+// !@brief Flash Type Definition
+enum
+{
+ kFlexSpiDeviceType_SerialNOR = 1, // !< Flash devices are Serial NOR
+ kFlexSpiDeviceType_SerialNAND = 2, // !< Flash devices are Serial NAND
+ kFlexSpiDeviceType_SerialRAM = 3, // !< Flash devices are Serial RAM/HyperFLASH
+ kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, // !< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
+ kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, // !< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
+};
+
+// !@brief Flash Pad Definitions
+enum
+{
+ kSerialFlash_1Pad = 1,
+ kSerialFlash_2Pads = 2,
+ kSerialFlash_4Pads = 4,
+ kSerialFlash_8Pads = 8,
+};
+
+// !@brief FlexSPI LUT Sequence structure
+typedef struct _lut_sequence
+{
+ uint8_t seqNum; // !< Sequence Number, valid number: 1-16
+ uint8_t seqId; // !< Sequence Index, valid number: 0-15
+ uint16_t reserved;
+} flexspi_lut_seq_t;
+
+// !@brief Flash Configuration Command Type
+enum
+{
+ kDeviceConfigCmdType_Generic, // !< Generic command, for example: configure dummy cycles, drive strength, etc
+ kDeviceConfigCmdType_QuadEnable, // !< Quad Enable command
+ kDeviceConfigCmdType_Spi2Xpi, // !< Switch from SPI to DPI/QPI/OPI mode
+ kDeviceConfigCmdType_Xpi2Spi, // !< Switch from DPI/QPI/OPI to SPI mode
+ kDeviceConfigCmdType_Spi2NoCmd, // !< Switch to 0-4-4/0-8-8 mode
+ kDeviceConfigCmdType_Reset, // !< Reset device command
+};
+
+// !@brief FlexSPI Memory Configuration Block
+typedef struct _FlexSPIConfig
+{
+ uint32_t tag; // !< [0x000-0x003] Tag, fixed value 0x42464346UL
+ uint32_t version; // !< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
+ uint32_t reserved0; // !< [0x008-0x00b] Reserved for future use
+ uint8_t readSampleClkSrc; // !< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
+ uint8_t csHoldTime; // !< [0x00d-0x00d] CS hold time, default value: 3
+ uint8_t csSetupTime; // !< [0x00e-0x00e] CS setup time, default value: 3
+ uint8_t columnAddressWidth; // !< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
+ // ! Serial NAND, need to refer to datasheet
+ uint8_t deviceModeCfgEnable; // !< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
+ uint8_t deviceModeType; // !< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
+ // ! Generic configuration, etc.
+ uint16_t waitTimeCfgCommands; // !< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
+ // ! DPI/QPI/OPI switch or reset command
+ flexspi_lut_seq_t deviceModeSeq; // !< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
+ // ! sequence number, [31:16] Reserved
+ uint32_t deviceModeArg; // !< [0x018-0x01b] Argument/Parameter for device configuration
+ uint8_t configCmdEnable; // !< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
+ uint8_t configModeType[3]; // !< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
+ flexspi_lut_seq_t
+ configCmdSeqs[3]; // !< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
+ uint32_t reserved1; // !< [0x02c-0x02f] Reserved for future use
+ uint32_t configCmdArgs[3]; // !< [0x030-0x03b] Arguments/Parameters for device Configuration commands
+ uint32_t reserved2; // !< [0x03c-0x03f] Reserved for future use
+ uint32_t controllerMiscOption; // !< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
+ // ! details
+ uint8_t deviceType; // !< [0x044-0x044] Device Type: See Flash Type Definition for more details
+ uint8_t sflashPadType; // !< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
+ uint8_t serialClkFreq; // !< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
+ // ! Chapter for more details
+ uint8_t lutCustomSeqEnable; // !< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
+ // ! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
+ uint32_t reserved3[2]; // !< [0x048-0x04f] Reserved for future use
+ uint32_t sflashA1Size; // !< [0x050-0x053] Size of Flash connected to A1
+ uint32_t sflashA2Size; // !< [0x054-0x057] Size of Flash connected to A2
+ uint32_t sflashB1Size; // !< [0x058-0x05b] Size of Flash connected to B1
+ uint32_t sflashB2Size; // !< [0x05c-0x05f] Size of Flash connected to B2
+ uint32_t csPadSettingOverride; // !< [0x060-0x063] CS pad setting override value
+ uint32_t sclkPadSettingOverride; // !< [0x064-0x067] SCK pad setting override value
+ uint32_t dataPadSettingOverride; // !< [0x068-0x06b] data pad setting override value
+ uint32_t dqsPadSettingOverride; // !< [0x06c-0x06f] DQS pad setting override value
+ uint32_t timeoutInMs; // !< [0x070-0x073] Timeout threshold for read status command
+ uint32_t commandInterval; // !< [0x074-0x077] CS deselect interval between two commands
+ uint16_t dataValidTime[2]; // !< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
+ uint16_t busyOffset; // !< [0x07c-0x07d] Busy offset, valid value: 0-31
+ uint16_t busyBitPolarity; // !< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
+ // ! busy flag is 0 when flash device is busy
+ uint32_t lookupTable[64]; // !< [0x080-0x17f] Lookup table holds Flash command sequences
+ flexspi_lut_seq_t lutCustomSeq[12]; // !< [0x180-0x1af] Customizable LUT Sequences
+ uint32_t reserved4[4]; // !< [0x1b0-0x1bf] Reserved for future use
+} flexspi_mem_config_t;
+
+/* */
+#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
+#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
+#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
+#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
+#define NOR_CMD_LUT_SEQ_IDX_READID 8
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
+#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
+#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
+
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA 0
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA 1
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS 2
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE 4
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR 6
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM 10
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP 12
+
+/*
+ * Serial NOR configuration block
+ */
+typedef struct _flexspi_nor_config
+{
+ flexspi_mem_config_t memConfig; // !< Common memory configuration info via FlexSPI
+ uint32_t pageSize; // !< Page size of Serial NOR
+ uint32_t sectorSize; // !< Sector size of Serial NOR
+ uint8_t ipcmdSerialClkFreq; // !< Clock frequency for IP command
+ uint8_t isUniformBlockSize; // !< Sector/Block size is the same
+ uint8_t reserved0[2]; // !< Reserved for future use
+ uint8_t serialNorType; // !< Serial NOR Flash type: 0/1/2/3
+ uint8_t needExitNoCmdMode; // !< Need to exit NoCmd mode before other IP command
+ uint8_t halfClkForNonReadCmd; // !< Half the Serial Clock for non-read command: true/false
+ uint8_t needRestoreNoCmdMode; // !< Need to Restore NoCmd mode after IP commmand execution
+ uint32_t blockSize; // !< Block size
+ uint32_t reserve2[11]; // !< Reserved for future use
+} flexspi_nor_config_t;
+
+#define FLASH_BUSY_STATUS_POL 0
+#define FLASH_BUSY_STATUS_OFFSET 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/clock_config.h b/ports/mimxrt/boards/MIMXRT1060_EVK/clock_config.h
new file mode 100644
index 000000000..082202484
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1060_EVK/clock_config.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2018-2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
+
+#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 600000000U /*!< Core clock frequency: 600000000Hz */
+
+/* Clock outputs (values are in Hz): */
+#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 600000000UL
+#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL
+#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
+#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
+#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
+#define BOARD_BOOTCLOCKRUN_CSI_CLK_ROOT 12000000UL
+#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_125M_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_TX_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO2_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI2_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 150000000UL
+#define BOARD_BOOTCLOCKRUN_LCDIF_CLK_ROOT 9642857UL
+#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
+#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
+#define BOARD_BOOTCLOCKRUN_LVDS1_CLK 1200000000UL
+#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
+#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_PLL7_MAIN_CLK 24000000UL
+#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
+#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL
+#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
+#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL
+#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 198000000UL
+
+/*! @brief Arm PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN;
+/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
+/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
+ */
+extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/evkmimxrt1060_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1060_EVK/evkmimxrt1060_flexspi_nor_config.h
deleted file mode 100644
index cff520e0e..000000000
--- a/ports/mimxrt/boards/MIMXRT1060_EVK/evkmimxrt1060_flexspi_nor_config.h
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__
-#define __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_flexspi.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related defintions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_120MHz = 7,
- kFlexSpiSerialClk_133MHz = 8,
- kFlexSpiSerialClk_166MHz = 9,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA 0
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA 1
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS 2
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE 4
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR 6
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM 10
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/flash_config.c b/ports/mimxrt/boards/MIMXRT1060_EVK/flash_config.c
deleted file mode 100644
index e28f58154..000000000
--- a/ports/mimxrt/boards/MIMXRT1060_EVK/flash_config.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "evkmimxrt1060_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
- .columnAddressWidth = 3u,
- // Enable DDR mode, Wordaddressable, Safe configuration, Differential clock
- .controllerMiscOption =
- (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
- (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
- .sflashPadType = kSerialFlash_8Pads,
- .serialClkFreq = kFlexSpiSerialClk_133MHz,
- .sflashA1Size = 64u * 1024u * 1024u,
- .dataValidTime = {16u, 16u},
- .lookupTable =
- {
- /* 0 Read Data */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
-
- /* 1 Write Data */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x02),
-
- /* 2 Read Status */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x70), // DATA 0x70
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 5] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x0B),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0),
-
- /* 4 Write Enable */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // DATA 0xAA
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 7] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
-
- /* 6 Erase Sector */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80), // DATA 0x80
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 7] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- // +2
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 8] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 9] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 10] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 11] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- // +3
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 12] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 13] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 14] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x30, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
-
- /* 10 program page with word program command sequence */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0), // DATA 0xA0
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 5] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x80),
-
- /* 12 Erase chip */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 1] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 3] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80),
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 7] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- // +2
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 8] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 9] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 10] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 11] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- // +3
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 12] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 13] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 14] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 15] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x10),
- },
- },
- .pageSize = 512u,
- .sectorSize = 256u * 1024u,
- .blockSize = 256u * 1024u,
- .isUniformBlockSize = true,
-};
-
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h
index c26364f26..5cf31aa25 100644
--- a/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h
+++ b/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h
@@ -1,14 +1,10 @@
#define MICROPY_HW_BOARD_NAME "i.MX RT1060 EVK"
#define MICROPY_HW_MCU_NAME "MIMXRT1062DVJ6A"
-#define BOARD_FLASH_SIZE (8 * 1024 * 1024)
-
// MIMXRT1060_EVK has 1 user LED
#define MICROPY_HW_LED1_PIN (pin_GPIO_AD_B0_09)
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "evkmimxrt1060_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_hyper_flash.h"
#define MICROPY_HW_NUM_PIN_IRQS (4 * 32 + 3)
@@ -38,10 +34,10 @@
{ IOMUXC_GPIO_SD_B0_02_LPSPI1_SDO }, { IOMUXC_GPIO_SD_B0_03_LPSPI1_SDI },
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx, \
- kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
+ kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx, \
- kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
+ kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
// Define the mapping hardware I2C # to logical I2C #
// SDA/SCL HW-I2C Logical I2C
@@ -60,9 +56,9 @@
{ \
.cmd = {GPIO_SD_B0_00_USDHC1_CMD}, \
.clk = { GPIO_SD_B0_01_USDHC1_CLK }, \
- .cd_b = { GPIO_B1_12_USDHC1_CD_B },\
- .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 },\
- .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 },\
- .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 },\
- .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 },\
+ .cd_b = { GPIO_B1_12_USDHC1_CD_B }, \
+ .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 }, \
+ .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 }, \
+ .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 }, \
+ .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 }, \
}
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.mk b/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.mk
index 623e2617f..1e041c8eb 100644
--- a/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.mk
+++ b/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.mk
@@ -3,20 +3,18 @@ MCU_VARIANT = MIMXRT1062DVJ6A
MICROPY_FLOAT_IMPL = double
MICROPY_PY_MACHINE_SDCARD = 1
+BOARD_FLASH_TYPE ?= qspi_nor
+BOARD_FLASH_SIZE ?= 0x800000 # 8MB
JLINK_PATH ?= /media/RT1060-EVK/
JLINK_COMMANDER_SCRIPT = $(BUILD)/script.jlink
-
ifdef JLINK_IP
JLINK_CONNECTION_SETTINGS = -IP $(JLINK_IP)
else
JLINK_CONNECTION_SETTINGS = -USB
endif
-SRC_C += \
- hal/flexspi_hyper_flash.c
-
deploy_jlink: $(BUILD)/firmware.hex
$(Q)$(TOUCH) $(JLINK_COMMANDER_SCRIPT)
$(ECHO) "ExitOnError 1" > $(JLINK_COMMANDER_SCRIPT)
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/qspi_hyper_flash_config.c b/ports/mimxrt/boards/MIMXRT1060_EVK/qspi_hyper_flash_config.c
new file mode 100644
index 000000000..1b3349f91
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1060_EVK/qspi_hyper_flash_config.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .columnAddressWidth = 3u,
+ // Enable DDR mode, Wordaddressable, Safe configuration, Differential clock
+ .controllerMiscOption =
+ (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
+ (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
+ .sflashPadType = kSerialFlash_8Pads,
+ .serialClkFreq = kFlexSpiSerialClk_133MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .dataValidTime = {16u, 16u},
+ .lookupTable =
+ {
+ /* 0 Read Data */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
+
+ /* 1 Write Data */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x02),
+
+ /* 2 Read Status */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x70), // DATA 0x70
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 5] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x0B),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0),
+
+ /* 4 Write Enable */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // DATA 0xAA
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 7] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+
+ /* 6 Erase Sector */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80), // DATA 0x80
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 7] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ // +2
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 8] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 9] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 10] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 11] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ // +3
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 12] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 13] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 14] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x30, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
+
+ /* 10 program page with word program command sequence */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0), // DATA 0xA0
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 5] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x80),
+
+ /* 12 Erase chip */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 1] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 3] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80),
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 7] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ // +2
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 8] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 9] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 10] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 11] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ // +3
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 12] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 13] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 14] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 15] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x10),
+ },
+ },
+ .pageSize = 512u,
+ .sectorSize = 256u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = true,
+};
+
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/qspi_nor_flash_config.c b/ports/mimxrt/boards/MIMXRT1060_EVK/qspi_nor_flash_config.c
new file mode 100644
index 000000000..290c6bc15
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1060_EVK/qspi_nor_flash_config.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .columnAddressWidth = 3u,
+ // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
+ .controllerMiscOption =
+ (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
+ (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
+ .sflashPadType = kSerialFlash_8Pads,
+ .serialClkFreq = kFlexSpiSerialClk_133MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .dataValidTime = {16u, 16u},
+ .lookupTable =
+ {
+ // 0 Read LUTs 0 -> 0
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 1 Read status register -> 1
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 2 Fast read quad mode - SDR
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 3 Write Enable -> 3
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 4 Read extend parameters
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 5 Erase Sector -> 5
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 6 Write Status Reg
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 7 Page Program - quad mode (-> 9)
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 8 Read ID
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 9 Page Program - single mode -> 9
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 10 Enter QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 11 Erase Chip
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 12 Exit QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ },
+ },
+ .pageSize = 512u,
+ .sectorSize = 256u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = true,
+};
+
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1062.ld b/ports/mimxrt/boards/MIMXRT1062.ld
index 5edf70ee4..03c119334 100644
--- a/ports/mimxrt/boards/MIMXRT1062.ld
+++ b/ports/mimxrt/boards/MIMXRT1062.ld
@@ -1,14 +1,25 @@
/* Memory configuration */
+#if BOARD_FLASH_RESERVED
+reserved_size = BOARD_FLASH_RESERVED;
+#endif
+
+#if BOARD_FLASH_TYPE==qspi_nor
+flash_start = 0x60000000;
+#elif BOARD_FLASH_TYPE==hyperflash
flash_start = 0x60000000;
+#else
+#error Unknown BOARD_FLASH_TYPE
+#endif
+flash_size = BOARD_FLASH_SIZE;
flash_end = DEFINED(reserved_size) ? ((flash_start) + (flash_size - reserved_size)) : ((flash_start) + (flash_size));
flash_config_start = flash_start;
flash_config_size = 0x00001000;
-ivt_start = 0x60001000;
+ivt_start = flash_start + 0x00001000;
ivt_size = 0x00001000;
-interrupts_start = 0x60002000;
+interrupts_start = flash_start + 0x00002000;
interrupts_size = 0x00000400;
-text_start = 0x60002400;
-vfs_start = 0x60100000;
+text_start = flash_start + 0x00002400;
+vfs_start = flash_start + 0x00100000;
text_size = ((vfs_start) - (text_start));
vfs_size = ((flash_end) - (vfs_start));
itcm_start = 0x00000000;
diff --git a/ports/mimxrt/boards/MIMXRT1064.ld b/ports/mimxrt/boards/MIMXRT1064.ld
index 820393001..88720896f 100644
--- a/ports/mimxrt/boards/MIMXRT1064.ld
+++ b/ports/mimxrt/boards/MIMXRT1064.ld
@@ -1,14 +1,27 @@
/* Memory configuration */
+#if BOARD_FLASH_RESERVED
+reserved_size = BOARD_FLASH_RESERVED;
+#endif
+
+#if BOARD_FLASH_TYPE==qspi_nor
+flash_start = 0x60000000;
+#elif BOARD_FLASH_TYPE==hyperflash
flash_start = 0x60000000;
+#elif BOARD_FLASH_TYPE==internal
+flash_start = 0x70000000;
+#else
+#error Unknown BOARD_FLASH_TYPE
+#endif
+flash_size = BOARD_FLASH_SIZE;
flash_end = DEFINED(reserved_size) ? ((flash_start) + (flash_size - reserved_size)) : ((flash_start) + (flash_size));
flash_config_start = flash_start;
flash_config_size = 0x00001000;
-ivt_start = 0x60001000;
+ivt_start = flash_start + 0x00001000;
ivt_size = 0x00001000;
-interrupts_start = 0x60002000;
+interrupts_start = flash_start + 0x00002000;
interrupts_size = 0x00000400;
-text_start = 0x60002400;
-vfs_start = 0x60100000;
+text_start = flash_start + 0x00002400;
+vfs_start = flash_start + 0x00100000;
text_size = ((vfs_start) - (text_start));
vfs_size = ((flash_end) - (vfs_start));
itcm_start = 0x00000000;
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK.ld b/ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK.ld
deleted file mode 100644
index f616178a9..000000000
--- a/ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK.ld
+++ /dev/null
@@ -1 +0,0 @@
-flash_size = 64M; \ No newline at end of file
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK_flexspi_nor_config.h
new file mode 100644
index 000000000..01b3194e3
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1064_EVK/MIMXRT1064_EVK_flexspi_nor_config.h
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef __EVKMIMXRT1064_FLEXSPI_NOR_CONFIG__
+#define __EVKMIMXRT1064_FLEXSPI_NOR_CONFIG__
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_flexspi.h"
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief XIP_BOARD driver version 2.0.0. */
+#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
+/*@}*/
+
+/* FLEXSPI memory config block related defintions */
+#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
+#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
+#define FLEXSPI_CFG_BLK_SIZE (512)
+
+/* FLEXSPI Feature related definitions */
+#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related defintions */
+#define CMD_INDEX_READ 0
+#define CMD_INDEX_READSTATUS 1
+#define CMD_INDEX_WRITEENABLE 2
+#define CMD_INDEX_WRITE 4
+
+#define CMD_LUT_SEQ_IDX_READ 0
+#define CMD_LUT_SEQ_IDX_READSTATUS 1
+#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define CMD_LUT_SEQ_IDX_WRITE 9
+
+#define CMD_SDR 0x01
+#define CMD_DDR 0x21
+#define RADDR_SDR 0x02
+#define RADDR_DDR 0x22
+#define CADDR_SDR 0x03
+#define CADDR_DDR 0x23
+#define MODE1_SDR 0x04
+#define MODE1_DDR 0x24
+#define MODE2_SDR 0x05
+#define MODE2_DDR 0x25
+#define MODE4_SDR 0x06
+#define MODE4_DDR 0x26
+#define MODE8_SDR 0x07
+#define MODE8_DDR 0x27
+#define WRITE_SDR 0x08
+#define WRITE_DDR 0x28
+#define READ_SDR 0x09
+#define READ_DDR 0x29
+#define LEARN_SDR 0x0A
+#define LEARN_DDR 0x2A
+#define DATSZ_SDR 0x0B
+#define DATSZ_DDR 0x2B
+#define DUMMY_SDR 0x0C
+#define DUMMY_DDR 0x2C
+#define DUMMY_RWDS_SDR 0x0D
+#define DUMMY_RWDS_DDR 0x2D
+#define JMP_ON_CS 0x1F
+#define STOP 0
+
+#define FLEXSPI_1PAD 0
+#define FLEXSPI_2PAD 1
+#define FLEXSPI_4PAD 2
+#define FLEXSPI_8PAD 3
+
+#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
+ (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+ FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+// !@brief Definitions for FlexSPI Serial Clock Frequency
+typedef enum _FlexSpiSerialClockFreq
+{
+ kFlexSpiSerialClk_30MHz = 1,
+ kFlexSpiSerialClk_50MHz = 2,
+ kFlexSpiSerialClk_60MHz = 3,
+ kFlexSpiSerialClk_75MHz = 4,
+ kFlexSpiSerialClk_80MHz = 5,
+ kFlexSpiSerialClk_100MHz = 6,
+ kFlexSpiSerialClk_120MHz = 7,
+ kFlexSpiSerialClk_133MHz = 8,
+ kFlexSpiSerialClk_166MHz = 9,
+} flexspi_serial_clk_freq_t;
+
+// !@brief FlexSPI clock configuration type
+enum
+{
+ kFlexSpiClk_SDR, // !< Clock configure for SDR mode
+ kFlexSpiClk_DDR, // !< Clock configurat for DDR mode
+};
+
+// !@brief FlexSPI Read Sample Clock Source definition
+typedef enum _FlashReadSampleClkSource
+{
+ kFlexSPIReadSampleClk_LoopbackInternally = 0,
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
+ kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
+ kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
+} flexspi_read_sample_clk_t;
+
+// !@brief Misc feature bit definitions
+enum
+{
+ kFlexSpiMiscOffset_DiffClkEnable = 0, // !< Bit for Differential clock enable
+ kFlexSpiMiscOffset_Ck2Enable = 1, // !< Bit for CK2 enable
+ kFlexSpiMiscOffset_ParallelEnable = 2, // !< Bit for Parallel mode enable
+ kFlexSpiMiscOffset_WordAddressableEnable = 3, // !< Bit for Word Addressable enable
+ kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, // !< Bit for Safe Configuration Frequency enable
+ kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, // !< Bit for Pad setting override enable
+ kFlexSpiMiscOffset_DdrModeEnable = 6, // !< Bit for DDR clock confiuration indication.
+};
+
+// !@brief Flash Type Definition
+enum
+{
+ kFlexSpiDeviceType_SerialNOR = 1, // !< Flash devices are Serial NOR
+ kFlexSpiDeviceType_SerialNAND = 2, // !< Flash devices are Serial NAND
+ kFlexSpiDeviceType_SerialRAM = 3, // !< Flash devices are Serial RAM/HyperFLASH
+ kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, // !< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
+ kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, // !< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
+};
+
+// !@brief Flash Pad Definitions
+enum
+{
+ kSerialFlash_1Pad = 1,
+ kSerialFlash_2Pads = 2,
+ kSerialFlash_4Pads = 4,
+ kSerialFlash_8Pads = 8,
+};
+
+// !@brief FlexSPI LUT Sequence structure
+typedef struct _lut_sequence
+{
+ uint8_t seqNum; // !< Sequence Number, valid number: 1-16
+ uint8_t seqId; // !< Sequence Index, valid number: 0-15
+ uint16_t reserved;
+} flexspi_lut_seq_t;
+
+// !@brief Flash Configuration Command Type
+enum
+{
+ kDeviceConfigCmdType_Generic, // !< Generic command, for example: configure dummy cycles, drive strength, etc
+ kDeviceConfigCmdType_QuadEnable, // !< Quad Enable command
+ kDeviceConfigCmdType_Spi2Xpi, // !< Switch from SPI to DPI/QPI/OPI mode
+ kDeviceConfigCmdType_Xpi2Spi, // !< Switch from DPI/QPI/OPI to SPI mode
+ kDeviceConfigCmdType_Spi2NoCmd, // !< Switch to 0-4-4/0-8-8 mode
+ kDeviceConfigCmdType_Reset, // !< Reset device command
+};
+
+// !@brief FlexSPI Memory Configuration Block
+typedef struct _FlexSPIConfig
+{
+ uint32_t tag; // !< [0x000-0x003] Tag, fixed value 0x42464346UL
+ uint32_t version; // !< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
+ uint32_t reserved0; // !< [0x008-0x00b] Reserved for future use
+ uint8_t readSampleClkSrc; // !< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
+ uint8_t csHoldTime; // !< [0x00d-0x00d] CS hold time, default value: 3
+ uint8_t csSetupTime; // !< [0x00e-0x00e] CS setup time, default value: 3
+ uint8_t columnAddressWidth; // !< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
+ // ! Serial NAND, need to refer to datasheet
+ uint8_t deviceModeCfgEnable; // !< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
+ uint8_t deviceModeType; // !< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
+ // ! Generic configuration, etc.
+ uint16_t waitTimeCfgCommands; // !< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
+ // ! DPI/QPI/OPI switch or reset command
+ flexspi_lut_seq_t deviceModeSeq; // !< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
+ // ! sequence number, [31:16] Reserved
+ uint32_t deviceModeArg; // !< [0x018-0x01b] Argument/Parameter for device configuration
+ uint8_t configCmdEnable; // !< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
+ uint8_t configModeType[3]; // !< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
+ flexspi_lut_seq_t
+ configCmdSeqs[3]; // !< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
+ uint32_t reserved1; // !< [0x02c-0x02f] Reserved for future use
+ uint32_t configCmdArgs[3]; // !< [0x030-0x03b] Arguments/Parameters for device Configuration commands
+ uint32_t reserved2; // !< [0x03c-0x03f] Reserved for future use
+ uint32_t controllerMiscOption; // !< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
+ // ! details
+ uint8_t deviceType; // !< [0x044-0x044] Device Type: See Flash Type Definition for more details
+ uint8_t sflashPadType; // !< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
+ uint8_t serialClkFreq; // !< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
+ // ! Chapter for more details
+ uint8_t lutCustomSeqEnable; // !< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
+ // ! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
+ uint32_t reserved3[2]; // !< [0x048-0x04f] Reserved for future use
+ uint32_t sflashA1Size; // !< [0x050-0x053] Size of Flash connected to A1
+ uint32_t sflashA2Size; // !< [0x054-0x057] Size of Flash connected to A2
+ uint32_t sflashB1Size; // !< [0x058-0x05b] Size of Flash connected to B1
+ uint32_t sflashB2Size; // !< [0x05c-0x05f] Size of Flash connected to B2
+ uint32_t csPadSettingOverride; // !< [0x060-0x063] CS pad setting override value
+ uint32_t sclkPadSettingOverride; // !< [0x064-0x067] SCK pad setting override value
+ uint32_t dataPadSettingOverride; // !< [0x068-0x06b] data pad setting override value
+ uint32_t dqsPadSettingOverride; // !< [0x06c-0x06f] DQS pad setting override value
+ uint32_t timeoutInMs; // !< [0x070-0x073] Timeout threshold for read status command
+ uint32_t commandInterval; // !< [0x074-0x077] CS deselect interval between two commands
+ uint16_t dataValidTime[2]; // !< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
+ uint16_t busyOffset; // !< [0x07c-0x07d] Busy offset, valid value: 0-31
+ uint16_t busyBitPolarity; // !< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
+ // ! busy flag is 0 when flash device is busy
+ uint32_t lookupTable[64]; // !< [0x080-0x17f] Lookup table holds Flash command sequences
+ flexspi_lut_seq_t lutCustomSeq[12]; // !< [0x180-0x1af] Customizable LUT Sequences
+ uint32_t reserved4[4]; // !< [0x1b0-0x1bf] Reserved for future use
+} flexspi_mem_config_t;
+
+/* */
+#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
+#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
+#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
+#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
+#define NOR_CMD_LUT_SEQ_IDX_READID 8
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
+#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
+#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
+
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA 0
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA 1
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS 2
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE 4
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR 6
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM 10
+#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP 12
+
+/*
+ * Serial NOR configuration block
+ */
+typedef struct _flexspi_nor_config
+{
+ flexspi_mem_config_t memConfig; // !< Common memory configuration info via FlexSPI
+ uint32_t pageSize; // !< Page size of Serial NOR
+ uint32_t sectorSize; // !< Sector size of Serial NOR
+ uint8_t ipcmdSerialClkFreq; // !< Clock frequency for IP command
+ uint8_t isUniformBlockSize; // !< Sector/Block size is the same
+ uint8_t reserved0[2]; // !< Reserved for future use
+ uint8_t serialNorType; // !< Serial NOR Flash type: 0/1/2/3
+ uint8_t needExitNoCmdMode; // !< Need to exit NoCmd mode before other IP command
+ uint8_t halfClkForNonReadCmd; // !< Half the Serial Clock for non-read command: true/false
+ uint8_t needRestoreNoCmdMode; // !< Need to Restore NoCmd mode after IP commmand execution
+ uint32_t blockSize; // !< Block size
+ uint32_t reserve2[11]; // !< Reserved for future use
+} flexspi_nor_config_t;
+
+#define FLASH_BUSY_STATUS_POL 0
+#define FLASH_BUSY_STATUS_OFFSET 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __EVKMIMXRT1064_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/clock_config.h b/ports/mimxrt/boards/MIMXRT1064_EVK/clock_config.h
new file mode 100644
index 000000000..13bc925a1
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1064_EVK/clock_config.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2018-2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
+
+#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 600000000U /*!< Core clock frequency: 600000000Hz */
+
+/* Clock outputs (values are in Hz): */
+#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 600000000UL
+#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL
+#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
+#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
+#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
+#define BOARD_BOOTCLOCKRUN_CSI_CLK_ROOT 12000000UL
+#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_125M_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_TX_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO2_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI2_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 150000000UL
+#define BOARD_BOOTCLOCKRUN_LCDIF_CLK_ROOT 67500000UL
+#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
+#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
+#define BOARD_BOOTCLOCKRUN_LVDS1_CLK 1200000000UL
+#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
+#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_PLL7_MAIN_CLK 24000000UL
+#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
+#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL
+#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
+#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL
+#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 198000000UL
+
+/*! @brief Arm PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN;
+/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
+/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
+ */
+extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/evkmimxrt1064_flexspi_nor_config.h b/ports/mimxrt/boards/MIMXRT1064_EVK/evkmimxrt1064_flexspi_nor_config.h
deleted file mode 100644
index 7560f2483..000000000
--- a/ports/mimxrt/boards/MIMXRT1064_EVK/evkmimxrt1064_flexspi_nor_config.h
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef __EVKMIMXRT1064_FLEXSPI_NOR_CONFIG__
-#define __EVKMIMXRT1064_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_flexspi.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related defintions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_120MHz = 7,
- kFlexSpiSerialClk_133MHz = 8,
- kFlexSpiSerialClk_166MHz = 9,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA 0
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA 1
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS 2
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE 4
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR 6
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM 10
-#define HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1064_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/flash_config.c b/ports/mimxrt/boards/MIMXRT1064_EVK/flash_config.c
deleted file mode 100644
index f308b7f8a..000000000
--- a/ports/mimxrt/boards/MIMXRT1064_EVK/flash_config.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "evkmimxrt1064_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
- .columnAddressWidth = 3u,
- // Enable DDR mode, Wordaddressable, Safe configuration, Differential clock
- .controllerMiscOption =
- (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
- (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
- .sflashPadType = kSerialFlash_8Pads,
- .serialClkFreq = kFlexSpiSerialClk_133MHz,
- .sflashA1Size = 64u * 1024u * 1024u,
- .dataValidTime = {16u, 16u},
- .lookupTable =
- {
- /* 0 Read Data */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
-
- /* 1 Write Data */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x02),
-
- /* 2 Read Status */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x70), // DATA 0x70
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 5] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x0B),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0),
-
- /* 4 Write Enable */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // DATA 0xAA
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 7] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
-
- /* 6 Erase Sector */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80), // DATA 0x80
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 7] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- // +2
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 8] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 9] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 10] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 11] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- // +3
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 12] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 13] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 14] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x30, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
-
- /* 10 program page with word program command sequence */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 1] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 3] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0), // DATA 0xA0
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 5] = FLEXSPI_LUT_SEQ(
- kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x80),
-
- /* 12 Erase chip */
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 1] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 2] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 3] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80),
- // +1
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 4] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 5] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 6] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 7] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- // +2
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 8] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 9] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 10] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 11] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
- // +3
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 12] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 13] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 14] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
- [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 15] =
- FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x10),
- },
- },
- .pageSize = 512u,
- .sectorSize = 256u * 1024u,
- .blockSize = 256u * 1024u,
- .isUniformBlockSize = true,
-};
-
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h
index 4534caa29..ab8a80a3a 100644
--- a/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h
+++ b/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h
@@ -5,8 +5,6 @@
#define MICROPY_HW_LED1_PIN (pin_GPIO_AD_B0_09)
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "evkmimxrt1064_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_hyper_flash.h"
#define MICROPY_HW_NUM_PIN_IRQS (4 * 32 + 3)
@@ -36,10 +34,10 @@
{ IOMUXC_GPIO_SD_B0_02_LPSPI1_SDO }, { IOMUXC_GPIO_SD_B0_03_LPSPI1_SDI },
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx, \
- kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
+ kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx, \
- kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
+ kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
// Define the mapping hardware I2C # to logical I2C #
// SDA/SCL HW-I2C Logical I2C
@@ -58,9 +56,9 @@
{ \
.cmd = {GPIO_SD_B0_00_USDHC1_CMD}, \
.clk = { GPIO_SD_B0_01_USDHC1_CLK }, \
- .cd_b = { GPIO_B1_12_USDHC1_CD_B },\
- .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 },\
- .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 },\
- .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 },\
- .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 },\
+ .cd_b = { GPIO_B1_12_USDHC1_CD_B }, \
+ .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 }, \
+ .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 }, \
+ .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 }, \
+ .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 }, \
}
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.mk b/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.mk
index fe3c442fa..19655da61 100644
--- a/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.mk
+++ b/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.mk
@@ -3,13 +3,10 @@ MCU_VARIANT = MIMXRT1064DVL6A
MICROPY_FLOAT_IMPL = double
MICROPY_PY_MACHINE_SDCARD = 1
+BOARD_FLASH_TYPE ?= hyperflash
+BOARD_FLASH_SIZE ?= 0x4000000 # 64MB
JLINK_PATH ?= /media/RT1064-EVK/
-CFLAGS += -DBOARD_FLASH_SIZE=0x400000
-
deploy: $(BUILD)/firmware.bin
cp $< $(JLINK_PATH)
-
-SRC_C += \
- hal/flexspi_hyper_flash.c
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/qspi_hyper_flash_config.c b/ports/mimxrt/boards/MIMXRT1064_EVK/qspi_hyper_flash_config.c
new file mode 100644
index 000000000..1b3349f91
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1064_EVK/qspi_hyper_flash_config.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .columnAddressWidth = 3u,
+ // Enable DDR mode, Wordaddressable, Safe configuration, Differential clock
+ .controllerMiscOption =
+ (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
+ (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
+ .sflashPadType = kSerialFlash_8Pads,
+ .serialClkFreq = kFlexSpiSerialClk_133MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .dataValidTime = {16u, 16u},
+ .lookupTable =
+ {
+ /* 0 Read Data */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
+
+ /* 1 Write Data */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x02),
+
+ /* 2 Read Status */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x70), // DATA 0x70
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 5] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x0B),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0),
+
+ /* 4 Write Enable */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // DATA 0xAA
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE + 7] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+
+ /* 6 Erase Sector */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80), // DATA 0x80
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 7] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ // +2
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 8] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 9] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 10] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 11] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ // +3
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 12] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 13] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR + 14] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x30, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),
+
+ /* 10 program page with word program command sequence */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 1] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA), // ADDR 0x555
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 3] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0), // DATA 0xA0
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 5] = FLEXSPI_LUT_SEQ(
+ kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x80),
+
+ /* 12 Erase chip */
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 1] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 2] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 3] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x80),
+ // +1
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 4] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 5] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 6] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 7] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ // +2
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 8] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 9] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 10] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x02),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 11] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x55),
+ // +3
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 12] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 13] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xAA),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 14] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x05),
+ [4 * HYPERFLASH_CMD_LUT_SEQ_IDX_ERASECHIP + 15] =
+ FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x10),
+ },
+ },
+ .pageSize = 512u,
+ .sectorSize = 256u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = true,
+};
+
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/qspi_nor_flash_config.c b/ports/mimxrt/boards/MIMXRT1064_EVK/qspi_nor_flash_config.c
new file mode 100644
index 000000000..290c6bc15
--- /dev/null
+++ b/ports/mimxrt/boards/MIMXRT1064_EVK/qspi_nor_flash_config.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .columnAddressWidth = 3u,
+ // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
+ .controllerMiscOption =
+ (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
+ (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
+ .sflashPadType = kSerialFlash_8Pads,
+ .serialClkFreq = kFlexSpiSerialClk_133MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .dataValidTime = {16u, 16u},
+ .lookupTable =
+ {
+ // 0 Read LUTs 0 -> 0
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 1 Read status register -> 1
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 2 Fast read quad mode - SDR
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 3 Write Enable -> 3
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 4 Read extend parameters
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 5 Erase Sector -> 5
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 6 Write Status Reg
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 7 Page Program - quad mode (-> 9)
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 8 Read ID
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 9 Page Program - single mode -> 9
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 10 Enter QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 11 Erase Chip
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 12 Exit QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ },
+ },
+ .pageSize = 512u,
+ .sectorSize = 256u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = true,
+};
+
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/TEENSY40/TEENSY40.ld b/ports/mimxrt/boards/TEENSY40/TEENSY40.ld
deleted file mode 100644
index a3b696db6..000000000
--- a/ports/mimxrt/boards/TEENSY40/TEENSY40.ld
+++ /dev/null
@@ -1,2 +0,0 @@
-flash_size = 2M;
-reserved_size = 4K; \ No newline at end of file
diff --git a/ports/mimxrt/boards/TEENSY40/TEENSY40_flexspi_nor_config.h b/ports/mimxrt/boards/TEENSY40/TEENSY40_flexspi_nor_config.h
new file mode 100644
index 000000000..b06def76c
--- /dev/null
+++ b/ports/mimxrt/boards/TEENSY40/TEENSY40_flexspi_nor_config.h
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.h
+
+#ifndef __TEENSY40_FLEXSPI_NOR_CONFIG__
+#define __TEENSY40_FLEXSPI_NOR_CONFIG__
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_common.h"
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief XIP_BOARD driver version 2.0.0. */
+#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
+/*@}*/
+
+/* FLEXSPI memory config block related defintions */
+#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
+#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
+#define FLEXSPI_CFG_BLK_SIZE (512)
+
+/* FLEXSPI Feature related definitions */
+#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related definitions */
+#define CMD_INDEX_READ 0
+#define CMD_INDEX_READSTATUS 1
+#define CMD_INDEX_WRITEENABLE 2
+#define CMD_INDEX_WRITE 4
+
+#define CMD_LUT_SEQ_IDX_READ 0
+#define CMD_LUT_SEQ_IDX_READSTATUS 1
+#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define CMD_LUT_SEQ_IDX_ERASE 5
+#define CMD_LUT_SEQ_IDX_WRITE 9
+
+#define CMD_SDR 0x01
+#define CMD_DDR 0x21
+#define RADDR_SDR 0x02
+#define RADDR_DDR 0x22
+#define CADDR_SDR 0x03
+#define CADDR_DDR 0x23
+#define MODE1_SDR 0x04
+#define MODE1_DDR 0x24
+#define MODE2_SDR 0x05
+#define MODE2_DDR 0x25
+#define MODE4_SDR 0x06
+#define MODE4_DDR 0x26
+#define MODE8_SDR 0x07
+#define MODE8_DDR 0x27
+#define WRITE_SDR 0x08
+#define WRITE_DDR 0x28
+#define READ_SDR 0x09
+#define READ_DDR 0x29
+#define LEARN_SDR 0x0A
+#define LEARN_DDR 0x2A
+#define DATSZ_SDR 0x0B
+#define DATSZ_DDR 0x2B
+#define DUMMY_SDR 0x0C
+#define DUMMY_DDR 0x2C
+#define DUMMY_RWDS_SDR 0x0D
+#define DUMMY_RWDS_DDR 0x2D
+#define JMP_ON_CS 0x1F
+#define STOP 0
+
+#define FLEXSPI_1PAD 0
+#define FLEXSPI_2PAD 1
+#define FLEXSPI_4PAD 2
+#define FLEXSPI_8PAD 3
+
+#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
+ (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+ FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+// !@brief Definitions for FlexSPI Serial Clock Frequency
+typedef enum _FlexSpiSerialClockFreq
+{
+ kFlexSpiSerialClk_30MHz = 1,
+ kFlexSpiSerialClk_50MHz = 2,
+ kFlexSpiSerialClk_60MHz = 3,
+ kFlexSpiSerialClk_75MHz = 4,
+ kFlexSpiSerialClk_80MHz = 5,
+ kFlexSpiSerialClk_100MHz = 6,
+ kFlexSpiSerialClk_120MHz = 7,
+ kFlexSpiSerialClk_133MHz = 8,
+ kFlexSpiSerialClk_166MHz = 9,
+} flexspi_serial_clk_freq_t;
+
+// !@brief FlexSPI clock configuration type
+enum
+{
+ kFlexSpiClk_SDR, // !< Clock configure for SDR mode
+ kFlexSpiClk_DDR, // !< Clock configurat for DDR mode
+};
+
+// !@brief FlexSPI Read Sample Clock Source definition
+typedef enum _FlashReadSampleClkSource
+{
+ kFlexSPIReadSampleClk_LoopbackInternally = 0,
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
+ kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
+ kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
+} flexspi_read_sample_clk_t;
+
+// !@brief Misc feature bit definitions
+enum
+{
+ kFlexSpiMiscOffset_DiffClkEnable = 0, // !< Bit for Differential clock enable
+ kFlexSpiMiscOffset_Ck2Enable = 1, // !< Bit for CK2 enable
+ kFlexSpiMiscOffset_ParallelEnable = 2, // !< Bit for Parallel mode enable
+ kFlexSpiMiscOffset_WordAddressableEnable = 3, // !< Bit for Word Addressable enable
+ kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, // !< Bit for Safe Configuration Frequency enable
+ kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, // !< Bit for Pad setting override enable
+ kFlexSpiMiscOffset_DdrModeEnable = 6, // !< Bit for DDR clock confiuration indication.
+};
+
+// !@brief Flash Type Definition
+enum
+{
+ kFlexSpiDeviceType_SerialNOR = 1, // !< Flash devices are Serial NOR
+ kFlexSpiDeviceType_SerialNAND = 2, // !< Flash devices are Serial NAND
+ kFlexSpiDeviceType_SerialRAM = 3, // !< Flash devices are Serial RAM/HyperFLASH
+ kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, // !< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
+ kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, // !< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
+};
+
+// !@brief Flash Pad Definitions
+enum
+{
+ kSerialFlash_1Pad = 1,
+ kSerialFlash_2Pads = 2,
+ kSerialFlash_4Pads = 4,
+ kSerialFlash_8Pads = 8,
+};
+
+// !@brief FlexSPI LUT Sequence structure
+typedef struct _lut_sequence
+{
+ uint8_t seqNum; // !< Sequence Number, valid number: 1-16
+ uint8_t seqId; // !< Sequence Index, valid number: 0-15
+ uint16_t reserved;
+} flexspi_lut_seq_t;
+
+// !@brief Flash Configuration Command Type
+enum
+{
+ kDeviceConfigCmdType_Generic, // !< Generic command, for example: configure dummy cycles, drive strength, etc
+ kDeviceConfigCmdType_QuadEnable, // !< Quad Enable command
+ kDeviceConfigCmdType_Spi2Xpi, // !< Switch from SPI to DPI/QPI/OPI mode
+ kDeviceConfigCmdType_Xpi2Spi, // !< Switch from DPI/QPI/OPI to SPI mode
+ kDeviceConfigCmdType_Spi2NoCmd, // !< Switch to 0-4-4/0-8-8 mode
+ kDeviceConfigCmdType_Reset, // !< Reset device command
+};
+
+// !@brief FlexSPI Memory Configuration Block
+typedef struct _FlexSPIConfig
+{
+ uint32_t tag; // !< [0x000-0x003] Tag, fixed value 0x42464346UL
+ uint32_t version; // !< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
+ uint32_t reserved0; // !< [0x008-0x00b] Reserved for future use
+ uint8_t readSampleClkSrc; // !< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
+ uint8_t csHoldTime; // !< [0x00d-0x00d] CS hold time, default value: 3
+ uint8_t csSetupTime; // !< [0x00e-0x00e] CS setup time, default value: 3
+ uint8_t columnAddressWidth; // !< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
+ // ! Serial NAND, need to refer to datasheet
+ uint8_t deviceModeCfgEnable; // !< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
+ uint8_t deviceModeType; // !< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
+ // ! Generic configuration, etc.
+ uint16_t waitTimeCfgCommands; // !< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
+ // ! DPI/QPI/OPI switch or reset command
+ flexspi_lut_seq_t deviceModeSeq; // !< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
+ // ! sequence number, [31:16] Reserved
+ uint32_t deviceModeArg; // !< [0x018-0x01b] Argument/Parameter for device configuration
+ uint8_t configCmdEnable; // !< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
+ uint8_t configModeType[3]; // !< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
+ flexspi_lut_seq_t
+ configCmdSeqs[3]; // !< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
+ uint32_t reserved1; // !< [0x02c-0x02f] Reserved for future use
+ uint32_t configCmdArgs[3]; // !< [0x030-0x03b] Arguments/Parameters for device Configuration commands
+ uint32_t reserved2; // !< [0x03c-0x03f] Reserved for future use
+ uint32_t controllerMiscOption; // !< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
+ // ! details
+ uint8_t deviceType; // !< [0x044-0x044] Device Type: See Flash Type Definition for more details
+ uint8_t sflashPadType; // !< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
+ uint8_t serialClkFreq; // !< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
+ // ! Chapter for more details
+ uint8_t lutCustomSeqEnable; // !< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
+ // ! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
+ uint32_t reserved3[2]; // !< [0x048-0x04f] Reserved for future use
+ uint32_t sflashA1Size; // !< [0x050-0x053] Size of Flash connected to A1
+ uint32_t sflashA2Size; // !< [0x054-0x057] Size of Flash connected to A2
+ uint32_t sflashB1Size; // !< [0x058-0x05b] Size of Flash connected to B1
+ uint32_t sflashB2Size; // !< [0x05c-0x05f] Size of Flash connected to B2
+ uint32_t csPadSettingOverride; // !< [0x060-0x063] CS pad setting override value
+ uint32_t sclkPadSettingOverride; // !< [0x064-0x067] SCK pad setting override value
+ uint32_t dataPadSettingOverride; // !< [0x068-0x06b] data pad setting override value
+ uint32_t dqsPadSettingOverride; // !< [0x06c-0x06f] DQS pad setting override value
+ uint32_t timeoutInMs; // !< [0x070-0x073] Timeout threshold for read status command
+ uint32_t commandInterval; // !< [0x074-0x077] CS deselect interval between two commands
+ uint16_t dataValidTime[2]; // !< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
+ uint16_t busyOffset; // !< [0x07c-0x07d] Busy offset, valid value: 0-31
+ uint16_t busyBitPolarity; // !< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
+ // ! busy flag is 0 when flash device is busy
+ uint32_t lookupTable[64]; // !< [0x080-0x17f] Lookup table holds Flash command sequences
+ flexspi_lut_seq_t lutCustomSeq[12]; // !< [0x180-0x1af] Customizable LUT Sequences
+ uint32_t reserved4[4]; // !< [0x1b0-0x1bf] Reserved for future use
+} flexspi_mem_config_t;
+
+/* */
+#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
+#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
+#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
+#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
+#define NOR_CMD_LUT_SEQ_IDX_READID 8
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
+#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
+#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
+
+/*
+ * Serial NOR configuration block
+ */
+typedef struct _flexspi_nor_config
+{
+ flexspi_mem_config_t memConfig; // !< Common memory configuration info via FlexSPI
+ uint32_t pageSize; // !< Page size of Serial NOR
+ uint32_t sectorSize; // !< Sector size of Serial NOR
+ uint8_t ipcmdSerialClkFreq; // !< Clock frequency for IP command
+ uint8_t isUniformBlockSize; // !< Sector/Block size is the same
+ uint8_t reserved0[2]; // !< Reserved for future use
+ uint8_t serialNorType; // !< Serial NOR Flash type: 0/1/2/3
+ uint8_t needExitNoCmdMode; // !< Need to exit NoCmd mode before other IP command
+ uint8_t halfClkForNonReadCmd; // !< Half the Serial Clock for non-read command: true/false
+ uint8_t needRestoreNoCmdMode; // !< Need to Restore NoCmd mode after IP commmand execution
+ uint32_t blockSize; // !< Block size
+ uint32_t reserve2[11]; // !< Reserved for future use
+} flexspi_nor_config_t;
+
+#define FLASH_BUSY_STATUS_POL 0
+#define FLASH_BUSY_STATUS_OFFSET 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/TEENSY40/clock_config.h b/ports/mimxrt/boards/TEENSY40/clock_config.h
new file mode 100644
index 000000000..082202484
--- /dev/null
+++ b/ports/mimxrt/boards/TEENSY40/clock_config.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2018-2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
+
+#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 600000000U /*!< Core clock frequency: 600000000Hz */
+
+/* Clock outputs (values are in Hz): */
+#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 600000000UL
+#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL
+#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
+#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
+#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
+#define BOARD_BOOTCLOCKRUN_CSI_CLK_ROOT 12000000UL
+#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_125M_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_TX_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO2_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI2_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 150000000UL
+#define BOARD_BOOTCLOCKRUN_LCDIF_CLK_ROOT 9642857UL
+#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
+#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
+#define BOARD_BOOTCLOCKRUN_LVDS1_CLK 1200000000UL
+#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
+#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_PLL7_MAIN_CLK 24000000UL
+#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
+#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL
+#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
+#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL
+#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 198000000UL
+
+/*! @brief Arm PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN;
+/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
+/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
+ */
+extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
diff --git a/ports/mimxrt/boards/TEENSY40/flash_config.c b/ports/mimxrt/boards/TEENSY40/flash_config.c
deleted file mode 100644
index 7a63cf825..000000000
--- a/ports/mimxrt/boards/TEENSY40/flash_config.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.c
-
-#include "teensy40_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
-
- .busyOffset = FLASH_BUSY_STATUS_OFFSET, // Status bit 0 indicates busy.
- .busyBitPolarity = FLASH_BUSY_STATUS_POL, // Busy when the bit is 1.
-
- .deviceModeCfgEnable = 1u,
- .deviceModeType = kDeviceConfigCmdType_QuadEnable,
- .deviceModeSeq = {
- .seqId = 4u,
- .seqNum = 1u,
- },
- .deviceModeArg = 0x0200,
- .configCmdEnable = 1u,
- .configModeType[0] = kDeviceConfigCmdType_Generic,
- .configCmdSeqs[0] = {
- .seqId = 2u,
- .seqNum = 1u,
- },
- .deviceType = kFlexSpiDeviceType_SerialNOR,
- // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
- .sflashPadType = kSerialFlash_4Pads,
- .serialClkFreq = kFlexSpiSerialClk_60MHz,
- .sflashA1Size = 2u * 1024u * 1024u,
- .lookupTable =
- {
- // 0 Read LUTs 0 -> 0
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 1 Read status register -> 1
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 2 Fast read quad mode - SDR
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 3 Write Enable -> 3
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 4 Read extend parameters
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 5 Erase Sector -> 5
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 6 Write Status Reg
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 7 Page Program - quad mode (-> 9)
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 8 Read ID
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 9 Page Program - single mode -> 9
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 10 Enter QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 11 Erase Chip
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 12 Exit QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- },
- },
- .pageSize = 256u,
- .sectorSize = 4u * 1024u,
- .ipcmdSerialClkFreq = kFlexSpiSerialClk_30MHz,
- .blockSize = 0x00010000,
- .isUniformBlockSize = false,
-};
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/TEENSY40/mpconfigboard.h b/ports/mimxrt/boards/TEENSY40/mpconfigboard.h
index 4a69303b5..ae0a23462 100644
--- a/ports/mimxrt/boards/TEENSY40/mpconfigboard.h
+++ b/ports/mimxrt/boards/TEENSY40/mpconfigboard.h
@@ -1,14 +1,10 @@
#define MICROPY_HW_BOARD_NAME "Teensy 4.0"
#define MICROPY_HW_MCU_NAME "MIMXRT1062DVJ6A"
-#define BOARD_FLASH_SIZE (2 * 1024 * 1024)
-
// Teensy 4.0 has 1 board LED
#define MICROPY_HW_LED1_PIN (pin_GPIO_B0_03)
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "teensy40_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_nor_flash.h"
#define MICROPY_HW_NUM_PIN_IRQS (4 * 32 + 3)
@@ -39,10 +35,10 @@
{ IOMUXC_GPIO_B0_02_LPSPI4_SDO }, { IOMUXC_GPIO_B0_01_LPSPI4_SDI },
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx, \
- kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
+ kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx, \
- kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
+ kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
// Define mapping hardware I2C # to logical I2C #
// SDA/SCL HW-I2C Logical I2C
@@ -63,9 +59,9 @@
{ \
.cmd = {GPIO_SD_B0_00_USDHC1_CMD}, \
.clk = { GPIO_SD_B0_01_USDHC1_CLK }, \
- .cd_b = { USDHC_DUMMY_PIN },\
- .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 },\
- .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 },\
- .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 },\
- .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 },\
+ .cd_b = { USDHC_DUMMY_PIN }, \
+ .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 }, \
+ .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 }, \
+ .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 }, \
+ .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 }, \
}
diff --git a/ports/mimxrt/boards/TEENSY40/mpconfigboard.mk b/ports/mimxrt/boards/TEENSY40/mpconfigboard.mk
index bd70fd092..170f93dcf 100644
--- a/ports/mimxrt/boards/TEENSY40/mpconfigboard.mk
+++ b/ports/mimxrt/boards/TEENSY40/mpconfigboard.mk
@@ -3,9 +3,9 @@ MCU_VARIANT = MIMXRT1062DVJ6A
MICROPY_FLOAT_IMPL = double
MICROPY_PY_MACHINE_SDCARD = 1
+BOARD_FLASH_TYPE ?= qspi_nor
+BOARD_FLASH_SIZE ?= 0x200000 # 2MB
+BOARD_FLASH_RESERVED ?= 0x1000 # 4KB
deploy: $(BUILD)/firmware.hex
teensy_loader_cli --mcu=imxrt1062 -v -w $<
-
-SRC_C += \
- hal/flexspi_nor_flash.c
diff --git a/ports/mimxrt/boards/TEENSY40/qspi_nor_flash_config.c b/ports/mimxrt/boards/TEENSY40/qspi_nor_flash_config.c
new file mode 100644
index 000000000..71d871b75
--- /dev/null
+++ b/ports/mimxrt/boards/TEENSY40/qspi_nor_flash_config.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.c
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+
+ .busyOffset = FLASH_BUSY_STATUS_OFFSET, // Status bit 0 indicates busy.
+ .busyBitPolarity = FLASH_BUSY_STATUS_POL, // Busy when the bit is 1.
+
+ .deviceModeCfgEnable = 1u,
+ .deviceModeType = kDeviceConfigCmdType_QuadEnable,
+ .deviceModeSeq = {
+ .seqId = 4u,
+ .seqNum = 1u,
+ },
+ .deviceModeArg = 0x0200,
+ .configCmdEnable = 1u,
+ .configModeType[0] = kDeviceConfigCmdType_Generic,
+ .configCmdSeqs[0] = {
+ .seqId = 2u,
+ .seqNum = 1u,
+ },
+ .deviceType = kFlexSpiDeviceType_SerialNOR,
+ // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
+ .sflashPadType = kSerialFlash_4Pads,
+ .serialClkFreq = kFlexSpiSerialClk_60MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .lookupTable =
+ {
+ // 0 Read LUTs 0 -> 0
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 1 Read status register -> 1
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 2 Fast read quad mode - SDR
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 3 Write Enable -> 3
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 4 Read extend parameters
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 5 Erase Sector -> 5
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 6 Write Status Reg
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 7 Page Program - quad mode (-> 9)
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 8 Read ID
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 9 Page Program - single mode -> 9
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 10 Enter QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 11 Erase Chip
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 12 Exit QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ },
+ },
+ .pageSize = 256u,
+ .sectorSize = 4u * 1024u,
+ .ipcmdSerialClkFreq = kFlexSpiSerialClk_30MHz,
+ .blockSize = 0x00010000,
+ .isUniformBlockSize = false,
+};
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/TEENSY40/teensy40_flexspi_nor_config.h b/ports/mimxrt/boards/TEENSY40/teensy40_flexspi_nor_config.h
deleted file mode 100644
index 445a0bacc..000000000
--- a/ports/mimxrt/boards/TEENSY40/teensy40_flexspi_nor_config.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.h
-
-#ifndef __TEENSY40_FLEXSPI_NOR_CONFIG__
-#define __TEENSY40_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_common.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related definitions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_ERASE 5
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_120MHz = 7,
- kFlexSpiSerialClk_133MHz = 8,
- kFlexSpiSerialClk_166MHz = 9,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/TEENSY41/TEENSY41.ld b/ports/mimxrt/boards/TEENSY41/TEENSY41.ld
deleted file mode 100755
index 7f3cfc302..000000000
--- a/ports/mimxrt/boards/TEENSY41/TEENSY41.ld
+++ /dev/null
@@ -1,2 +0,0 @@
-flash_size = 8M;
-reserved_size = 4K;
diff --git a/ports/mimxrt/boards/TEENSY41/TEENSY41_flexspi_nor_config.h b/ports/mimxrt/boards/TEENSY41/TEENSY41_flexspi_nor_config.h
new file mode 100644
index 000000000..b06def76c
--- /dev/null
+++ b/ports/mimxrt/boards/TEENSY41/TEENSY41_flexspi_nor_config.h
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.h
+
+#ifndef __TEENSY40_FLEXSPI_NOR_CONFIG__
+#define __TEENSY40_FLEXSPI_NOR_CONFIG__
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "fsl_common.h"
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief XIP_BOARD driver version 2.0.0. */
+#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
+/*@}*/
+
+/* FLEXSPI memory config block related defintions */
+#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
+#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
+#define FLEXSPI_CFG_BLK_SIZE (512)
+
+/* FLEXSPI Feature related definitions */
+#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related definitions */
+#define CMD_INDEX_READ 0
+#define CMD_INDEX_READSTATUS 1
+#define CMD_INDEX_WRITEENABLE 2
+#define CMD_INDEX_WRITE 4
+
+#define CMD_LUT_SEQ_IDX_READ 0
+#define CMD_LUT_SEQ_IDX_READSTATUS 1
+#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define CMD_LUT_SEQ_IDX_ERASE 5
+#define CMD_LUT_SEQ_IDX_WRITE 9
+
+#define CMD_SDR 0x01
+#define CMD_DDR 0x21
+#define RADDR_SDR 0x02
+#define RADDR_DDR 0x22
+#define CADDR_SDR 0x03
+#define CADDR_DDR 0x23
+#define MODE1_SDR 0x04
+#define MODE1_DDR 0x24
+#define MODE2_SDR 0x05
+#define MODE2_DDR 0x25
+#define MODE4_SDR 0x06
+#define MODE4_DDR 0x26
+#define MODE8_SDR 0x07
+#define MODE8_DDR 0x27
+#define WRITE_SDR 0x08
+#define WRITE_DDR 0x28
+#define READ_SDR 0x09
+#define READ_DDR 0x29
+#define LEARN_SDR 0x0A
+#define LEARN_DDR 0x2A
+#define DATSZ_SDR 0x0B
+#define DATSZ_DDR 0x2B
+#define DUMMY_SDR 0x0C
+#define DUMMY_DDR 0x2C
+#define DUMMY_RWDS_SDR 0x0D
+#define DUMMY_RWDS_DDR 0x2D
+#define JMP_ON_CS 0x1F
+#define STOP 0
+
+#define FLEXSPI_1PAD 0
+#define FLEXSPI_2PAD 1
+#define FLEXSPI_4PAD 2
+#define FLEXSPI_8PAD 3
+
+#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
+ (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+ FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+// !@brief Definitions for FlexSPI Serial Clock Frequency
+typedef enum _FlexSpiSerialClockFreq
+{
+ kFlexSpiSerialClk_30MHz = 1,
+ kFlexSpiSerialClk_50MHz = 2,
+ kFlexSpiSerialClk_60MHz = 3,
+ kFlexSpiSerialClk_75MHz = 4,
+ kFlexSpiSerialClk_80MHz = 5,
+ kFlexSpiSerialClk_100MHz = 6,
+ kFlexSpiSerialClk_120MHz = 7,
+ kFlexSpiSerialClk_133MHz = 8,
+ kFlexSpiSerialClk_166MHz = 9,
+} flexspi_serial_clk_freq_t;
+
+// !@brief FlexSPI clock configuration type
+enum
+{
+ kFlexSpiClk_SDR, // !< Clock configure for SDR mode
+ kFlexSpiClk_DDR, // !< Clock configurat for DDR mode
+};
+
+// !@brief FlexSPI Read Sample Clock Source definition
+typedef enum _FlashReadSampleClkSource
+{
+ kFlexSPIReadSampleClk_LoopbackInternally = 0,
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
+ kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
+ kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
+} flexspi_read_sample_clk_t;
+
+// !@brief Misc feature bit definitions
+enum
+{
+ kFlexSpiMiscOffset_DiffClkEnable = 0, // !< Bit for Differential clock enable
+ kFlexSpiMiscOffset_Ck2Enable = 1, // !< Bit for CK2 enable
+ kFlexSpiMiscOffset_ParallelEnable = 2, // !< Bit for Parallel mode enable
+ kFlexSpiMiscOffset_WordAddressableEnable = 3, // !< Bit for Word Addressable enable
+ kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, // !< Bit for Safe Configuration Frequency enable
+ kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, // !< Bit for Pad setting override enable
+ kFlexSpiMiscOffset_DdrModeEnable = 6, // !< Bit for DDR clock confiuration indication.
+};
+
+// !@brief Flash Type Definition
+enum
+{
+ kFlexSpiDeviceType_SerialNOR = 1, // !< Flash devices are Serial NOR
+ kFlexSpiDeviceType_SerialNAND = 2, // !< Flash devices are Serial NAND
+ kFlexSpiDeviceType_SerialRAM = 3, // !< Flash devices are Serial RAM/HyperFLASH
+ kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, // !< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
+ kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, // !< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
+};
+
+// !@brief Flash Pad Definitions
+enum
+{
+ kSerialFlash_1Pad = 1,
+ kSerialFlash_2Pads = 2,
+ kSerialFlash_4Pads = 4,
+ kSerialFlash_8Pads = 8,
+};
+
+// !@brief FlexSPI LUT Sequence structure
+typedef struct _lut_sequence
+{
+ uint8_t seqNum; // !< Sequence Number, valid number: 1-16
+ uint8_t seqId; // !< Sequence Index, valid number: 0-15
+ uint16_t reserved;
+} flexspi_lut_seq_t;
+
+// !@brief Flash Configuration Command Type
+enum
+{
+ kDeviceConfigCmdType_Generic, // !< Generic command, for example: configure dummy cycles, drive strength, etc
+ kDeviceConfigCmdType_QuadEnable, // !< Quad Enable command
+ kDeviceConfigCmdType_Spi2Xpi, // !< Switch from SPI to DPI/QPI/OPI mode
+ kDeviceConfigCmdType_Xpi2Spi, // !< Switch from DPI/QPI/OPI to SPI mode
+ kDeviceConfigCmdType_Spi2NoCmd, // !< Switch to 0-4-4/0-8-8 mode
+ kDeviceConfigCmdType_Reset, // !< Reset device command
+};
+
+// !@brief FlexSPI Memory Configuration Block
+typedef struct _FlexSPIConfig
+{
+ uint32_t tag; // !< [0x000-0x003] Tag, fixed value 0x42464346UL
+ uint32_t version; // !< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
+ uint32_t reserved0; // !< [0x008-0x00b] Reserved for future use
+ uint8_t readSampleClkSrc; // !< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
+ uint8_t csHoldTime; // !< [0x00d-0x00d] CS hold time, default value: 3
+ uint8_t csSetupTime; // !< [0x00e-0x00e] CS setup time, default value: 3
+ uint8_t columnAddressWidth; // !< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
+ // ! Serial NAND, need to refer to datasheet
+ uint8_t deviceModeCfgEnable; // !< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
+ uint8_t deviceModeType; // !< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
+ // ! Generic configuration, etc.
+ uint16_t waitTimeCfgCommands; // !< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
+ // ! DPI/QPI/OPI switch or reset command
+ flexspi_lut_seq_t deviceModeSeq; // !< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
+ // ! sequence number, [31:16] Reserved
+ uint32_t deviceModeArg; // !< [0x018-0x01b] Argument/Parameter for device configuration
+ uint8_t configCmdEnable; // !< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
+ uint8_t configModeType[3]; // !< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
+ flexspi_lut_seq_t
+ configCmdSeqs[3]; // !< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
+ uint32_t reserved1; // !< [0x02c-0x02f] Reserved for future use
+ uint32_t configCmdArgs[3]; // !< [0x030-0x03b] Arguments/Parameters for device Configuration commands
+ uint32_t reserved2; // !< [0x03c-0x03f] Reserved for future use
+ uint32_t controllerMiscOption; // !< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
+ // ! details
+ uint8_t deviceType; // !< [0x044-0x044] Device Type: See Flash Type Definition for more details
+ uint8_t sflashPadType; // !< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
+ uint8_t serialClkFreq; // !< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
+ // ! Chapter for more details
+ uint8_t lutCustomSeqEnable; // !< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
+ // ! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
+ uint32_t reserved3[2]; // !< [0x048-0x04f] Reserved for future use
+ uint32_t sflashA1Size; // !< [0x050-0x053] Size of Flash connected to A1
+ uint32_t sflashA2Size; // !< [0x054-0x057] Size of Flash connected to A2
+ uint32_t sflashB1Size; // !< [0x058-0x05b] Size of Flash connected to B1
+ uint32_t sflashB2Size; // !< [0x05c-0x05f] Size of Flash connected to B2
+ uint32_t csPadSettingOverride; // !< [0x060-0x063] CS pad setting override value
+ uint32_t sclkPadSettingOverride; // !< [0x064-0x067] SCK pad setting override value
+ uint32_t dataPadSettingOverride; // !< [0x068-0x06b] data pad setting override value
+ uint32_t dqsPadSettingOverride; // !< [0x06c-0x06f] DQS pad setting override value
+ uint32_t timeoutInMs; // !< [0x070-0x073] Timeout threshold for read status command
+ uint32_t commandInterval; // !< [0x074-0x077] CS deselect interval between two commands
+ uint16_t dataValidTime[2]; // !< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
+ uint16_t busyOffset; // !< [0x07c-0x07d] Busy offset, valid value: 0-31
+ uint16_t busyBitPolarity; // !< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
+ // ! busy flag is 0 when flash device is busy
+ uint32_t lookupTable[64]; // !< [0x080-0x17f] Lookup table holds Flash command sequences
+ flexspi_lut_seq_t lutCustomSeq[12]; // !< [0x180-0x1af] Customizable LUT Sequences
+ uint32_t reserved4[4]; // !< [0x1b0-0x1bf] Reserved for future use
+} flexspi_mem_config_t;
+
+/* */
+#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
+#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
+#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
+#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
+#define NOR_CMD_LUT_SEQ_IDX_READID 8
+#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
+#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
+#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
+
+/*
+ * Serial NOR configuration block
+ */
+typedef struct _flexspi_nor_config
+{
+ flexspi_mem_config_t memConfig; // !< Common memory configuration info via FlexSPI
+ uint32_t pageSize; // !< Page size of Serial NOR
+ uint32_t sectorSize; // !< Sector size of Serial NOR
+ uint8_t ipcmdSerialClkFreq; // !< Clock frequency for IP command
+ uint8_t isUniformBlockSize; // !< Sector/Block size is the same
+ uint8_t reserved0[2]; // !< Reserved for future use
+ uint8_t serialNorType; // !< Serial NOR Flash type: 0/1/2/3
+ uint8_t needExitNoCmdMode; // !< Need to exit NoCmd mode before other IP command
+ uint8_t halfClkForNonReadCmd; // !< Half the Serial Clock for non-read command: true/false
+ uint8_t needRestoreNoCmdMode; // !< Need to Restore NoCmd mode after IP commmand execution
+ uint32_t blockSize; // !< Block size
+ uint32_t reserve2[11]; // !< Reserved for future use
+} flexspi_nor_config_t;
+
+#define FLASH_BUSY_STATUS_POL 0
+#define FLASH_BUSY_STATUS_OFFSET 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/TEENSY41/clock_config.h b/ports/mimxrt/boards/TEENSY41/clock_config.h
new file mode 100644
index 000000000..082202484
--- /dev/null
+++ b/ports/mimxrt/boards/TEENSY41/clock_config.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2018-2019 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
+
+#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 600000000U /*!< Core clock frequency: 600000000Hz */
+
+/* Clock outputs (values are in Hz): */
+#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 600000000UL
+#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL
+#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
+#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
+#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
+#define BOARD_BOOTCLOCKRUN_CSI_CLK_ROOT 12000000UL
+#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_125M_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET2_TX_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 2400000UL
+#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 1200000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXIO2_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI2_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 130909090UL
+#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 75000000UL
+#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 150000000UL
+#define BOARD_BOOTCLOCKRUN_LCDIF_CLK_ROOT 9642857UL
+#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
+#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
+#define BOARD_BOOTCLOCKRUN_LVDS1_CLK 1200000000UL
+#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
+#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_PLL7_MAIN_CLK 24000000UL
+#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
+#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
+#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 75000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
+#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
+#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL
+#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
+#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL
+#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL
+#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 198000000UL
+
+/*! @brief Arm PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN;
+/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
+ */
+extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
+/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
+ */
+extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
diff --git a/ports/mimxrt/boards/TEENSY41/flash_config.c b/ports/mimxrt/boards/TEENSY41/flash_config.c
deleted file mode 100755
index f5066216d..000000000
--- a/ports/mimxrt/boards/TEENSY41/flash_config.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.c
-
-#include "teensy41_flexspi_nor_config.h"
-
-/* Component ID definition, used by tools. */
-#ifndef FSL_COMPONENT_ID
-#define FSL_COMPONENT_ID "platform.drivers.xip_board"
-#endif
-
-/*******************************************************************************
- * Code
- ******************************************************************************/
-#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
-#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
-__attribute__((section(".boot_hdr.conf")))
-#elif defined(__ICCARM__)
-#pragma location = ".boot_hdr.conf"
-#endif
-
-const flexspi_nor_config_t qspiflash_config = {
- .memConfig =
- {
- .tag = FLEXSPI_CFG_BLK_TAG,
- .version = FLEXSPI_CFG_BLK_VERSION,
- .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
- .csHoldTime = 3u,
- .csSetupTime = 3u,
-
- .busyOffset = FLASH_BUSY_STATUS_OFFSET, // Status bit 0 indicates busy.
- .busyBitPolarity = FLASH_BUSY_STATUS_POL, // Busy when the bit is 1.
-
- .deviceModeCfgEnable = 1u,
- .deviceModeType = kDeviceConfigCmdType_QuadEnable,
- .deviceModeSeq = {
- .seqId = 4u,
- .seqNum = 1u,
- },
- .deviceModeArg = 0x0200,
- .configCmdEnable = 1u,
- .configModeType[0] = kDeviceConfigCmdType_Generic,
- .configCmdSeqs[0] = {
- .seqId = 2u,
- .seqNum = 1u,
- },
- .deviceType = kFlexSpiDeviceType_SerialNOR,
- // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
- .sflashPadType = kSerialFlash_4Pads,
- .serialClkFreq = kFlexSpiSerialClk_60MHz,
- .sflashA1Size = 8u * 1024u * 1024u,
- .lookupTable =
- {
- // 0 Read LUTs 0 -> 0
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 1 Read status register -> 1
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 2 Fast read quad mode - SDR
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 3 Write Enable -> 3
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 4 Read extend parameters
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 5 Erase Sector -> 5
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 6 Write Status Reg
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 7 Page Program - quad mode (-> 9)
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 8 Read ID
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 9 Page Program - single mode -> 9
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
- FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 10 Enter QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 11 Erase Chip
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
-
- // 12 Exit QPI mode
- FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
- },
- },
- .pageSize = 256u,
- .sectorSize = 4u * 1024u,
- .ipcmdSerialClkFreq = kFlexSpiSerialClk_30MHz,
- .blockSize = 0x00010000,
- .isUniformBlockSize = false,
-};
-#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/TEENSY41/mpconfigboard.h b/ports/mimxrt/boards/TEENSY41/mpconfigboard.h
index 587bf9c62..7890ba762 100644
--- a/ports/mimxrt/boards/TEENSY41/mpconfigboard.h
+++ b/ports/mimxrt/boards/TEENSY41/mpconfigboard.h
@@ -1,14 +1,10 @@
#define MICROPY_HW_BOARD_NAME "Teensy 4.1"
#define MICROPY_HW_MCU_NAME "MIMXRT1062DVJ6A"
-#define BOARD_FLASH_SIZE (8 * 1024 * 1024)
-
// Teensy 4.1 has 1 board LED
#define MICROPY_HW_LED1_PIN (pin_GPIO_B0_03)
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
-#define BOARD_FLASH_CONFIG_HEADER_H "teensy41_flexspi_nor_config.h"
-#define BOARD_FLASH_OPS_HEADER_H "hal/flexspi_nor_flash.h"
#define MICROPY_HW_NUM_PIN_IRQS (4 * 32 + 3)
@@ -39,10 +35,10 @@
{ IOMUXC_GPIO_B0_02_LPSPI4_SDO }, { IOMUXC_GPIO_B0_01_LPSPI4_SDI },
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx, \
- kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
+ kDmaRequestMuxLPSPI3Rx, kDmaRequestMuxLPSPI4Rx }
#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx, \
- kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
+ kDmaRequestMuxLPSPI3Tx, kDmaRequestMuxLPSPI4Tx }
// Define mapping hardware I2C # to logical I2C #
// SDA/SCL HW-I2C Logical I2C
@@ -63,9 +59,9 @@
{ \
.cmd = {GPIO_SD_B0_00_USDHC1_CMD}, \
.clk = { GPIO_SD_B0_01_USDHC1_CLK }, \
- .cd_b = { USDHC_DUMMY_PIN },\
- .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 },\
- .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 },\
- .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 },\
- .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 },\
+ .cd_b = { USDHC_DUMMY_PIN }, \
+ .data0 = { GPIO_SD_B0_02_USDHC1_DATA0 }, \
+ .data1 = { GPIO_SD_B0_03_USDHC1_DATA1 }, \
+ .data2 = { GPIO_SD_B0_04_USDHC1_DATA2 }, \
+ .data3 = { GPIO_SD_B0_05_USDHC1_DATA3 }, \
}
diff --git a/ports/mimxrt/boards/TEENSY41/mpconfigboard.mk b/ports/mimxrt/boards/TEENSY41/mpconfigboard.mk
index bd70fd092..9a29a9b75 100755
--- a/ports/mimxrt/boards/TEENSY41/mpconfigboard.mk
+++ b/ports/mimxrt/boards/TEENSY41/mpconfigboard.mk
@@ -3,9 +3,9 @@ MCU_VARIANT = MIMXRT1062DVJ6A
MICROPY_FLOAT_IMPL = double
MICROPY_PY_MACHINE_SDCARD = 1
+BOARD_FLASH_TYPE ?= qspi_nor
+BOARD_FLASH_SIZE ?= 0x800000 # 8MB
+BOARD_FLASH_RESERVED ?= 0x1000 # 4KB
deploy: $(BUILD)/firmware.hex
teensy_loader_cli --mcu=imxrt1062 -v -w $<
-
-SRC_C += \
- hal/flexspi_nor_flash.c
diff --git a/ports/mimxrt/boards/TEENSY41/qspi_nor_flash_config.c b/ports/mimxrt/boards/TEENSY41/qspi_nor_flash_config.c
new file mode 100644
index 000000000..71d871b75
--- /dev/null
+++ b/ports/mimxrt/boards/TEENSY41/qspi_nor_flash_config.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2018 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.c
+
+#include BOARD_FLASH_CONFIG_HEADER_H
+
+/* Component ID definition, used by tools. */
+#ifndef FSL_COMPONENT_ID
+#define FSL_COMPONENT_ID "platform.drivers.xip_board"
+#endif
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const flexspi_nor_config_t qspiflash_config = {
+ .memConfig =
+ {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+
+ .busyOffset = FLASH_BUSY_STATUS_OFFSET, // Status bit 0 indicates busy.
+ .busyBitPolarity = FLASH_BUSY_STATUS_POL, // Busy when the bit is 1.
+
+ .deviceModeCfgEnable = 1u,
+ .deviceModeType = kDeviceConfigCmdType_QuadEnable,
+ .deviceModeSeq = {
+ .seqId = 4u,
+ .seqNum = 1u,
+ },
+ .deviceModeArg = 0x0200,
+ .configCmdEnable = 1u,
+ .configModeType[0] = kDeviceConfigCmdType_Generic,
+ .configCmdSeqs[0] = {
+ .seqId = 2u,
+ .seqNum = 1u,
+ },
+ .deviceType = kFlexSpiDeviceType_SerialNOR,
+ // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
+ .sflashPadType = kSerialFlash_4Pads,
+ .serialClkFreq = kFlexSpiSerialClk_60MHz,
+ .sflashA1Size = BOARD_FLASH_SIZE,
+ .lookupTable =
+ {
+ // 0 Read LUTs 0 -> 0
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 1 Read status register -> 1
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 2 Fast read quad mode - SDR
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 3 Write Enable -> 3
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 4 Read extend parameters
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 5 Erase Sector -> 5
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 6 Write Status Reg
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x04),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 7 Page Program - quad mode (-> 9)
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 8 Read ID
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 9 Page Program - single mode -> 9
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 24),
+ FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0, 0, 0, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 10 Enter QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 11 Erase Chip
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+
+ // 12 Exit QPI mode
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_4PAD, 0xF5, STOP, FLEXSPI_1PAD, 0),
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
+ },
+ },
+ .pageSize = 256u,
+ .sectorSize = 4u * 1024u,
+ .ipcmdSerialClkFreq = kFlexSpiSerialClk_30MHz,
+ .blockSize = 0x00010000,
+ .isUniformBlockSize = false,
+};
+#endif /* XIP_BOOT_HEADER_ENABLE */
diff --git a/ports/mimxrt/boards/TEENSY41/teensy41_flexspi_nor_config.h b/ports/mimxrt/boards/TEENSY41/teensy41_flexspi_nor_config.h
deleted file mode 100755
index 445a0bacc..000000000
--- a/ports/mimxrt/boards/TEENSY41/teensy41_flexspi_nor_config.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright 2018 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-// Based on tinyusb/hw/bsp/teensy_40/teensy40_flexspi_nor_config.h
-
-#ifndef __TEENSY40_FLEXSPI_NOR_CONFIG__
-#define __TEENSY40_FLEXSPI_NOR_CONFIG__
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "fsl_common.h"
-
-/*! @name Driver version */
-/*@{*/
-/*! @brief XIP_BOARD driver version 2.0.0. */
-#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
-/*@}*/
-
-/* FLEXSPI memory config block related defintions */
-#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) // ascii "FCFB" Big Endian
-#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL) // V1.4.0
-#define FLEXSPI_CFG_BLK_SIZE (512)
-
-/* FLEXSPI Feature related definitions */
-#define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
-
-/* Lookup table related definitions */
-#define CMD_INDEX_READ 0
-#define CMD_INDEX_READSTATUS 1
-#define CMD_INDEX_WRITEENABLE 2
-#define CMD_INDEX_WRITE 4
-
-#define CMD_LUT_SEQ_IDX_READ 0
-#define CMD_LUT_SEQ_IDX_READSTATUS 1
-#define CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define CMD_LUT_SEQ_IDX_ERASE 5
-#define CMD_LUT_SEQ_IDX_WRITE 9
-
-#define CMD_SDR 0x01
-#define CMD_DDR 0x21
-#define RADDR_SDR 0x02
-#define RADDR_DDR 0x22
-#define CADDR_SDR 0x03
-#define CADDR_DDR 0x23
-#define MODE1_SDR 0x04
-#define MODE1_DDR 0x24
-#define MODE2_SDR 0x05
-#define MODE2_DDR 0x25
-#define MODE4_SDR 0x06
-#define MODE4_DDR 0x26
-#define MODE8_SDR 0x07
-#define MODE8_DDR 0x27
-#define WRITE_SDR 0x08
-#define WRITE_DDR 0x28
-#define READ_SDR 0x09
-#define READ_DDR 0x29
-#define LEARN_SDR 0x0A
-#define LEARN_DDR 0x2A
-#define DATSZ_SDR 0x0B
-#define DATSZ_DDR 0x2B
-#define DUMMY_SDR 0x0C
-#define DUMMY_DDR 0x2C
-#define DUMMY_RWDS_SDR 0x0D
-#define DUMMY_RWDS_DDR 0x2D
-#define JMP_ON_CS 0x1F
-#define STOP 0
-
-#define FLEXSPI_1PAD 0
-#define FLEXSPI_2PAD 1
-#define FLEXSPI_4PAD 2
-#define FLEXSPI_8PAD 3
-
-#define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
- (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
- FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
-
-//!@brief Definitions for FlexSPI Serial Clock Frequency
-typedef enum _FlexSpiSerialClockFreq
-{
- kFlexSpiSerialClk_30MHz = 1,
- kFlexSpiSerialClk_50MHz = 2,
- kFlexSpiSerialClk_60MHz = 3,
- kFlexSpiSerialClk_75MHz = 4,
- kFlexSpiSerialClk_80MHz = 5,
- kFlexSpiSerialClk_100MHz = 6,
- kFlexSpiSerialClk_120MHz = 7,
- kFlexSpiSerialClk_133MHz = 8,
- kFlexSpiSerialClk_166MHz = 9,
-} flexspi_serial_clk_freq_t;
-
-//!@brief FlexSPI clock configuration type
-enum
-{
- kFlexSpiClk_SDR, //!< Clock configure for SDR mode
- kFlexSpiClk_DDR, //!< Clock configurat for DDR mode
-};
-
-//!@brief FlexSPI Read Sample Clock Source definition
-typedef enum _FlashReadSampleClkSource
-{
- kFlexSPIReadSampleClk_LoopbackInternally = 0,
- kFlexSPIReadSampleClk_LoopbackFromDqsPad = 1,
- kFlexSPIReadSampleClk_LoopbackFromSckPad = 2,
- kFlexSPIReadSampleClk_ExternalInputFromDqsPad = 3,
-} flexspi_read_sample_clk_t;
-
-//!@brief Misc feature bit definitions
-enum
-{
- kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
- kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
- kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
- kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
- kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
- kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
- kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication.
-};
-
-//!@brief Flash Type Definition
-enum
-{
- kFlexSpiDeviceType_SerialNOR = 1, //!< Flash devices are Serial NOR
- kFlexSpiDeviceType_SerialNAND = 2, //!< Flash devices are Serial NAND
- kFlexSpiDeviceType_SerialRAM = 3, //!< Flash devices are Serial RAM/HyperFLASH
- kFlexSpiDeviceType_MCP_NOR_NAND = 0x12, //!< Flash device is MCP device, A1 is Serial NOR, A2 is Serial NAND
- kFlexSpiDeviceType_MCP_NOR_RAM = 0x13, //!< Flash deivce is MCP device, A1 is Serial NOR, A2 is Serial RAMs
-};
-
-//!@brief Flash Pad Definitions
-enum
-{
- kSerialFlash_1Pad = 1,
- kSerialFlash_2Pads = 2,
- kSerialFlash_4Pads = 4,
- kSerialFlash_8Pads = 8,
-};
-
-//!@brief FlexSPI LUT Sequence structure
-typedef struct _lut_sequence
-{
- uint8_t seqNum; //!< Sequence Number, valid number: 1-16
- uint8_t seqId; //!< Sequence Index, valid number: 0-15
- uint16_t reserved;
-} flexspi_lut_seq_t;
-
-//!@brief Flash Configuration Command Type
-enum
-{
- kDeviceConfigCmdType_Generic, //!< Generic command, for example: configure dummy cycles, drive strength, etc
- kDeviceConfigCmdType_QuadEnable, //!< Quad Enable command
- kDeviceConfigCmdType_Spi2Xpi, //!< Switch from SPI to DPI/QPI/OPI mode
- kDeviceConfigCmdType_Xpi2Spi, //!< Switch from DPI/QPI/OPI to SPI mode
- kDeviceConfigCmdType_Spi2NoCmd, //!< Switch to 0-4-4/0-8-8 mode
- kDeviceConfigCmdType_Reset, //!< Reset device command
-};
-
-//!@brief FlexSPI Memory Configuration Block
-typedef struct _FlexSPIConfig
-{
- uint32_t tag; //!< [0x000-0x003] Tag, fixed value 0x42464346UL
- uint32_t version; //!< [0x004-0x007] Version,[31:24] -'V', [23:16] - Major, [15:8] - Minor, [7:0] - bugfix
- uint32_t reserved0; //!< [0x008-0x00b] Reserved for future use
- uint8_t readSampleClkSrc; //!< [0x00c-0x00c] Read Sample Clock Source, valid value: 0/1/3
- uint8_t csHoldTime; //!< [0x00d-0x00d] CS hold time, default value: 3
- uint8_t csSetupTime; //!< [0x00e-0x00e] CS setup time, default value: 3
- uint8_t columnAddressWidth; //!< [0x00f-0x00f] Column Address with, for HyperBus protocol, it is fixed to 3, For
- //! Serial NAND, need to refer to datasheet
- uint8_t deviceModeCfgEnable; //!< [0x010-0x010] Device Mode Configure enable flag, 1 - Enable, 0 - Disable
- uint8_t deviceModeType; //!< [0x011-0x011] Specify the configuration command type:Quad Enable, DPI/QPI/OPI switch,
- //! Generic configuration, etc.
- uint16_t waitTimeCfgCommands; //!< [0x012-0x013] Wait time for all configuration commands, unit: 100us, Used for
- //! DPI/QPI/OPI switch or reset command
- flexspi_lut_seq_t deviceModeSeq; //!< [0x014-0x017] Device mode sequence info, [7:0] - LUT sequence id, [15:8] - LUt
- //! sequence number, [31:16] Reserved
- uint32_t deviceModeArg; //!< [0x018-0x01b] Argument/Parameter for device configuration
- uint8_t configCmdEnable; //!< [0x01c-0x01c] Configure command Enable Flag, 1 - Enable, 0 - Disable
- uint8_t configModeType[3]; //!< [0x01d-0x01f] Configure Mode Type, similar as deviceModeTpe
- flexspi_lut_seq_t
- configCmdSeqs[3]; //!< [0x020-0x02b] Sequence info for Device Configuration command, similar as deviceModeSeq
- uint32_t reserved1; //!< [0x02c-0x02f] Reserved for future use
- uint32_t configCmdArgs[3]; //!< [0x030-0x03b] Arguments/Parameters for device Configuration commands
- uint32_t reserved2; //!< [0x03c-0x03f] Reserved for future use
- uint32_t controllerMiscOption; //!< [0x040-0x043] Controller Misc Options, see Misc feature bit definitions for more
- //! details
- uint8_t deviceType; //!< [0x044-0x044] Device Type: See Flash Type Definition for more details
- uint8_t sflashPadType; //!< [0x045-0x045] Serial Flash Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal
- uint8_t serialClkFreq; //!< [0x046-0x046] Serial Flash Frequencey, device specific definitions, See System Boot
- //! Chapter for more details
- uint8_t lutCustomSeqEnable; //!< [0x047-0x047] LUT customization Enable, it is required if the program/erase cannot
- //! be done using 1 LUT sequence, currently, only applicable to HyperFLASH
- uint32_t reserved3[2]; //!< [0x048-0x04f] Reserved for future use
- uint32_t sflashA1Size; //!< [0x050-0x053] Size of Flash connected to A1
- uint32_t sflashA2Size; //!< [0x054-0x057] Size of Flash connected to A2
- uint32_t sflashB1Size; //!< [0x058-0x05b] Size of Flash connected to B1
- uint32_t sflashB2Size; //!< [0x05c-0x05f] Size of Flash connected to B2
- uint32_t csPadSettingOverride; //!< [0x060-0x063] CS pad setting override value
- uint32_t sclkPadSettingOverride; //!< [0x064-0x067] SCK pad setting override value
- uint32_t dataPadSettingOverride; //!< [0x068-0x06b] data pad setting override value
- uint32_t dqsPadSettingOverride; //!< [0x06c-0x06f] DQS pad setting override value
- uint32_t timeoutInMs; //!< [0x070-0x073] Timeout threshold for read status command
- uint32_t commandInterval; //!< [0x074-0x077] CS deselect interval between two commands
- uint16_t dataValidTime[2]; //!< [0x078-0x07b] CLK edge to data valid time for PORT A and PORT B, in terms of 0.1ns
- uint16_t busyOffset; //!< [0x07c-0x07d] Busy offset, valid value: 0-31
- uint16_t busyBitPolarity; //!< [0x07e-0x07f] Busy flag polarity, 0 - busy flag is 1 when flash device is busy, 1 -
- //! busy flag is 0 when flash device is busy
- uint32_t lookupTable[64]; //!< [0x080-0x17f] Lookup table holds Flash command sequences
- flexspi_lut_seq_t lutCustomSeq[12]; //!< [0x180-0x1af] Customizable LUT Sequences
- uint32_t reserved4[4]; //!< [0x1b0-0x1bf] Reserved for future use
-} flexspi_mem_config_t;
-
-/* */
-#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL 0
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG 1
-#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD 2
-#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3
-#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 4
-#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
-#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG 6
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD 7
-#define NOR_CMD_LUT_SEQ_IDX_READID 8
-#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9
-#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI 10
-#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
-#define NOR_CMD_LUT_SEQ_IDX_EXITQPI 12
-
-/*
- * Serial NOR configuration block
- */
-typedef struct _flexspi_nor_config
-{
- flexspi_mem_config_t memConfig; //!< Common memory configuration info via FlexSPI
- uint32_t pageSize; //!< Page size of Serial NOR
- uint32_t sectorSize; //!< Sector size of Serial NOR
- uint8_t ipcmdSerialClkFreq; //!< Clock frequency for IP command
- uint8_t isUniformBlockSize; //!< Sector/Block size is the same
- uint8_t reserved0[2]; //!< Reserved for future use
- uint8_t serialNorType; //!< Serial NOR Flash type: 0/1/2/3
- uint8_t needExitNoCmdMode; //!< Need to exit NoCmd mode before other IP command
- uint8_t halfClkForNonReadCmd; //!< Half the Serial Clock for non-read command: true/false
- uint8_t needRestoreNoCmdMode; //!< Need to Restore NoCmd mode after IP commmand execution
- uint32_t blockSize; //!< Block size
- uint32_t reserve2[11]; //!< Reserved for future use
-} flexspi_nor_config_t;
-
-#define FLASH_BUSY_STATUS_POL 0
-#define FLASH_BUSY_STATUS_OFFSET 0
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __EVKMIMXRT1060_FLEXSPI_NOR_CONFIG__ */
diff --git a/ports/mimxrt/boards/make-flexram-config.py b/ports/mimxrt/boards/make-flexram-config.py
new file mode 100644
index 000000000..0a667ff5b
--- /dev/null
+++ b/ports/mimxrt/boards/make-flexram-config.py
@@ -0,0 +1,219 @@
+#!/usr/bin/env python3
+#
+# This file is part of the MicroPython project, http://micropython.org/
+#
+# The MIT License (MIT)
+#
+# Copyright (c) 2021 Philipp Ebensberger
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+"""Evaluate FlexRAM configuration and generate startup code."""
+
+import re
+import argparse
+
+# Regex for linker script configuration
+ocram_regex = r"^\s*ocrm_size\s*=\s*(?P<size>.*);"
+dtcm_regex = r"^\s*dtcm_size\s*=\s*(?P<size>.*);"
+itcm_regex = r"^\s*itcm_size\s*=\s*(?P<size>.*);"
+
+# Regex for GPR register base define in NXL hal
+gpr_base_regex = r"^.*IOMUXC_GPR_BASE\s*\((?P<base_addr>\w*)u\)"
+
+# Regex for FlexRAM parameters in NXP HAL
+fsl_ram_bank_size_regex = r"^.*FSL_FEATURE_FLEXRAM_INTERNAL_RAM_BANK_SIZE\s*\((?P<size>\w*)\)"
+fsl_bank_nbr_regex = (
+ r"^.*FSL_FEATURE_FLEXRAM_INTERNAL_RAM_TOTAL_BANK_NUMBERS\s*\((?P<number>\w*)\)"
+)
+
+
+"""
+According to AN12077:
+ The minimum configuration of OCRAM is 64 KB. This is required
+ due to ROM code requires at least 64 KB of RAM for its execution.
+
+ 2.1.1.1. Static configuration - Page 4
+"""
+ocram_min_size = 0x00010000 # 64 KB
+
+# Value parser
+def mimxrt_default_parser(defines_file, features_file, ld_script):
+ with open(ld_script, "r") as input_file:
+ input_str = input_file.read()
+ #
+ ocram_match = re.search(ocram_regex, input_str, re.MULTILINE)
+ dtcm_match = re.search(dtcm_regex, input_str, re.MULTILINE)
+ itcm_match = re.search(itcm_regex, input_str, re.MULTILINE)
+
+ with open(defines_file, "r") as input_file:
+ input_str = input_file.read()
+ mcu_define_file_match = re.search(gpr_base_regex, input_str, re.MULTILINE)
+
+ with open(features_file, "r") as input_file:
+ input_str = input_file.read()
+ fsl_ram_bank_size_match = re.search(fsl_ram_bank_size_regex, input_str, re.MULTILINE)
+ fsl_bank_nbr_match = re.search(fsl_bank_nbr_regex, input_str, re.MULTILINE)
+ #
+ extract = {
+ "ocram_size": int(ocram_match.group("size"), 16),
+ "dtcm_size": int(dtcm_match.group("size"), 16),
+ "itcm_size": int(itcm_match.group("size"), 16),
+ "gpr_base_addr": int(mcu_define_file_match.group("base_addr"), 16),
+ "fsl_ram_bank_size": int(fsl_ram_bank_size_match.group("size")),
+ "fsl_bank_nbr": int(fsl_bank_nbr_match.group("number")),
+ }
+ # Evaluate configuration
+ if extract["ocram_size"] < ocram_min_size:
+ raise ValueError("OCRAM size must be at least {:08X}!".format(ocram_min_size))
+
+ if (extract["ocram_size"] % extract["fsl_ram_bank_size"]) != 0:
+ raise ValueError("Configuration invalid!")
+
+ # Check if DTCM and ITCM size is either multiple of 32k or 4k,8k or 16k
+ if extract["dtcm_size"] != 0x0:
+ if extract["dtcm_size"] % extract["fsl_ram_bank_size"] != 0:
+ if extract["dtcm_size"] not in (0x00000000, 0x00001000, 0x00002000, 0x00004000):
+ raise ValueError("Configuration invalid!")
+
+ if extract["itcm_size"] != 0x0:
+ if extract["itcm_size"] % extract["fsl_ram_bank_size"] != 0:
+ if extract["itcm_size"] not in (0x00000000, 0x00001000, 0x00002000, 0x00004000):
+ raise ValueError("Configuration invalid!")
+ #
+ return extract
+
+
+# Code generators
+def mimxrt_default_gen_code(extract_dict):
+ flexram_bank_cfg = "0b"
+ avail_flexram = extract_dict["fsl_ram_bank_size"] * extract_dict["fsl_bank_nbr"]
+
+ if (
+ extract_dict["ocram_size"] + extract_dict["dtcm_size"] + extract_dict["itcm_size"]
+ ) > avail_flexram:
+ raise ValueError("Configuration exceeds available FlexRAM!")
+
+ bit_patterns = (
+ (extract_dict["ocram_size"], "01"),
+ (extract_dict["dtcm_size"], "10"),
+ (extract_dict["itcm_size"], "11"),
+ )
+
+ for size, pattern in bit_patterns:
+ for _ in range(0, size, extract_dict["fsl_ram_bank_size"]):
+ flexram_bank_cfg += pattern
+
+ # Generate GPR Register config
+ print(".equ __iomux_gpr14_adr, 0x{:08X}".format(extract_dict["gpr_base_addr"] + 0x38))
+ print(".equ __iomux_gpr16_adr, 0x{:08X}".format(extract_dict["gpr_base_addr"] + 0x40))
+ print(".equ __iomux_gpr17_adr, 0x{:08X}".format(extract_dict["gpr_base_addr"] + 0x44))
+ print(
+ ".equ __iomux_gpr17_value, 0x{:08X} /* {}k OCRAM, {}k DTCM, {}k ITCM */".format(
+ int(flexram_bank_cfg, 2),
+ extract_dict["ocram_size"] // 1024,
+ extract_dict["dtcm_size"] // 1024,
+ extract_dict["itcm_size"] // 1024,
+ )
+ )
+
+
+def mimxrt_106x_gen_code(extract_dict):
+ flexram_bank_cfg = "0b"
+ avail_flexram = extract_dict["fsl_ram_bank_size"] * extract_dict["fsl_bank_nbr"]
+ flexram_configurable_ocram = (
+ extract_dict["ocram_size"] % 524288
+ ) # 512kB OCRAM are not part of FlexRAM configurable memory
+
+ if (
+ flexram_configurable_ocram + extract_dict["dtcm_size"] + extract_dict["itcm_size"]
+ ) > avail_flexram:
+ raise ValueError("Configuration exceeds available FlexRAM!")
+
+ for size, pattern in (
+ (flexram_configurable_ocram, "01"),
+ (extract_dict["dtcm_size"], "10"),
+ (extract_dict["itcm_size"], "11"),
+ ):
+ for _ in range(0, size, extract_dict["fsl_ram_bank_size"]):
+ flexram_bank_cfg += pattern
+
+ # Generate GPR Register config
+ print(".equ __iomux_gpr14_adr, 0x{:08X}".format(extract_dict["gpr_base_addr"] + 0x38))
+ print(".equ __iomux_gpr16_adr, 0x{:08X}".format(extract_dict["gpr_base_addr"] + 0x40))
+ print(".equ __iomux_gpr17_adr, 0x{:08X}".format(extract_dict["gpr_base_addr"] + 0x44))
+ print(
+ ".equ __iomux_gpr17_value, 0x{:08X} /* {}k OCRAM (512k OCRAM, {}k from FlexRAM), {}k DTCM, {}k ITCM */".format(
+ int(flexram_bank_cfg, 2),
+ extract_dict["ocram_size"] // 1024,
+ flexram_configurable_ocram // 1024,
+ extract_dict["dtcm_size"] // 1024,
+ extract_dict["itcm_size"] // 1024,
+ )
+ )
+
+
+def main(defines_file, features_file, ld_script, controller):
+ dispatcher = {
+ "MIMXRT1011": (mimxrt_default_parser, mimxrt_default_gen_code),
+ "MIMXRT1021": (mimxrt_default_parser, mimxrt_default_gen_code),
+ "MIMXRT1052": (mimxrt_default_parser, mimxrt_default_gen_code),
+ "MIMXRT1062": (mimxrt_default_parser, mimxrt_106x_gen_code),
+ "MIMXRT1064": (mimxrt_default_parser, mimxrt_106x_gen_code),
+ }
+
+ extractor, code_generator = dispatcher[controller]
+
+ extract_dict = extractor(defines_file, features_file, ld_script)
+ code_generator(extract_dict)
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ prog="make-flexram-ld.py",
+ usage="%(prog)s [options] [command]",
+ description="Evaluate FlexRAM configuration and generate startup code.",
+ )
+ parser.add_argument(
+ "-d",
+ "--defines_file",
+ dest="defines_file",
+ help="Path to MCU defines file",
+ default="../../../lib/nxp_driver/sdk/devices/MIMXRT1021/MIMXRT1021.h",
+ )
+ parser.add_argument(
+ "-f",
+ "--features_file",
+ dest="features_file",
+ help="Path to MCU features file",
+ default="../../../lib/nxp_driver/sdk/devices/MIMXRT1021/MIMXRT1021_features.h",
+ )
+ parser.add_argument(
+ "-l",
+ "--ld_file",
+ dest="linker_file",
+ help="Path to the aggregated linker-script",
+ default="MIMXRT1021.ld",
+ )
+ parser.add_argument(
+ "-c", "--controller", dest="controller", help="Controller name", default="MIMXRT1021"
+ )
+ #
+ args = parser.parse_args()
+ main(args.defines_file, args.features_file, args.linker_file, args.controller)
diff --git a/ports/mimxrt/hal/board.h b/ports/mimxrt/hal/board.h
new file mode 100644
index 000000000..ce5e04797
--- /dev/null
+++ b/ports/mimxrt/hal/board.h
@@ -0,0 +1,33 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2021 Philipp Ebensberger
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_MIMXRT_BOARD_H
+#define MICROPY_INCLUDED_MIMXRT_BOARD_H
+
+#include "clock_config.h"
+#include "fsl_common.h"
+
+#endif /* MICROPY_INCLUDED_MIMXRT_BOARD_H */
diff --git a/ports/mimxrt/hal/flexspi_hyper_flash.c b/ports/mimxrt/hal/flexspi_hyper_flash.c
index fb71d4d94..c7b41658a 100644
--- a/ports/mimxrt/hal/flexspi_hyper_flash.c
+++ b/ports/mimxrt/hal/flexspi_hyper_flash.c
@@ -16,14 +16,15 @@
__attribute__((always_inline)) static inline void clock_set_div(clock_div_t divider, uint32_t value) {
uint32_t busyShift;
- busyShift = CCM_TUPLE_BUSY_SHIFT(divider);
+ busyShift = CCM_TUPLE_BUSY_SHIFT(divider);
CCM_TUPLE_REG(CCM, divider) = (CCM_TUPLE_REG(CCM, divider) & (~CCM_TUPLE_MASK(divider))) |
- (((uint32_t)((value) << CCM_TUPLE_SHIFT(divider))) & CCM_TUPLE_MASK(divider));
+ (((uint32_t)((value) << CCM_TUPLE_SHIFT(divider))) & CCM_TUPLE_MASK(divider));
/* Clock switch need Handshake? */
if (CCM_NO_BUSY_WAIT != busyShift) {
/* Wait until CCM internal handshake finish. */
- while (CCM->CDHIPR & (1U << busyShift)) {}
+ while (CCM->CDHIPR & (1U << busyShift)) {
+ }
}
}
@@ -32,7 +33,7 @@ __attribute__((always_inline)) static inline void clock_control_gate(clock_ip_na
uint32_t shift = ((uint32_t)name) & 0x1FU;
volatile uint32_t *reg;
- reg = ((volatile uint32_t *)&CCM->CCGR0) + index;
+ reg = ((volatile uint32_t *)&CCM->CCGR0) + index;
*reg = ((*reg) & ~(3U << shift)) | (((uint32_t)value) << shift);
}
@@ -44,9 +45,9 @@ __attribute__((always_inline)) static inline void clock_disable_clock(clock_ip_n
clock_control_gate(name, kCLOCK_ClockNotNeeded);
}
-#define DIV_PAGE_PGM 4
-#define DIV_ERASE_PGM 4
-#define DIV_READ 0
+#define DIV_PAGE_PGM 4
+#define DIV_ERASE_PGM 4
+#define DIV_READ 0
static void SetFlexSPIDiv(uint32_t div) __attribute__((section(".ram_functions")));
static void SetFlexSPIDiv(uint32_t div) {
@@ -54,7 +55,7 @@ static void SetFlexSPIDiv(uint32_t div) {
clock_disable_clock(kCLOCK_FlexSpi);
clock_set_div(kCLOCK_FlexspiDiv, div); /* flexspi clock 332M, DDR mode, internal clock 166M. */
clock_enable_clock(kCLOCK_FlexSpi);
- FLEXSPI_Enable(FLEXSPI, true);
+ FLEXSPI_Enable(FLEXSPI, true);
}
status_t flexspi_nor_hyperbus_read(FLEXSPI_Type *base, uint32_t addr, uint32_t *buffer, uint32_t bytes) __attribute__((section(".ram_functions")));
@@ -63,13 +64,13 @@ status_t flexspi_nor_hyperbus_read(FLEXSPI_Type *base, uint32_t addr, uint32_t *
status_t status;
flashXfer.deviceAddress = addr * 2;
- flashXfer.port = kFLEXSPI_PortA1;
- flashXfer.cmdType = kFLEXSPI_Read;
- flashXfer.SeqNumber = 1;
- flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA;
- flashXfer.data = buffer;
- flashXfer.dataSize = bytes;
- status = FLEXSPI_TransferBlocking(base, &flashXfer);
+ flashXfer.port = kFLEXSPI_PortA1;
+ flashXfer.cmdType = kFLEXSPI_Read;
+ flashXfer.SeqNumber = 1;
+ flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_READDATA;
+ flashXfer.data = buffer;
+ flashXfer.dataSize = bytes;
+ status = FLEXSPI_TransferBlocking(base, &flashXfer);
return status;
}
@@ -80,13 +81,13 @@ status_t flexspi_nor_hyperbus_write(FLEXSPI_Type *base, uint32_t addr, uint32_t
status_t status;
flashXfer.deviceAddress = addr * 2;
- flashXfer.port = kFLEXSPI_PortA1;
- flashXfer.cmdType = kFLEXSPI_Write;
- flashXfer.SeqNumber = 1;
- flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA;
- flashXfer.data = buffer;
- flashXfer.dataSize = bytes;
- status = FLEXSPI_TransferBlocking(base, &flashXfer);
+ flashXfer.port = kFLEXSPI_PortA1;
+ flashXfer.cmdType = kFLEXSPI_Write;
+ flashXfer.SeqNumber = 1;
+ flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEDATA;
+ flashXfer.data = buffer;
+ flashXfer.dataSize = bytes;
+ status = FLEXSPI_TransferBlocking(base, &flashXfer);
return status;
}
@@ -98,10 +99,10 @@ status_t flexspi_nor_write_enable(FLEXSPI_Type *base, uint32_t baseAddr) {
/* Write enable */
flashXfer.deviceAddress = baseAddr;
- flashXfer.port = kFLEXSPI_PortA1;
- flashXfer.cmdType = kFLEXSPI_Command;
- flashXfer.SeqNumber = 2;
- flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE;
+ flashXfer.port = kFLEXSPI_PortA1;
+ flashXfer.cmdType = kFLEXSPI_Command;
+ flashXfer.SeqNumber = 2;
+ flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_WRITEENABLE;
status = FLEXSPI_TransferBlocking(base, &flashXfer);
@@ -117,12 +118,12 @@ status_t flexspi_nor_wait_bus_busy(FLEXSPI_Type *base) {
flexspi_transfer_t flashXfer;
flashXfer.deviceAddress = 0;
- flashXfer.port = kFLEXSPI_PortA1;
- flashXfer.cmdType = kFLEXSPI_Read;
- flashXfer.SeqNumber = 2;
- flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS;
- flashXfer.data = &readValue;
- flashXfer.dataSize = 2;
+ flashXfer.port = kFLEXSPI_PortA1;
+ flashXfer.cmdType = kFLEXSPI_Read;
+ flashXfer.SeqNumber = 2;
+ flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_READSTATUS;
+ flashXfer.data = &readValue;
+ flashXfer.dataSize = 2;
do {
status = FLEXSPI_TransferBlocking(base, &flashXfer);
@@ -159,11 +160,11 @@ status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address) {
}
flashXfer.deviceAddress = address;
- flashXfer.port = kFLEXSPI_PortA1;
- flashXfer.cmdType = kFLEXSPI_Command;
- flashXfer.SeqNumber = 4;
- flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR;
- status = FLEXSPI_TransferBlocking(base, &flashXfer);
+ flashXfer.port = kFLEXSPI_PortA1;
+ flashXfer.cmdType = kFLEXSPI_Command;
+ flashXfer.SeqNumber = 4;
+ flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_ERASESECTOR;
+ status = FLEXSPI_TransferBlocking(base, &flashXfer);
if (status != kStatus_Success) {
return status;
@@ -174,13 +175,13 @@ status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address) {
return status;
}
-status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, uint32_t size ) __attribute__((section(".ram_functions")));
+status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, uint32_t size) __attribute__((section(".ram_functions")));
status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, uint32_t size) {
status_t status;
flexspi_transfer_t flashXfer;
/* Speed down flexspi clock */
- SetFlexSPIDiv(DIV_PAGE_PGM);
+ SetFlexSPIDiv(DIV_PAGE_PGM);
/* Write enable */
status = flexspi_nor_write_enable(base, address);
@@ -191,13 +192,13 @@ status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, co
/* Prepare page program command */
flashXfer.deviceAddress = address;
- flashXfer.port = kFLEXSPI_PortA1;
- flashXfer.cmdType = kFLEXSPI_Write;
- flashXfer.SeqNumber = 2;
- flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM;
- flashXfer.data = (uint32_t *)src;
- flashXfer.dataSize = size;
- status = FLEXSPI_TransferBlocking(base, &flashXfer);
+ flashXfer.port = kFLEXSPI_PortA1;
+ flashXfer.cmdType = kFLEXSPI_Write;
+ flashXfer.SeqNumber = 2;
+ flashXfer.seqIndex = HYPERFLASH_CMD_LUT_SEQ_IDX_PAGEPROGRAM;
+ flashXfer.data = (uint32_t *)src;
+ flashXfer.dataSize = size;
+ status = FLEXSPI_TransferBlocking(base, &flashXfer);
if (status != kStatus_Success) {
return status;
@@ -205,7 +206,7 @@ status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, co
status = flexspi_nor_wait_bus_busy(base);
- SetFlexSPIDiv(DIV_READ);
+ SetFlexSPIDiv(DIV_READ);
return status;
}
@@ -219,7 +220,7 @@ status_t flexspi_nor_hyperflash_cfi(FLEXSPI_Type *base) {
status_t status;
uint32_t buffer[2];
uint8_t data[4] = {0x00, 0x98};
- status = flexspi_nor_hyperbus_write(base, 0x555, (uint32_t *)data, 2);
+ status = flexspi_nor_hyperbus_write(base, 0x555, (uint32_t *)data, 2);
if (status != kStatus_Success) {
return status;
}
@@ -238,7 +239,7 @@ status_t flexspi_nor_hyperflash_cfi(FLEXSPI_Type *base) {
}
// ASO Exit 0xF000
data[1] = 0xF0;
- status = flexspi_nor_hyperbus_write(base, 0x0, (uint32_t *)data, 2);
+ status = flexspi_nor_hyperbus_write(base, 0x0, (uint32_t *)data, 2);
if (status != kStatus_Success) {
return status;
}
diff --git a/ports/mimxrt/hal/flexspi_hyper_flash.h b/ports/mimxrt/hal/flexspi_hyper_flash.h
index bba76c132..d51ca3073 100644
--- a/ports/mimxrt/hal/flexspi_hyper_flash.h
+++ b/ports/mimxrt/hal/flexspi_hyper_flash.h
@@ -26,15 +26,14 @@
#ifndef MICROPY_INCLUDED_MIMXRT_HAL_FLEXSPI_HYPER_FLASH_H
#define MICROPY_INCLUDED_MIMXRT_HAL_FLEXSPI_HYPER_FLASH_H
-#include "mpconfigboard.h"
#include "fsl_flexspi.h"
+#include "mpconfigboard.h"
#include BOARD_FLASH_CONFIG_HEADER_H
// Defined in boards flash_config.c
extern flexspi_nor_config_t qspiflash_config;
status_t flexspi_nor_hyperflash_cfi(FLEXSPI_Type *base);
-void flexspi_hyper_flash_init(void);
void flexspi_nor_update_lut(void);
status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address);
status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, uint32_t size);
diff --git a/ports/mimxrt/hal/flexspi_nor_flash.c b/ports/mimxrt/hal/flexspi_nor_flash.c
index a70d234d6..8c04150d1 100644
--- a/ports/mimxrt/hal/flexspi_nor_flash.c
+++ b/ports/mimxrt/hal/flexspi_nor_flash.c
@@ -41,8 +41,7 @@ void flexspi_nor_reset(FLEXSPI_Type *base) __attribute__((section(".ram_function
void flexspi_nor_reset(FLEXSPI_Type *base) {
// Using content of FLEXSPI_SoftwareReset directly to prevent issues when compiler does not inline function
base->MCR0 |= FLEXSPI_MCR0_SWRESET_MASK;
- while (base->MCR0 & FLEXSPI_MCR0_SWRESET_MASK)
- {
+ while (base->MCR0 & FLEXSPI_MCR0_SWRESET_MASK) {
}
}
@@ -63,7 +62,7 @@ status_t flexspi_nor_write_enable(FLEXSPI_Type *base, uint32_t baseAddr) {
return status;
}
-status_t flexspi_nor_wait_bus_busy(FLEXSPI_Type *base) __attribute__((section(".ram_functions"))) ;
+status_t flexspi_nor_wait_bus_busy(FLEXSPI_Type *base) __attribute__((section(".ram_functions")));
status_t flexspi_nor_wait_bus_busy(FLEXSPI_Type *base) {
/* Wait status ready. */
bool isBusy;
@@ -103,7 +102,7 @@ status_t flexspi_nor_wait_bus_busy(FLEXSPI_Type *base) {
return status;
}
-status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) __attribute__((section(".ram_functions"))) ;
+status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) __attribute__((section(".ram_functions")));
status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) {
flexspi_transfer_t flashXfer;
status_t status;
@@ -135,7 +134,7 @@ status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) {
return status;
}
-status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address) __attribute__((section(".ram_functions"))) ;
+status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address) __attribute__((section(".ram_functions")));
status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address) {
status_t status;
flexspi_transfer_t flashXfer;
@@ -166,7 +165,7 @@ status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address) {
return status;
}
-status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t dstAddr, const uint32_t *src, uint32_t size) __attribute__((section(".ram_functions"))) ;
+status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t dstAddr, const uint32_t *src, uint32_t size) __attribute__((section(".ram_functions")));
status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t dstAddr, const uint32_t *src, uint32_t size) {
status_t status;
flexspi_transfer_t flashXfer;
@@ -184,7 +183,7 @@ status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t dstAddr, co
flashXfer.cmdType = kFLEXSPI_Write;
flashXfer.SeqNumber = 1;
flashXfer.seqIndex = NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD;
- flashXfer.data = (uint32_t *) src;
+ flashXfer.data = (uint32_t *)src;
flashXfer.dataSize = size;
status = FLEXSPI_TransferBlocking(base, &flashXfer);
@@ -199,7 +198,7 @@ status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t dstAddr, co
return status;
}
-status_t flexspi_nor_get_vendor_id(FLEXSPI_Type *base, uint8_t *vendorId) __attribute__((section(".ram_functions"))) ;
+status_t flexspi_nor_get_vendor_id(FLEXSPI_Type *base, uint8_t *vendorId) __attribute__((section(".ram_functions")));
status_t flexspi_nor_get_vendor_id(FLEXSPI_Type *base, uint8_t *vendorId) {
uint32_t temp;
flexspi_transfer_t flashXfer;
diff --git a/ports/mimxrt/hal/flexspi_nor_flash.h b/ports/mimxrt/hal/flexspi_nor_flash.h
index c34df7416..f8c31488a 100644
--- a/ports/mimxrt/hal/flexspi_nor_flash.h
+++ b/ports/mimxrt/hal/flexspi_nor_flash.h
@@ -34,7 +34,6 @@
extern flexspi_nor_config_t qspiflash_config;
status_t flexspi_nor_get_vendor_id(FLEXSPI_Type *base, uint8_t *vendorId);
-status_t flexspi_nor_init(void);
void flexspi_nor_update_lut(void);
status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address);
status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, uint32_t size);
diff --git a/ports/mimxrt/hal/peripherals.h b/ports/mimxrt/hal/peripherals.h
new file mode 100644
index 000000000..81036b0a2
--- /dev/null
+++ b/ports/mimxrt/hal/peripherals.h
@@ -0,0 +1 @@
+// Empty file, necessary for compilation with NXP MCU SDK
diff --git a/ports/mimxrt/hal/pin_mux.h b/ports/mimxrt/hal/pin_mux.h
new file mode 100644
index 000000000..81036b0a2
--- /dev/null
+++ b/ports/mimxrt/hal/pin_mux.h
@@ -0,0 +1 @@
+// Empty file, necessary for compilation with NXP MCU SDK
diff --git a/ports/mimxrt/hal/resethandler_MIMXRT10xx.S b/ports/mimxrt/hal/resethandler_MIMXRT10xx.S
new file mode 100644
index 000000000..8fe061103
--- /dev/null
+++ b/ports/mimxrt/hal/resethandler_MIMXRT10xx.S
@@ -0,0 +1,175 @@
+/* ------------------------------------------------------------------------- */
+/* */
+/* Copyright 1997-2016 Freescale Semiconductor, Inc. */
+/* Copyright 2016-2019 NXP */
+/* All rights reserved. */
+/* */
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*****************************************************************************/
+/* Version: GCC for ARM Embedded Processors */
+/*****************************************************************************/
+ .syntax unified
+ .arch armv7-m
+
+#include"flexram_config.s"
+
+
+/* Reset Handler */
+
+ .thumb_func
+ .align 2
+ .globl Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+ cpsid i /* Mask interrupts */
+ .equ VTOR, 0xE000ED08
+ ldr r0, =VTOR
+ ldr r1, =__isr_vector
+ str r1, [r0]
+ ldr r2, [r1]
+ msr msp, r2
+
+/* Reconfigure the memory map, which must match the setting of the linker script */
+ dsb
+ isb
+ ldr r0, =__iomux_gpr17_adr /* load IOMUXC_GPR17 register address to R0 */
+ ldr r1, =__iomux_gpr17_value /* move FlexRAM configuration value to R1 */
+ str r1,[r0] /* store FLEXRAM configuration value to IOMUXC_GPR17 */
+ dsb
+ isb
+ ldr r0, =__iomux_gpr16_adr /* load IOMUXC_GPR16 register address to R0 */
+ ldr r1,[r0] /* load IOMUXC_GPR16 register value to R1 */
+ orr r1, r1, #4 /* set corresponding FLEXRAM_BANK_CFG_SEL bit */
+ str r1,[r0] /* store the value to IOMUXC_GPR16 (FLEXRAM_BANK_CFG_SEL = '1') */
+ dsb
+ isb
+
+#ifndef __NO_SYSTEM_INIT
+ ldr r0,=SystemInit
+ blx r0
+#endif
+/* Loop to copy data from read only memory to RAM. The ranges
+ * of copy from/to are specified by following symbols evaluated in
+ * linker script.
+ * __etext: End of code section, i.e., begin of data sections to copy from.
+ * __data_start__/__data_end__: RAM address range that data should be
+ * __noncachedata_start__/__noncachedata_end__ : none cachable region
+ * __ram_function_start__/__ram_function_end__ : ramfunction region
+ * copied to. Both must be aligned to 4 bytes boundary. */
+
+ ldr r1, =__etext
+ ldr r2, =__data_start__
+ ldr r3, =__data_end__
+
+#ifdef __PERFORMANCE_IMPLEMENTATION
+/* Here are two copies of loop implementations. First one favors performance
+ * and the second one favors code size. Default uses the second one.
+ * Define macro "__PERFORMANCE_IMPLEMENTATION" in project to use the first one */
+ subs r3, r2
+ ble .LC1
+.LC0:
+ subs r3, #4
+ ldr r0, [r1, r3]
+ str r0, [r2, r3]
+ bgt .LC0
+.LC1:
+#else /* code size implemenation */
+.LC0:
+ cmp r2, r3
+ ittt lt
+ ldrlt r0, [r1], #4
+ strlt r0, [r2], #4
+ blt .LC0
+#endif
+#ifdef __STARTUP_INITIALIZE_RAMFUNCTION
+ ldr r2, =__ram_function_start__
+ ldr r3, =__ram_function_end__
+#ifdef __PERFORMANCE_IMPLEMENTATION
+/* Here are two copies of loop implementations. First one favors performance
+ * and the second one favors code size. Default uses the second one.
+ * Define macro "__PERFORMANCE_IMPLEMENTATION" in project to use the first one */
+ subs r3, r2
+ ble .LC_ramfunc_copy_end
+.LC_ramfunc_copy_start:
+ subs r3, #4
+ ldr r0, [r1, r3]
+ str r0, [r2, r3]
+ bgt .LC_ramfunc_copy_start
+.LC_ramfunc_copy_end:
+#else /* code size implemenation */
+.LC_ramfunc_copy_start:
+ cmp r2, r3
+ ittt lt
+ ldrlt r0, [r1], #4
+ strlt r0, [r2], #4
+ blt .LC_ramfunc_copy_start
+#endif
+#endif /* __STARTUP_INITIALIZE_RAMFUNCTION */
+#ifdef __STARTUP_INITIALIZE_NONCACHEDATA
+ ldr r2, =__noncachedata_start__
+ ldr r3, =__noncachedata_init_end__
+#ifdef __PERFORMANCE_IMPLEMENTATION
+/* Here are two copies of loop implementations. First one favors performance
+ * and the second one favors code size. Default uses the second one.
+ * Define macro "__PERFORMANCE_IMPLEMENTATION" in project to use the first one */
+ subs r3, r2
+ ble .LC3
+.LC2:
+ subs r3, #4
+ ldr r0, [r1, r3]
+ str r0, [r2, r3]
+ bgt .LC2
+.LC3:
+#else /* code size implemenation */
+.LC2:
+ cmp r2, r3
+ ittt lt
+ ldrlt r0, [r1], #4
+ strlt r0, [r2], #4
+ blt .LC2
+#endif
+/* zero inited ncache section initialization */
+ ldr r3, =__noncachedata_end__
+ movs r0,0
+.LC4:
+ cmp r2,r3
+ itt lt
+ strlt r0,[r2],#4
+ blt .LC4
+#endif /* __STARTUP_INITIALIZE_NONCACHEDATA */
+
+#ifdef __STARTUP_CLEAR_BSS
+/* This part of work usually is done in C library startup code. Otherwise,
+ * define this macro to enable it in this startup.
+ *
+ * Loop to zero out BSS section, which uses following symbols
+ * in linker script:
+ * __bss_start__: start of BSS section. Must align to 4
+ * __bss_end__: end of BSS section. Must align to 4
+ */
+ ldr r1, =__bss_start__
+ ldr r2, =__bss_end__
+
+ movs r0, 0
+.LC5:
+ cmp r1, r2
+ itt lt
+ strlt r0, [r1], #4
+ blt .LC5
+#endif /* __STARTUP_CLEAR_BSS */
+
+ cpsie i /* Unmask interrupts */
+#ifndef __START
+#define __START _start
+#endif
+#ifndef __ATOLLIC__
+ ldr r0,=__START
+ blx r0
+#else
+ ldr r0,=__libc_init_array
+ blx r0
+ ldr r0,=main
+ bx r0
+#endif
+ .pool
+ .size Reset_Handler, . - Reset_Handler
diff --git a/tools/autobuild/build-mimxrt-latest.sh b/tools/autobuild/build-mimxrt-latest.sh
index 4db65c091..f5bc1397a 100755
--- a/tools/autobuild/build-mimxrt-latest.sh
+++ b/tools/autobuild/build-mimxrt-latest.sh
@@ -34,4 +34,4 @@ fi
do_build TEENSY40 TEENSY40 hex
do_build TEENSY41 TEENSY41 hex
do_build MIMXRT1020_EVK MIMXRT1020_EVK bin
-do_build MIMXRT1050_EVKB MIMXRT1050_EVKB bin
+do_build MIMXRT1050_EVK MIMXRT1050_EVK bin
diff --git a/tools/codeformat.py b/tools/codeformat.py
index a5d64739a..ab12745fa 100755
--- a/tools/codeformat.py
+++ b/tools/codeformat.py
@@ -52,6 +52,7 @@ PATHS = [
"examples/**/*.py",
"extmod/**/*.py",
"ports/**/*.py",
+ "ports/mimxrt/**/*.[ch]",
"py/**/*.py",
"tools/**/*.py",
"tests/**/*.py",