MCUXpresso SDK API Reference Manual
Rev. 0
NXP Semiconductors
|
The ROMAPI driver provides the functionalities to operate the external NOR Flash connected to the FLEXSPI controller.
The ROMAPI driver supports:
Data Structures | |
struct | serial_nor_config_option_t |
Serial NOR Configuration Option. More... | |
struct | flexspi_lut_seq_t |
FLEXSPI LUT Sequence structure. More... | |
struct | flexspi_mem_config_t |
FLEXSPI Memory Configuration Block. More... | |
struct | flexspi_nor_config_t |
Serial NOR configuration block. More... | |
struct | flexspi_xfer_t |
FLEXSPI Transfer Context. More... | |
Macros | |
#define | FSL_ROM_ROMAPI_VERSION (MAKE_VERSION(1U, 1U, 1U)) |
ROM API version 1.1.1. More... | |
#define | FSL_ROM_FLEXSPINOR_DRIVER_VERSION (MAKE_VERSION(1U, 7U, 0U)) |
ROM FLEXSPI NOR driver version 1.7.0. More... | |
#define | kROM_StatusGroup_FLEXSPINOR 201U |
ROM FLEXSPI NOR status group number. More... | |
#define | FSL_ROM_FLEXSPI_BITMASK(bit_offset) (1U << (bit_offset)) |
Generate bit mask. | |
#define | FLEXSPI_CFG_BLK_TAG (0x42464346UL) |
FLEXSPI memory config block related defintions. More... | |
#define | FLEXSPI_CFG_BLK_VERSION (0x56010400UL) |
V1.4.0. | |
#define | NOR_CMD_LUT_SEQ_IDX_READ 0U |
NOR LUT sequence index used for default LUT assignment NOTE: The will take effect if the lut sequences are not customized. More... | |
#define | NOR_CMD_LUT_SEQ_IDX_READSTATUS 1U |
Read Status LUT sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 2U |
Read status DPI/QPI/OPI sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3U |
Write Enable sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_WRITEENABLE_XPI 4U |
Write Enable DPI/QPI/OPI sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5U |
Erase Sector sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_ERASEBLOCK 8U |
Erase Block sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9U |
Program sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11U |
Chip Erase sequence in lookupTable id stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_READ_SFDP 13U |
Read SFDP sequence in lookupTable id stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_RESTORE_NOCMD 14U |
Restore 0-4-4/0-8-8 mode sequence id in lookupTable stored in config block. | |
#define | NOR_CMD_LUT_SEQ_IDX_EXIT_NOCMD 15U |
Exit 0-4-4/0-8-8 mode sequence id in lookupTable stored in config blobk. | |
Enumerations | |
enum | { kSerialFlash_ISSI_ManufacturerID = 0x9DU, kSerialFlash_Adesto_ManufacturerID = 0x1F, kSerialFlash_Winbond_ManufacturerID = 0xEFU, kSerialFlash_Cypress_ManufacturerID = 0x01U } |
Manufacturer ID. More... | |
enum | _flexspi_nor_status { kStatus_ROM_FLEXSPI_SequenceExecutionTimeout, kStatus_ROM_FLEXSPI_InvalidSequence = MAKE_STATUS(kStatusGroup_FLEXSPI, 1), kStatus_ROM_FLEXSPI_DeviceTimeout = MAKE_STATUS(kStatusGroup_FLEXSPI, 2), kStatus_ROM_FLEXSPINOR_SFDP_NotFound, kStatus_ROM_FLEXSPINOR_Flash_NotFound, kStatus_FLEXSPINOR_DTRRead_DummyProbeFailed } |
ROM FLEXSPI NOR flash status. More... | |
enum | flexspi_operation_t { kFLEXSPIOperation_Command, kFLEXSPIOperation_Config, kFLEXSPIOperation_Write, kFLEXSPIOperation_Read } |
Functions | |
void | ROM_API_Init (void) |
ROM API init. More... | |
Enter Bootloader | |
void | ROM_RunBootloader (void *arg) |
Enter Bootloader. More... | |
GetConfig | |
status_t | ROM_FLEXSPI_NorFlash_GetConfig (uint32_t instance, flexspi_nor_config_t *config, serial_nor_config_option_t *option) |
Get FLEXSPI NOR Configuration Block based on specified option. More... | |
Initialization | |
status_t | ROM_FLEXSPI_NorFlash_Init (uint32_t instance, flexspi_nor_config_t *config) |
Initialize Serial NOR devices via FLEXSPI. More... | |
Programming | |
status_t | ROM_FLEXSPI_NorFlash_ProgramPage (uint32_t instance, flexspi_nor_config_t *config, uint32_t dst_addr, const uint32_t *src) |
Program data to Serial NOR via FLEXSPI. More... | |
Reading | |
status_t | ROM_FLEXSPI_NorFlash_Read (uint32_t instance, flexspi_nor_config_t *config, uint32_t *dst, uint32_t start, uint32_t lengthInBytes) |
Read data from Serial NOR via FLEXSPI. More... | |
Erasing | |
status_t | ROM_FLEXSPI_NorFlash_Erase (uint32_t instance, flexspi_nor_config_t *config, uint32_t start, uint32_t length) |
Erase Flash Region specified by address and length. More... | |
status_t | ROM_FLEXSPI_NorFlash_EraseSector (uint32_t instance, flexspi_nor_config_t *config, uint32_t address) |
Erase one sector specified by address. More... | |
status_t | ROM_FLEXSPI_NorFlash_EraseBlock (uint32_t instance, flexspi_nor_config_t *config, uint32_t start) |
Erase one block specified by address. More... | |
status_t | ROM_FLEXSPI_NorFlash_EraseAll (uint32_t instance, flexspi_nor_config_t *config) |
Erase all the Serial NOR devices connected on FLEXSPI. More... | |
Command | |
status_t | ROM_FLEXSPI_NorFlash_CommandXfer (uint32_t instance, flexspi_xfer_t *xfer) |
FLEXSPI command. More... | |
UpdateLut | |
status_t | ROM_FLEXSPI_NorFlash_UpdateLut (uint32_t instance, uint32_t seqIndex, const uint32_t *lutBase, uint32_t seqNumber) |
Configure FLEXSPI Lookup table. More... | |
Device status | |
status_t | ROM_FLEXSPI_NorFlash_WaitBusy (uint32_t instance, flexspi_nor_config_t *config, bool isParallelMode, uint32_t address) |
Wait until device is idle. More... | |
ClearCache | |
void | ROM_FLEXSPI_NorFlash_ClearCache (uint32_t instance) |
Software reset for the FLEXSPI logic. More... | |
struct serial_nor_config_option_t |
struct flexspi_lut_seq_t |
struct flexspi_mem_config_t |
Data Fields | |
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] Data hold time, default value: 3 | |
uint8_t | csSetupTime |
[0x00e-0x00e] Date 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. More... | |
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 | |
flexspi_dll_time_t | dataValidTime [2] |
[0x078-0x07b] CLK edge to data valid time for PORT A and PORT B | |
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 | |
uint8_t flexspi_mem_config_t::deviceModeType |
struct flexspi_nor_config_t |
Data Fields | |
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 | isDataOrderSwapped |
Data order (D0, D1, D2, D3) is swapped (D1,D0, D3, D2) | |
uint8_t | reserved0 [1] |
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. | |
struct flexspi_xfer_t |
Data Fields | |
flexspi_operation_t | operation |
FLEXSPI operation. | |
uint32_t | baseAddress |
FLEXSPI operation base address. | |
uint32_t | seqId |
Sequence Id. | |
uint32_t | seqNum |
Sequence Number. | |
bool | isParallelModeEnable |
Is a parallel transfer. | |
uint32_t * | txBuffer |
Tx buffer. | |
uint32_t | txSize |
Tx size in bytes. | |
uint32_t * | rxBuffer |
Rx buffer. | |
uint32_t | rxSize |
Rx size in bytes. | |
#define FSL_ROM_ROMAPI_VERSION (MAKE_VERSION(1U, 1U, 1U)) |
#define FSL_ROM_FLEXSPINOR_DRIVER_VERSION (MAKE_VERSION(1U, 7U, 0U)) |
#define kROM_StatusGroup_FLEXSPINOR 201U |
#define FLEXSPI_CFG_BLK_TAG (0x42464346UL) |
ascii "FCFB" Big Endian
#define NOR_CMD_LUT_SEQ_IDX_READ 0U |
READ LUT sequence id in lookupTable stored in config block
anonymous enum |
anonymous enum |
anonymous enum |
anonymous enum |
enum _flexspi_nor_status |
enum flexspi_operation_t |
void ROM_API_Init | ( | void | ) |
Get the bootloader api entry address.
void ROM_RunBootloader | ( | void * | arg | ) |
arg | A pointer to the storage for the bootloader param. refer to System Boot Chapter in device reference manual for details. |
status_t ROM_FLEXSPI_NorFlash_GetConfig | ( | uint32_t | instance, |
flexspi_nor_config_t * | config, | ||
serial_nor_config_option_t * | option | ||
) |
instance | storge the instance of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
option | A pointer to the storage Serial NOR Configuration Option Context. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_Init | ( | uint32_t | instance, |
flexspi_nor_config_t * | config | ||
) |
This function checks and initializes the FLEXSPI module for the other FLEXSPI APIs.
instance | storge the instance of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_ProgramPage | ( | uint32_t | instance, |
flexspi_nor_config_t * | config, | ||
uint32_t | dst_addr, | ||
const uint32_t * | src | ||
) |
This function programs the NOR flash memory with the dest address for a given flash area as determined by the dst address and the length.
instance | storge the instance of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
dst_addr | A pointer to the desired flash memory to be programmed. NOTE: It is recommended that use page aligned access; If the dst_addr is not aligned to page,the driver automatically aligns address down with the page address. |
src | A pointer to the source buffer of data that is to be programmed into the NOR flash. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_Read | ( | uint32_t | instance, |
flexspi_nor_config_t * | config, | ||
uint32_t * | dst, | ||
uint32_t | start, | ||
uint32_t | lengthInBytes | ||
) |
This function read the NOR flash memory with the start address for a given flash area as determined by the dst address and the length.
instance | storge the instance of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
dst | A pointer to the dest buffer of data that is to be read from the NOR flash. NOTE: It is recommended that use page aligned access; If the dstAddr is not aligned to page,the driver automatically aligns address down with the page address. |
start | The start address of the desired NOR flash memory to be read. |
lengthInBytes | The length, given in bytes to be read. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_Erase | ( | uint32_t | instance, |
flexspi_nor_config_t * | config, | ||
uint32_t | start, | ||
uint32_t | length | ||
) |
This function erases the appropriate number of flash sectors based on the desired start address and length.
instance | storge the index of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
start | The start address of the desired NOR flash memory to be erased. NOTE: It is recommended that use sector-aligned access nor device; If dstAddr is not aligned with the sector,the driver automatically aligns address down with the sector address. |
length | The length, given in bytes to be erased. NOTE: It is recommended that use sector-aligned access nor device; If length is not aligned with the sector,the driver automatically aligns up with the sector. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_EraseSector | ( | uint32_t | instance, |
flexspi_nor_config_t * | config, | ||
uint32_t | address | ||
) |
This function erases one of NOR flash sectors based on the desired address.
instance | storge the index of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
address | The start address of the desired NOR flash memory to be erased. NOTE: It is recommended that use sector-aligned access nor device; If dstAddr is not aligned with the sector,The driver automatically aligns address down with the sector address. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_EraseBlock | ( | uint32_t | instance, |
flexspi_nor_config_t * | config, | ||
uint32_t | start | ||
) |
This function erases one block of NOR flash based on the desired address.
instance | storge the index of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
start | The start address of the desired NOR flash memory to be erased. NOTE: It is recommended that use block-aligned access nor device; If dstAddr is not aligned with the block,The driver automatically aligns address down with the block address. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_EraseAll | ( | uint32_t | instance, |
flexspi_nor_config_t * | config | ||
) |
instance | storge the instance of FLEXSPI. |
config | A pointer to the storage for the driver runtime state. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_DeviceTimeout | the device timeout |
status_t ROM_FLEXSPI_NorFlash_CommandXfer | ( | uint32_t | instance, |
flexspi_xfer_t * | xfer | ||
) |
This function is used to perform the command write sequence to the NOR device.
instance | storge the index of FLEXSPI. |
xfer | A pointer to the storage FLEXSPI Transfer Context. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
status_t ROM_FLEXSPI_NorFlash_UpdateLut | ( | uint32_t | instance, |
uint32_t | seqIndex, | ||
const uint32_t * | lutBase, | ||
uint32_t | seqNumber | ||
) |
instance | storge the index of FLEXSPI. |
seqIndex | storge the sequence Id. |
lutBase | A pointer to the look-up-table for command sequences. |
seqNumber | storge sequence number. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
status_t ROM_FLEXSPI_NorFlash_WaitBusy | ( | uint32_t | instance, |
flexspi_nor_config_t * | config, | ||
bool | isParallelMode, | ||
uint32_t | address | ||
) |
instance | Indicates the index of FLEXSPI. |
config | A pointer to the storage for the driver runtime state |
isParallelMode | Indicates whether NOR flash is in parallel mode. |
address | Indicates the operation(ersse/program/read) address for serial NOR flash. |
kStatus_Success | Api was executed succesfuly. |
kStatus_InvalidArgument | A invalid argument is provided. |
kStatus_ROM_FLEXSPI_SequenceExecutionTimeout | Sequence Execution timeout. |
kStatus_ROM_FLEXSPI_InvalidSequence | A invalid Sequence is provided. |
kStatus_ROM_FLEXSPI_DeviceTimeout | Device timeout. |
void ROM_FLEXSPI_NorFlash_ClearCache | ( | uint32_t | instance | ) |
This function sets the software reset flags for both AHB and buffer domain and resets both AHB buffer and also IP FIFOs.
instance | storge the index of FLEXSPI. |