-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
569 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
* Copyright 2020-2021 NXP | ||
* All rights reserved. | ||
* | ||
* SPDX-License-Identifier: BSD-3-Clause | ||
*/ | ||
|
||
#define __DCD_DATA \ | ||
0xD2, 0x03, 0xE0, 0x41, 0xCC, 0x03, 0x5C, 0x04, 0x40, 0x0F, 0xC0, 0x68, \ | ||
0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x0F, 0xC0, 0x6C, 0xFF, 0xFF, 0xFF, 0xFF, \ | ||
0x40, 0x0F, 0xC0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x0F, 0xC0, 0x74, \ | ||
0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x0F, 0xC0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, \ | ||
0x40, 0x0F, 0xC0, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x0F, 0xC0, 0x80, \ | ||
0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x0D, 0x80, 0x30, 0x00, 0x00, 0x20, 0x01, \ | ||
0x40, 0x0D, 0x81, 0x00, 0x10, 0x18, 0x10, 0x1B, 0x40, 0x0F, 0xC0, 0x14, \ | ||
0x00, 0x0A, 0x83, 0x40, 0x40, 0x1F, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x1C, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x28, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x2C, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x34, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x40, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x44, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x4C, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x50, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x54, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x58, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x5C, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x64, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x70, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x78, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x7C, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x84, 0x00, 0x00, 0x00, 0x10, 0x40, 0x1F, 0x80, 0x88, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x8C, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x94, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0x98, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0xA0, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0xA4, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x80, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0xAC, \ | ||
0x00, 0x00, 0x00, 0x00, 0x40, 0x1F, 0x80, 0xB0, 0x00, 0x00, 0x00, 0x00, \ | ||
0x40, 0x1F, 0x81, 0x88, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0x8C, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0x90, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0x94, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0x98, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0x9C, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xA0, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xA4, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xA8, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xAC, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xB0, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xB4, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xB8, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xBC, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xC0, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xC4, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xC8, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xCC, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xD0, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xD4, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xD8, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xDC, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xE0, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xE4, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xE8, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xEC, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xF0, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x81, 0xF4, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xF8, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x81, 0xFC, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x82, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x82, 0x04, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x82, 0x08, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x82, 0x0C, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x82, 0x10, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x82, 0x14, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x82, 0x18, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x82, 0x1C, \ | ||
0x00, 0x00, 0x00, 0xE1, 0x40, 0x1F, 0x82, 0x20, 0x00, 0x00, 0x00, 0xE1, \ | ||
0x40, 0x1F, 0x82, 0x24, 0x00, 0x00, 0x00, 0xE1, 0x40, 0x2F, 0x00, 0x00, \ | ||
0x10, 0x00, 0x00, 0x04, 0x40, 0x2F, 0x00, 0x08, 0x00, 0x00, 0x00, 0x81, \ | ||
0x40, 0x2F, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x81, 0x40, 0x2F, 0x00, 0x10, \ | ||
0x80, 0x00, 0x00, 0x1B, 0x40, 0x2F, 0x00, 0x14, 0x82, 0x00, 0x00, 0x1B, \ | ||
0x40, 0x2F, 0x00, 0x18, 0x84, 0x00, 0x00, 0x1B, 0x40, 0x2F, 0x00, 0x04, \ | ||
0x00, 0x00, 0x79, 0x88, 0x40, 0x2F, 0x00, 0x40, 0x00, 0x00, 0x0F, 0x07, \ | ||
0x40, 0x2F, 0x00, 0x44, 0x00, 0x65, 0x29, 0x22, 0x40, 0x2F, 0x00, 0x48, \ | ||
0x00, 0x01, 0x09, 0x20, 0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x08, \ | ||
0x40, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x21, 0x40, 0x2F, 0x00, 0x84, \ | ||
0x00, 0x88, 0x88, 0x88, 0x40, 0x2F, 0x00, 0x94, 0x00, 0x00, 0x00, 0x02, \ | ||
0x40, 0x2F, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2F, 0x00, 0x90, \ | ||
0x80, 0x00, 0x00, 0x00, 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0F, \ | ||
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, \ | ||
0xCC, 0x00, 0x14, 0x04, 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, \ | ||
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C, 0xCF, 0x00, 0x0C, 0x1C, \ | ||
0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0xCC, 0x00, 0x14, 0x04, \ | ||
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, 0x40, 0x2F, 0x00, 0x9C, \ | ||
0xA5, 0x5A, 0x00, 0x0C, 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, \ | ||
0x00, 0x00, 0x00, 0x01, 0xCC, 0x00, 0x1C, 0x04, 0x40, 0x2F, 0x00, 0xA0, \ | ||
0x00, 0x00, 0x00, 0x30, 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, \ | ||
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0A, 0xCF, 0x00, 0x0C, 0x1C, \ | ||
0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0xCC, 0x00, 0x0C, 0x04, \ | ||
0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x09 |
48 changes: 48 additions & 0 deletions
48
examples/nxp/rt1020-evk-make-baremetal-builtin/flash_image.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#include "dcd.h" // pin settings for MIMXRT1020-EVK board | ||
#include "flexspi.h" // peripheral structures | ||
#include "hal.h" | ||
|
||
extern uint32_t __isr_vector[]; | ||
|
||
// RM 9.7.2 | ||
__attribute__((section(".dcd"), used)) | ||
const uint8_t __ivt_dcd_data[] = {__DCD_DATA}; | ||
|
||
// RM 9.7.1 | ||
__attribute__((section(".dat"), used)) const uint32_t __ivt_boot_data[] = { | ||
FlexSPI_AMBA_BASE, // boot start location | ||
8 * 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 | ||
}; | ||
|
||
// MIMXRT1060-EVKB flash chip config: S25LP064A-JBLE | ||
__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 = 8 * 1024 * 1024, | ||
.lookupTable = __FLEXSPI_QSPI_LUT}, | ||
.pageSize = 256, | ||
.sectorSize = 4 * 1024, | ||
.ipcmdSerialClkFreq = 1, | ||
.blockSize = 64 * 1024, | ||
.isUniformBlockSize = false}; |
122 changes: 122 additions & 0 deletions
122
examples/nxp/rt1020-evk-make-baremetal-builtin/flexspi.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
/* | ||
* Copyright 2017-2021 NXP | ||
* All rights reserved. | ||
* | ||
* SPDX-License-Identifier: BSD-3-Clause | ||
*/ | ||
|
||
#include <stdint.h> | ||
#include <stdbool.h> | ||
|
||
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; | ||
|
||
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; | ||
|
||
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; | ||
|
||
/* 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_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)) | ||
|
||
#define CMD_SDR 0x01 | ||
#define CMD_DDR 0x21 | ||
#define DUMMY_SDR 0x0C | ||
#define DUMMY_DDR 0x2C | ||
#define RADDR_SDR 0x02 | ||
#define RADDR_DDR 0x22 | ||
#define READ_SDR 0x09 | ||
#define READ_DDR 0x29 | ||
#define WRITE_SDR 0x08 | ||
#define WRITE_DDR 0x28 | ||
#define STOP 0 | ||
|
||
#define FLEXSPI_1PAD 0 | ||
#define FLEXSPI_2PAD 1 | ||
#define FLEXSPI_4PAD 2 | ||
#define FLEXSPI_8PAD 3 | ||
|
||
#define __FLEXSPI_QSPI_LUT { \ | ||
[0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18), \ | ||
[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, 0x20, RADDR_SDR, FLEXSPI_1PAD, 0x18),\ | ||
[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, 0x02, RADDR_SDR, FLEXSPI_1PAD, 0x18),\ | ||
[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),\ | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,22 @@ | ||
ENTRY(Reset_Handler); | ||
MEMORY { | ||
flash_cfg(rx) : ORIGIN = 0x60000000, LENGTH = 4k | ||
flash_ivt(rx) : ORIGIN = 0x60001000, LENGTH = 4k | ||
flash_hdr(rx) : ORIGIN = 0x60000000, LENGTH = 8k | ||
flash_irq(rx) : ORIGIN = 0x60002000, LENGTH = 1k | ||
flash_code(rx) : ORIGIN = 0x60002400, LENGTH = 8183k | ||
|
||
ram0(rx) : ORIGIN = 0x00000000, LENGTH = 64k | ||
ram1(rw) : ORIGIN = 0x20000000, LENGTH = 64k | ||
ram2(rw) : ORIGIN = 0x20200000, LENGTH = 128k | ||
itcram(rx) : ORIGIN = 0x00000000, LENGTH = 64k | ||
dtcram(rw) : ORIGIN = 0x20000000, LENGTH = 64k | ||
ocram(rw) : ORIGIN = 0x20200000, LENGTH = 128k | ||
} | ||
__StackTop = ORIGIN(ram2) + LENGTH(ram2); | ||
__StackTop = ORIGIN(dtcram) + LENGTH(dtcram); | ||
|
||
SECTIONS { | ||
.cfg : { __FLASH_BASE = .; KEEP(* (.cfg)) } > flash_cfg | ||
.ivt : { KEEP(*(.ivt)) } > flash_ivt | ||
.hdr : { FILL(0xff) ; KEEP(*(.cfg)) . = 0x1000 ; KEEP(*(.ivt)) . = 0x1020 ; | ||
KEEP(*(.dat)) . = 0x1030 ; KEEP(*(.dcd)) . = 0x2000 ;} >flash_hdr | ||
.irq : { KEEP(*(.isr_vector)) } > flash_irq | ||
.text : { *(.text* .text.*) *(.rodata*) __etext = .; } > flash_code | ||
.data : { __data_start__ = .; *(.data SORT(.data.*)) __data_end__ = .; } > ram1 AT > flash_code | ||
.bss : { __bss_start__ = .; *(.bss SORT(.bss.*) COMMON) __bss_end__ = .; } > ram1 | ||
.text : { *(.text* .text.*) *(.rodata*) ; } > flash_code | ||
.data : { __data_start__ = .; *(.data SORT(.data.*)) __data_end__ = .; } > dtcram AT > flash_code | ||
__etext = LOADADDR(.data); | ||
.bss : { __bss_start__ = .; *(.bss SORT(.bss.*) COMMON) __bss_end__ = .; } > dtcram | ||
_end = .; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.