Files
2026-09-18 10:07:08 +03:00

165 lines
11 KiB
C

#include "fsl_flexspi.h" // peripheral structures
#include "fsl_romapi.h" // peripheral structures
#include "hal.h"
#define __DCD_DATA \
0xD2, 0x04, 0xB8, 0x41, 0xCC, 0x04, 0x0C, 0x04, 0x40, 0xCC, 0x02, 0x00, \
0x00, 0x00, 0x07, 0x03, 0x40, 0x0E, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x18, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x1C, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x24, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x28, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x30, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x3C, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x44, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x48, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x4C, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x50, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x54, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x58, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x60, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x64, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x6C, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x70, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x78, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x84, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x90, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x94, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0x98, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0x9C, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xA8, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xAC, 0x00, 0x00, 0x00, 0x10, \
0x40, 0x0E, 0x80, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xBC, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xC0, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xC8, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xCC, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xD4, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xD8, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xE0, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xE4, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xEC, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xF0, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x80, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xF8, \
0x00, 0x00, 0x00, 0x00, 0x40, 0x0E, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0E, 0x82, 0x54, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x58, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x5C, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0x60, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x64, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x68, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0x6C, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x70, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x74, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0x78, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x7C, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x80, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0x84, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x88, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x8C, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0x90, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x94, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0x98, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0x9C, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xA0, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xA4, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0xA8, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xAC, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xB0, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0xB4, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xB8, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xBC, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0xC0, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xC4, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xC8, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0xCC, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xD0, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xD4, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0xD8, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xDC, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xE0, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0xE4, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xE8, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xEC, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x82, 0xF0, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x82, 0xFC, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x00, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x83, 0x04, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x08, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x0C, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x83, 0x10, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x14, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x18, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x83, 0x1C, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x20, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x24, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x83, 0x28, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x2C, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x30, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x83, 0x34, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x38, \
0x00, 0x00, 0x00, 0x08, 0x40, 0x0E, 0x83, 0x3C, 0x00, 0x00, 0x00, 0x08, \
0x40, 0x0E, 0x83, 0x40, 0x00, 0x00, 0x00, 0x08, 0x40, 0x0D, 0x40, 0x00, \
0x10, 0x00, 0x00, 0x04, 0x40, 0x0D, 0x40, 0x08, 0x00, 0x00, 0x00, 0x81, \
0x40, 0x0D, 0x40, 0x0C, 0x00, 0x00, 0x00, 0x81, 0x40, 0x0D, 0x40, 0x10, \
0x80, 0x00, 0x00, 0x1D, 0x40, 0x0D, 0x40, 0x40, 0x00, 0x00, 0x0F, 0x32, \
0x40, 0x0D, 0x40, 0x44, 0x00, 0x77, 0x2A, 0x22, 0x40, 0x0D, 0x40, 0x48, \
0x00, 0x01, 0x0A, 0x0D, 0x40, 0x0D, 0x40, 0x4C, 0x21, 0x21, 0x04, 0x08, \
0x40, 0x0D, 0x40, 0x90, 0x80, 0x00, 0x00, 0x00, 0x40, 0x0D, 0x40, 0x94, \
0x00, 0x00, 0x00, 0x02, 0x40, 0x0D, 0x40, 0x98, 0x00, 0x00, 0x00, 0x00, \
0x40, 0x0D, 0x40, 0x9C, 0xA5, 0x5A, 0x00, 0x0F, 0xC0, 0x00, 0x04, 0x00, \
0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, \
0xC0, 0x00, 0x04, 0x00, 0xCC, 0x00, 0x14, 0x04, 0x40, 0x0D, 0x40, 0x3C, \
0x00, 0x00, 0x00, 0x03, 0x40, 0x0D, 0x40, 0x9C, 0xA5, 0x5A, 0x00, 0x0C, \
0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, \
0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, 0xCC, 0x00, 0x14, 0x04, \
0x40, 0x0D, 0x40, 0x3C, 0x00, 0x00, 0x00, 0x03, 0x40, 0x0D, 0x40, 0x9C, \
0xA5, 0x5A, 0x00, 0x0C, 0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, \
0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, \
0xCC, 0x00, 0x1C, 0x04, 0x40, 0x0D, 0x40, 0x3C, 0x00, 0x00, 0x00, 0x03, \
0x40, 0x0D, 0x40, 0xA0, 0x00, 0x00, 0x00, 0x33, 0x40, 0x0D, 0x40, 0x9C, \
0xA5, 0x5A, 0x00, 0x0A, 0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, \
0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, 0xC0, 0x00, 0x04, 0x00, \
0xCC, 0x00, 0x14, 0x04, 0x40, 0x0D, 0x40, 0x3C, 0x00, 0x00, 0x00, 0x03, \
0x40, 0x0D, 0x40, 0x4C, 0x21, 0x21, 0x04, 0x09
extern uint32_t __isr_vector[];
// RM 10.7.2
__attribute__((section(".dcd"), used))
const uint8_t __ivt_dcd_data[] = {__DCD_DATA};
// RM 10.7.1
__attribute__((section(".dat"), used)) const uint32_t __ivt_boot_data[] = {
FlexSPI1_AMBA_BASE, // boot start location
64 * 1024 * 1024, // size
0, // Plugin flag
0Xffffffff // empty - extra data word
};
__attribute__((section(".ivt"), used)) const uint32_t __ivt[8] = {
0x412000d1, // header: 41 - version, 2000 size, d1 tag
(uint32_t) __isr_vector, // entry
0, // reserved
(uint32_t) __ivt_dcd_data, // dcd
(uint32_t) __ivt_boot_data, // boot data
(uint32_t) __ivt, // this is us - ivt absolute address
0, // csf absolute address
0, // reserved for HAB
};
#define __FLEXSPI_QSPI_LUT { \
[0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEC, RADDR_SDR, FLEXSPI_4PAD, 0x20),\
[1] = FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),\
[4 * 1 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x04),\
[4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x0),\
[4 * 5 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x21, RADDR_SDR, FLEXSPI_1PAD, 0x20),\
[4 * 8 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD8, RADDR_SDR, FLEXSPI_1PAD, 0x18),\
[4 * 9 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x12, RADDR_SDR, FLEXSPI_1PAD, 0x20),\
[4 * 9 + 1] = FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x04, STOP, FLEXSPI_1PAD, 0x0),\
[4 * 11 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0x0),\
}
// MIMXRT1170-EVKB flash chip config: W25Q512NWEIQ
__attribute__((section(".cfg"), used))
const flexspi_nor_config_t __qspi_flash_cfg = {
.memConfig = {.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClkSrc = 1, // ReadSampleClk_LoopbackFromDqsPad
.csHoldTime = 3,
.csSetupTime = 3,
.controllerMiscOption = BIT(4),
.deviceType = 1, // serial NOR
.sflashPadType = 4,
.serialClkFreq = 7, // 133MHz
.sflashA1Size = 64 * 1024 * 1024,
.lookupTable = __FLEXSPI_QSPI_LUT},
.pageSize = 256,
.sectorSize = 4 * 1024,
.ipcmdSerialClkFreq = 1,
.blockSize = 64 * 1024,
.isUniformBlockSize = false};