30 #define FLASH_MX25L6433F_MAX_RETRY 1U
32 #define FLASH_MX25L6433F_TIMEOUT_WRAP 0xFFFFFFFFU
34 #define FLASH_MX25L6433F_TIMEOUT 1U
37 #define FLASH_MX25L6433F_LUT_4READ 0U
38 #define FLASH_MX25L6433F_LUT_WREN 1U
39 #define FLASH_MX25L6433F_LUT_RDSR 2U
40 #define FLASH_MX25L6433F_LUT_RDCR 3U
41 #define FLASH_MX25L6433F_LUT_WRSR 4U
42 #define FLASH_MX25L6433F_LUT_4PP 5U
43 #define FLASH_MX25L6433F_LUT_SE 6U
44 #define FLASH_MX25L6433F_LUT_BE32K 7U
45 #define FLASH_MX25L6433F_LUT_BE 8U
46 #define FLASH_MX25L6433F_LUT_CE 9U
47 #define FLASH_MX25L6433F_LUT_RSTEN 10U
48 #define FLASH_MX25L6433F_LUT_RST 11U
49 #define FLASH_MX25L6433F_LUT_WRSCUR 12U
50 #define FLASH_MX25L6433F_LUT_RDSCUR 13U
52 #define FLASH_MX25L6433F_LUT_OTHER 15U
56 #define FLASH_MX25L6433F_SR_WIP_MASK 0x1u
57 #define FLASH_MX25L6433F_SR_WIP_SHIFT 0u
58 #define FLASH_MX25L6433F_SR_WIP(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SR_WIP_SHIFT))&FLASH_MX25L6433F_SR_WIP_MASK)
60 #define FLASH_MX25L6433F_SR_WEL_MASK 0x2u
61 #define FLASH_MX25L6433F_SR_WEL_SHIFT 1u
62 #define FLASH_MX25L6433F_SR_WEL(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SR_WEL_SHIFT))&FLASH_MX25L6433F_SR_WEL_MASK)
64 #define FLASH_MX25L6433F_SR_BP_MASK 0x3Cu
65 #define FLASH_MX25L6433F_SR_BP_SHIFT 2u
66 #define FLASH_MX25L6433F_SR_BP(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SR_BP_SHIFT))&FLASH_MX25L6433F_SR_BP_MASK)
68 #define FLASH_MX25L6433F_SR_QE_MASK 0x40u
69 #define FLASH_MX25L6433F_SR_QE_SHIFT 6u
70 #define FLASH_MX25L6433F_SR_QE(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SR_QE_SHIFT))&FLASH_MX25L6433F_SR_QE_MASK)
72 #define FLASH_MX25L6433F_SR_SRWD_MASK 0x80u
73 #define FLASH_MX25L6433F_SR_SRWD_SHIFT 7u
74 #define FLASH_MX25L6433F_SR_SRWD(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SR_SRWD_SHIFT))&FLASH_MX25L6433F_SR_SRWD_MASK)
77 #define FLASH_MX25L6433F_CFG_ODS_MASK 0x1u
78 #define FLASH_MX25L6433F_CFG_ODS_SHIFT 0u
79 #define FLASH_MX25L6433F_CFG_ODS(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_CFG_ODS_SHIFT))&FLASH_MX25L6433F_CFG_ODS_MASK)
81 #define FLASH_MX25L6433F_CFG_TB_MASK 0x8u
82 #define FLASH_MX25L6433F_CFG_TB_SHIFT 3u
83 #define FLASH_MX25L6433F_CFG_TB(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_CFG_TB_SHIFT))&FLASH_MX25L6433F_CFG_TB_MASK)
85 #define FLASH_MX25L6433F_CFG_DC_MASK 0x40u
86 #define FLASH_MX25L6433F_CFG_DC_SHIFT 6u
87 #define FLASH_MX25L6433F_CFG_DC(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_CFG_DC_SHIFT))&FLASH_MX25L6433F_CFG_DC_MASK)
90 #define FLASH_MX25L6433F_SEC_OTP_MASK 0x1u
91 #define FLASH_MX25L6433F_SEC_OTP_SHIFT 0u
92 #define FLASH_MX25L6433F_SEC_OTP(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SEC_OTP_SHIFT))&FLASH_MX25L6433F_SEC_OTP_MASK)
94 #define FLASH_MX25L6433F_SEC_LDSO_MASK 0x2u
95 #define FLASH_MX25L6433F_SEC_LDSO_SHIFT 1u
96 #define FLASH_MX25L6433F_SEC_LDSO(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SEC_LDSO_SHIFT))&FLASH_MX25L6433F_SEC_LDSO_MASK)
98 #define FLASH_MX25L6433F_SEC_PSB_MASK 0x4u
99 #define FLASH_MX25L6433F_SEC_PSB_SHIFT 2u
100 #define FLASH_MX25L6433F_SEC_PSB(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SEC_PSB_SHIFT))&FLASH_MX25L6433F_SEC_PSB_MASK)
102 #define FLASH_MX25L6433F_SEC_ESB_MASK 0x8u
103 #define FLASH_MX25L6433F_SEC_ESB_SHIFT 3u
104 #define FLASH_MX25L6433F_SEC_ESB(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SEC_ESB_SHIFT))&FLASH_MX25L6433F_SEC_ESB_MASK)
106 #define FLASH_MX25L6433F_SEC_P_FAIL_MASK 0x20u
107 #define FLASH_MX25L6433F_SEC_P_FAIL_SHIFT 5u
108 #define FLASH_MX25L6433F_SEC_P_FAIL(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SEC_P_FAIL_SHIFT))&FLASH_MX25L6433F_SEC_P_FAIL_MASK)
110 #define FLASH_MX25L6433F_SEC_E_FAIL_MASK 0x40u
111 #define FLASH_MX25L6433F_SEC_E_FAIL_SHIFT 6u
112 #define FLASH_MX25L6433F_SEC_E_FAIL(x) (((uint32_t)(((uint32_t)(x))<<FLASH_MX25L6433F_SEC_E_FAIL_SHIFT))&FLASH_MX25L6433F_SEC_E_FAIL_MASK)
121 FLASH_MX25L6433F_READ = 0x03U,
122 FLASH_MX25L6433F_FAST_READ = 0x0BU,
123 FLASH_MX25L6433F_2READ = 0xBBU,
124 FLASH_MX25L6433F_DREAD = 0x3BU,
125 FLASH_MX25L6433F_4READ = 0xEBU,
126 FLASH_MX25L6433F_QREAD = 0x6BU,
127 FLASH_MX25L6433F_WREN = 0x06U,
128 FLASH_MX25L6433F_WRDI = 0x04U,
129 FLASH_MX25L6433F_RDSR = 0x05U,
130 FLASH_MX25L6433F_RDCR = 0x15U,
131 FLASH_MX25L6433F_WRSR = 0x01U,
132 FLASH_MX25L6433F_4PP = 0x38U,
133 FLASH_MX25L6433F_SE = 0x20U,
134 FLASH_MX25L6433F_BE32K = 0x52U,
135 FLASH_MX25L6433F_BE = 0xD8U,
136 FLASH_MX25L6433F_CE = 0x60U,
137 FLASH_MX25L6433F_PP = 0x02U,
138 FLASH_MX25L6433F_DP = 0xB9U,
139 FLASH_MX25L6433F_RDP = 0xABU,
140 FLASH_MX25L6433F_PESUS = 0x75U,
141 FLASH_MX25L6433F_PERES = 0x7AU,
142 FLASH_MX25L6433F_RDID = 0x9FU,
143 FLASH_MX25L6433F_RES = 0xABU,
144 FLASH_MX25L6433F_REMS = 0x90U,
145 FLASH_MX25L6433F_ENSO = 0xB1U,
146 FLASH_MX25L6433F_EXSO = 0xC1U,
147 FLASH_MX25L6433F_WRSCUR = 0x2FU,
148 FLASH_MX25L6433F_RDSCUR = 0x2BU,
149 FLASH_MX25L6433F_RSTEN = 0x66U,
150 FLASH_MX25L6433F_RST = 0x99U,
151 FLASH_MX25L6433F_RDSFDP = 0x5AU,
152 FLASH_MX25L6433F_SBL = 0xC0U,
153 FLASH_MX25L6433F_NOP = 0x00U,
154 } flash_mx25l6433f_commands_t;
172 static bool FLASH_MX25L6433F_DRV_Timeout(uint32_t startTime, uint32_t timeout)
174 uint32_t currentTime;
178 if (currentTime >= startTime)
180 retVal = ((currentTime - startTime) > timeout)?
true:
false;
185 retVal = ((FLASH_MX25L6433F_TIMEOUT_WRAP - startTime + currentTime) > timeout)?
true:
false;
197 static status_t FLASH_MX25L6433F_DRV_WriteEnable(uint32_t instance)
199 uint32_t retries = FLASH_MX25L6433F_MAX_RETRY + 1U;
201 uint8_t srValue = 0U;
210 if (srValue & FLASH_MX25L6433F_SR_WEL_MASK)
228 static status_t FLASH_MX25L6433F_DRV_CheckLastCommand(uint32_t instance)
234 state = g_flashMx25l6433fStatePtr[instance];
236 switch ((flash_mx25l6433f_commands_t)(state->lastCommand))
238 case FLASH_MX25L6433F_4PP:
242 if (secValue & FLASH_MX25L6433F_SEC_P_FAIL_MASK)
251 case FLASH_MX25L6433F_SE:
252 case FLASH_MX25L6433F_BE32K:
253 case FLASH_MX25L6433F_BE:
254 case FLASH_MX25L6433F_CE:
258 if (secValue & FLASH_MX25L6433F_SEC_E_FAIL_MASK)
267 case FLASH_MX25L6433F_WRSR:
282 static inline void FLASH_MX25L6433F_DRV_InitLut(uint32_t instance)
392 static inline void FLASH_MX25L6433F_DRV_InitEnso(uint32_t instance)
407 static inline void FLASH_MX25L6433F_DRV_InitExso(uint32_t instance)
422 static inline void FLASH_MX25L6433F_DRV_InitDp(uint32_t instance)
437 static inline void FLASH_MX25L6433F_DRV_InitRdp(uint32_t instance)
452 static inline status_t FLASH_MX25L6433F_DRV_InitDevice(uint32_t instance,
475 if (((srValue & FLASH_MX25L6433F_SR_QE_MASK) == 0U) ||
476 (((crValue & FLASH_MX25L6433F_CFG_ODS_MASK) >> FLASH_MX25L6433F_CFG_ODS_SHIFT) != userConfigPtr->
outputDriverStrength) ||
477 ((crValue & FLASH_MX25L6433F_CFG_DC_MASK) != 0U))
480 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
486 srWrite[0U] = (uint8_t)(srValue | FLASH_MX25L6433F_SR_QE_MASK);
487 crValue &= (uint8_t)(~(FLASH_MX25L6433F_CFG_ODS_MASK | FLASH_MX25L6433F_CFG_DC_MASK));
488 srWrite[1U] = (uint8_t)(crValue | FLASH_MX25L6433F_CFG_ODS(userConfigPtr->
outputDriverStrength));
500 while ((status ==
STATUS_BUSY) && !FLASH_MX25L6433F_DRV_Timeout(startTime, FLASH_MX25L6433F_TIMEOUT));
529 DEV_ASSERT(g_flashMx25l6433fStatePtr[instance] == NULL);
533 state->dmaSupport = userConfigPtr->
dmaSupport;
534 state->lastCommand = (uint8_t)FLASH_MX25L6433F_NOP;
537 FLASH_MX25L6433F_DRV_InitLut(instance);
542 status = FLASH_MX25L6433F_DRV_InitDevice(instance, userConfigPtr);
548 g_flashMx25l6433fStatePtr[instance] = state;
565 g_flashMx25l6433fStatePtr[instance] = NULL;
587 state = g_flashMx25l6433fStatePtr[instance];
590 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
596 srWrite[0U] = (uint8_t)(FLASH_MX25L6433F_SR_BP(size) | FLASH_MX25L6433F_SR_QE_MASK);
598 srWrite[1U]= (uint8_t)(FLASH_MX25L6433F_CFG_TB(direction) | FLASH_MX25L6433F_CFG_ODS(state->outputDriverStrength));
601 state->lastCommand = (uint8_t)FLASH_MX25L6433F_WRSR;
625 state = g_flashMx25l6433fStatePtr[instance];
626 state->lastCommand = (uint8_t)FLASH_MX25L6433F_4READ;
640 srValue = (uint8_t)((srValue & FLASH_MX25L6433F_SR_BP_MASK) >> FLASH_MX25L6433F_SR_BP_SHIFT);
642 crValue = (uint8_t)((crValue & FLASH_MX25L6433F_CFG_TB_MASK) >> FLASH_MX25L6433F_CFG_TB_SHIFT);
663 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
696 lock->
userAreaLock = (bool)((secValue & FLASH_MX25L6433F_SEC_LDSO_MASK) >> FLASH_MX25L6433F_SEC_LDSO_SHIFT);
697 lock->
factoryAreaLock = (bool)((secValue & FLASH_MX25L6433F_SEC_OTP_MASK) >> FLASH_MX25L6433F_SEC_OTP_SHIFT);
719 state = g_flashMx25l6433fStatePtr[instance];
720 if (state->dmaSupport)
729 state->lastCommand = (uint8_t)FLASH_MX25L6433F_4READ;
730 return QSPI_DRV_IpRead(instance, FLASH_MX25L6433F_LUT_4READ, address, data, NULL, size, transferType, 1U);
747 state = g_flashMx25l6433fStatePtr[instance];
750 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
756 state->lastCommand = (uint8_t)FLASH_MX25L6433F_SE;
775 state = g_flashMx25l6433fStatePtr[instance];
777 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
783 state->lastCommand = (uint8_t)FLASH_MX25L6433F_BE32K;
802 state = g_flashMx25l6433fStatePtr[instance];
804 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
810 state->lastCommand = (uint8_t)FLASH_MX25L6433F_BE;
829 state = g_flashMx25l6433fStatePtr[instance];
831 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
837 state->lastCommand = (uint8_t)FLASH_MX25L6433F_CE;
856 state = g_flashMx25l6433fStatePtr[instance];
860 state->lastCommand = (uint8_t)FLASH_MX25L6433F_4READ;
861 return QSPI_DRV_IpRead(instance, FLASH_MX25L6433F_LUT_4READ, address, NULL, NULL, size, transferType, 1U);
883 state = g_flashMx25l6433fStatePtr[instance];
885 status = FLASH_MX25L6433F_DRV_WriteEnable(instance);
890 if (state->dmaSupport)
899 state->lastCommand = (uint8_t)FLASH_MX25L6433F_4PP;
900 return QSPI_DRV_IpWrite(instance, FLASH_MX25L6433F_LUT_4PP, address, data, size, transferType, 1U);
913 const uint8_t * data,
921 state = g_flashMx25l6433fStatePtr[instance];
925 state->lastCommand = (uint8_t)FLASH_MX25L6433F_4READ;
926 return QSPI_DRV_IpRead(instance, FLASH_MX25L6433F_LUT_4READ, address, NULL, data, size, transferType, 1U);
945 state = g_flashMx25l6433fStatePtr[instance];
953 if (state->lastCommand != FLASH_MX25L6433F_4READ)
958 if ((srValueRead & FLASH_MX25L6433F_SR_WIP_MASK) == 1U)
964 status = FLASH_MX25L6433F_DRV_CheckLastCommand(instance);
1009 FLASH_MX25L6433F_DRV_InitEnso(instance);
1030 FLASH_MX25L6433F_DRV_InitExso(instance);
1051 FLASH_MX25L6433F_DRV_InitDp(instance);
1072 FLASH_MX25L6433F_DRV_InitRdp(instance);
status_t FLASH_MX25L6433F_DRV_Deinit(uint32_t instance)
De-initialize the MX25L6433F flash driver.
status_t QSPI_DRV_IpRead(uint32_t instance, uint8_t lut, uint32_t addr, uint8_t *dataRead, const uint8_t *dataCmp, uint32_t size, qspi_transfer_type_t transferType, uint32_t timeout)
Launches an IP read command.
status_t FLASH_MX25L6433F_DRV_SetSecureLock(uint32_t instance)
Locks the customer sector of the secured OTP area.
status_t QSPI_DRV_IpWrite(uint32_t instance, uint8_t lut, uint32_t addr, uint8_t *data, uint32_t size, qspi_transfer_type_t transferType, uint32_t timeout)
Launches an IP write command.
qspi_transfer_type_t
Driver type Implements : qspi_transfer_type_t_Class.
uint32_t OSIF_GetMilliseconds(void)
Returns the number of miliseconds elapsed since starting the internal timer or starting the scheduler...
status_t FLASH_MX25L6433F_DRV_Erase32K(uint32_t instance, uint32_t address)
Erase a 32k block in the serial flash.
status_t FLASH_MX25L6433F_DRV_Erase64K(uint32_t instance, uint32_t address)
Erase a 64k block in the serial flash.
status_t FLASH_MX25L6433F_DRV_EnterOTP(uint32_t instance)
Enters OTP mode.
status_t QSPI_DRV_Deinit(uint32_t instance)
De-initialize the qspi driver.
status_t FLASH_MX25L6433F_DRV_Reset(uint32_t instance)
Reset the serial flash device.
status_t FLASH_MX25L6433F_DRV_Erase4K(uint32_t instance, uint32_t address)
Erase a 4k sector in the serial flash.
status_t QSPI_DRV_IpErase(uint32_t instance, uint8_t lut, uint32_t addr)
Launches an IP erase command.
#define QuadSPI_INSTANCE_COUNT
status_t FLASH_MX25L6433F_DRV_EraseAll(uint32_t instance)
Erases the entire serial flash.
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Driver internal context structure.
static void QSPI_DRV_SetAhbSeqId(uint32_t instance, uint8_t seqID)
Sets sequence ID for AHB operations.
status_t FLASH_MX25L6433F_DRV_Init(uint32_t instance, const flash_mx25l6433f_user_config_t *userConfigPtr, flash_mx25l6433f_state_t *state)
Initializes the serial flash memory driver.
status_t QSPI_DRV_IpGetStatus(uint32_t instance)
Checks the status of the currently running IP command.
status_t FLASH_MX25L6433F_DRV_ExitDPD(uint32_t instance)
Exits Deep Power Down mode.
status_t FLASH_MX25L6433F_DRV_GetSecureLock(uint32_t instance, flash_mx25l6433f_secure_lock_t *lock)
Get lock status of the secured OTP area.
status_t FLASH_MX25L6433F_DRV_EraseVerify(uint32_t instance, uint32_t address, uint32_t size)
Checks whether or not an area in the serial flash is erased.
status_t QSPI_DRV_IpCommand(uint32_t instance, uint8_t lut, uint32_t timeout)
Launches a simple IP command.
status_t FLASH_MX25L6433F_DRV_SetProtection(uint32_t instance, flash_mx25l6433f_prot_dir_t direction, flash_mx25l6433f_prot_size_t size)
Configure protected area of the device.
status_t FLASH_MX25L6433F_DRV_GetStatus(uint32_t instance)
Get the status of the last operation.
flash_mx25l6433f_drv_strength_t outputDriverStrength
static void QSPI_DRV_SetLut(uint32_t instance, uint8_t lut, qspi_lut_commands_t instr0, qspi_lut_pads_t pad0, uint8_t oprnd0, qspi_lut_commands_t instr1, qspi_lut_pads_t pad1, uint8_t oprnd1)
Configures LUT commands.
status_t FLASH_MX25L6433F_DRV_ProgramVerify(uint32_t instance, uint32_t address, const uint8_t *data, uint32_t size)
Verifies the correctness of the programmed data.
status_t FLASH_MX25L6433F_DRV_Program(uint32_t instance, uint32_t address, uint8_t *data, uint32_t size)
Writes data in serial flash.
flash_mx25l6433f_prot_size_t
Size of flash protected area Implements : flash_mx25l6433f_prot_size_t_Class.
Flash protection settings Implements : flash_mx25l6433f_secure_lock_t_Class.
status_t FLASH_MX25L6433F_DRV_GetProtection(uint32_t instance, flash_mx25l6433f_prot_dir_t *direction, flash_mx25l6433f_prot_size_t *size)
Get protected area of the device.
status_t FLASH_MX25L6433F_DRV_EnterDPD(uint32_t instance)
Enters Deep Power Down mode.
status_t FLASH_MX25L6433F_DRV_Read(uint32_t instance, uint32_t address, uint8_t *data, uint32_t size)
Read data from serial flash.
Driver configuration structure.
flash_mx25l6433f_prot_dir_t
Flash protection direction Implements : flash_mx25l6433f_prot_dir_t_Class.
status_t FLASH_MX25L6433F_DRV_ExitOTP(uint32_t instance)
Exits OTP mode.