LPCOpen SPIFI FLASH Library (LPCSPIFILIB)
Documentation for the LPCSPIFILIB library
spifilib_dev.h
1 /*
2  * @brief LPCSPIFILIB FLASH library device specific functions
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2014
6  * All rights reserved.
7  *
8  * @par
9  * Software that is described herein is for illustrative purposes only
10  * which provides customers with programming information regarding the
11  * LPC products. This software is supplied "AS IS" without any warranties of
12  * any kind, and NXP Semiconductors and its licenser disclaim any and
13  * all warranties, express or implied, including all implied warranties of
14  * merchantability, fitness for a particular purpose and non-infringement of
15  * intellectual property rights. NXP Semiconductors assumes no responsibility
16  * or liability for the use of the software, conveys no license or rights under any
17  * patent, copyright, mask work right, or any other intellectual property rights in
18  * or to any products. NXP Semiconductors reserves the right to make changes
19  * in the software without notification. NXP Semiconductors also makes no
20  * representation or warranty that such application will be suitable for the
21  * specified use without further testing or modification.
22  *
23  * @par
24  * Permission to use, copy, modify, and distribute this software and its
25  * documentation is hereby granted, under NXP Semiconductors' and its
26  * licensor's relevant copyrights in the software, without fee, provided that it
27  * is used in conjunction with NXP Semiconductors microcontrollers. This
28  * copyright, permission, and disclaimer notice must appear in all copies of
29  * this code.
30  */
31 
32 #ifndef __SPIFILIB_DEV_H_
33 #define __SPIFILIB_DEV_H_
34 
35 #include <stdint.h>
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 /* Define for inline functions */
42 #ifndef INLINE
43 #ifdef __CC_ARM
44 #define INLINE __inline
45 #else
46 #define INLINE inline
47 #endif /* __CC_ARM */
48 #endif /* !INLINE */
49 
57 typedef enum {
72  SPIFI_ERR_LASTINDEX /* Internal use to count number of errors */
74 } SPIFI_ERR_T;
75 
79 #define SPIFI_CAP_DUAL_READ (1 << 0)
80 #define SPIFI_CAP_DUAL_WRITE (1 << 1)
81 #define SPIFI_CAP_QUAD_READ (1 << 2)
82 #define SPIFI_CAP_QUAD_WRITE (1 << 3)
83 #define SPIFI_CAP_FULLLOCK (1 << 4)
84 #define SPIFI_CAP_BLOCKLOCK (1 << 5)
85 #define SPIFI_CAP_SUBBLKERASE (1 << 6)
86 #define SPIFI_CAP_NOBLOCK (1 << 16)
91 #define SPIFI_OPT_USE_DUAL (3 << 0)
92 #define SPIFI_OPT_USE_QUAD (3 << 2)
93 #define SPIFI_OPT_NOBLOCK (1 << 16)
98 #define SPIFI_STAT_BUSY (1 << 0)
99 #define SPIFI_STAT_ISWP (1 << 1)
100 #define SPIFI_STAT_FULLLOCK (1 << 2)
101 #define SPIFI_STAT_PARTLOCK (1 << 3)
102 #define SPIFI_STAT_PROGERR (1 << 4)
103 #define SPIFI_STAT_ERASEERR (1 << 5)
108 typedef enum {
127  SPIFI_INFO_LASTINDEX
129 
133 #define SPIFI_INFO_QUADREAD_CLOCK SPIFI_INFO_MAX_HSREAD_CLOCK
134 
138 #define SPIFI_INFO_QUADPROG_CLOCK SPIFI_INFO_MAX_HSPROG_CLOCK
139 
142 typedef enum {
149 
153 typedef enum {
159 
163 typedef enum {
187 } SPIFI_DEVFX_T;
188 
189 /* Forward type declaration */
190 struct SPIFI_HANDLE;
191 
192 struct SPIFI_DEVICE_DATA;
193 
194 struct SPIFI_FAM_DESC;
195 
196 struct SPIFI_DEVICE_ID;
197 
201 typedef struct SPIFI_FAM_NODE {
202  const struct SPIFI_FAM_DESC *pDesc;
207 
211 typedef struct SPIFI_FAM_DESC {
212  const char *pFamName;
215  uint32_t prvContextSize;
216  uint32_t *pDevCount;
217  void (*pPrvDevGetID)(uint32_t baseAddr, struct SPIFI_DEVICE_ID *pID);
219  SPIFI_ERR_T (*pPrvDevSetup)(struct SPIFI_HANDLE *pHandle, uint32_t spifiCtrlAddr, uint32_t baseAddr);
222 
226 typedef struct SPIFI_DEV_NODE {
227  const struct SPIFI_DEVICE_DATA *pDevData;
232 
233 typedef SPIFI_ERR_T (*deviceInitDeInitFx)(const struct SPIFI_HANDLE *, uint32_t);
235 typedef void (*devClearStatusFx)(const struct SPIFI_HANDLE *);
237 typedef uint32_t (*devGetStatusFx)(const struct SPIFI_HANDLE *);
239 typedef void (*devSetStatusFx)(const struct SPIFI_HANDLE *, uint32_t);
241 typedef SPIFI_ERR_T (*devSetOptsFx)(const struct SPIFI_HANDLE *, uint32_t, uint32_t);
243 typedef void (*devGetReadCmdFx)(const struct SPIFI_HANDLE *, uint8_t, uint32_t *, uint32_t *);
245 typedef void (*devGetWriteCmdFx)(const struct SPIFI_HANDLE *, uint32_t *);
250 typedef struct SPIFI_FAM_FX {
251  /* Device init and de-initialization */
252 
255  SPIFI_ERR_T (*eraseAll)(const struct SPIFI_HANDLE *);
257  SPIFI_ERR_T (*eraseBlock)(const struct SPIFI_HANDLE *, uint32_t);
259  SPIFI_ERR_T (*eraseSubBlock)(const struct SPIFI_HANDLE *, uint32_t);
261  SPIFI_ERR_T (*pageProgram)(const struct SPIFI_HANDLE *, uint32_t, const uint32_t *, uint32_t);
263  SPIFI_ERR_T (*read)(const struct SPIFI_HANDLE *, uint32_t, uint32_t *, uint32_t);
265  SPIFI_ERR_T (*reset)(const struct SPIFI_HANDLE *);
267  /* Info query functions */
268  uint32_t (*getStatus)(const struct SPIFI_HANDLE *, uint8_t);
270  uint32_t (*subBlockCmd)(const struct SPIFI_HANDLE *, SPIFI_PCMD_SUBBLK_T, uint32_t);
272  /* Device specific functions */
281 
285 typedef struct SPIFI_DEVICE_ID {
286  uint8_t mfgId[3];
287  uint8_t extCount;
288  uint8_t extId[8];
290 
294 typedef struct SPIFI_DEVICE_DATA {
295  const char *pDevName;
297  uint32_t caps;
298  uint16_t blks;
299  uint32_t blkSize;
300  uint16_t subBlks;
301  uint16_t subBlkSize;
302  uint16_t pageSize;
303  uint32_t maxReadSize;
304  uint8_t maxClkRate;
305  uint8_t maxReadRate;
306  uint8_t maxHSReadRate;
307  uint8_t maxProgramRate;
309  uint8_t initDeInitFxId;
310  uint8_t clearStatusFxId;
311  uint8_t getStatusFxId;
312  uint8_t setStatusFxId;
313  uint8_t setOptionsFxId;
314  uint8_t getReadCmdFxId;
315  uint8_t getWriteCmdFxId;
317 
321 typedef struct SPIFI_HANDLE {
322  const struct SPIFI_FAM_FX *pFamFx;
326  void *pDevContext;
328 
332 typedef struct SPIFI_INFODATA {
333  uint32_t spifiCtrlAddr;
334  uint32_t baseAddr;
335  uint32_t numBlocks;
336  uint32_t blockSize;
337  uint32_t numSubBlocks;
338  uint32_t subBlockSize;
339  uint32_t pageSize;
340  uint32_t maxReadSize;
343  uint32_t opts;
344  const char *pDevName;
348 
352 typedef struct SPIFI_DEV_ENUMERATOR {
356 
375 
379 #define SPIFI_REG_FAMILY_Spansion_2Byte_PStatus spifi_REG_FAMILY_CommonCommandSet
380 
384 #define SPIFI_REG_FAMILY_Spansion_3Byte_Status spifi_REG_FAMILY_CommonCommandSet
385 
389 #define SPIFI_REG_FAMILY_Macronix_2Byte_Status spifi_REG_FAMILY_CommonCommandSet
390 
394 #define SPIFI_REG_FAMILY_SpansionS25FLP spifi_REG_FAMILY_CommonCommandSet
395 
399 #define SPIFI_REG_FAMILY_SpansionS25FL1 spifi_REG_FAMILY_CommonCommandSet
400 
404 #define SPIFI_REG_FAMILY_MacronixMX25L spifi_REG_FAMILY_CommonCommandSet
405 
409 #ifdef __cplusplus
410 }
411 #endif
412 
413 #endif /* __SPIFILIB_DEV_H_ */
deviceInitDeInitFx devInitDeInit
Definition: spifilib_dev.h:273
devGetWriteCmdFx devGetWriteCmd
Definition: spifilib_dev.h:279
struct SPIFI_HANDLE SPIFI_HANDLE_T
LPCSPIFILIB device handle, used with all device and info functions.
devClearStatusFx devClearStatus
Definition: spifilib_dev.h:274
Definition: spifilib_dev.h:185
SPIFI_ERR_T(* reset)(const struct SPIFI_HANDLE *)
Definition: spifilib_dev.h:265
const SPIFI_DEVICE_ID_T * pId
Definition: spifilib_dev.h:346
const char * pFamName
Definition: spifilib_dev.h:212
Definition: spifilib_dev.h:112
const struct SPIFI_DEVICE_DATA * pDevData
Definition: spifilib_dev.h:227
SPIFI_PCMD_SUBBLK_T
Possible device specific sub-block commands.
Definition: spifilib_dev.h:153
SPIFI_ERR_T(* eraseSubBlock)(const struct SPIFI_HANDLE *, uint32_t)
Definition: spifilib_dev.h:259
uint16_t pageSize
Definition: spifilib_dev.h:302
Definition: spifilib_dev.h:63
SPIFI_DEV_NODE_T * pDevice
Definition: spifilib_dev.h:354
Definition: spifilib_dev.h:118
Definition: spifilib_dev.h:67
Definition: spifilib_dev.h:120
devGetReadCmdFx devGetReadCmd
Definition: spifilib_dev.h:278
Definition: spifilib_dev.h:168
Device specific function pointers.
Definition: spifilib_dev.h:250
Definition: spifilib_dev.h:155
Definition: spifilib_dev.h:58
uint32_t opts
Definition: spifilib_dev.h:343
Definition: spifilib_dev.h:172
uint16_t blks
Definition: spifilib_dev.h:298
Definition: spifilib_dev.h:144
uint32_t * pDevCount
Definition: spifilib_dev.h:216
Definition: spifilib_dev.h:115
uint8_t setStatusFxId
Definition: spifilib_dev.h:312
struct SPIFI_DEV_NODE * pDevList
Definition: spifilib_dev.h:213
SPIFI_ERR_T(* eraseAll)(const struct SPIFI_HANDLE *)
Definition: spifilib_dev.h:255
uint32_t(* subBlockCmd)(const struct SPIFI_HANDLE *, SPIFI_PCMD_SUBBLK_T, uint32_t)
Definition: spifilib_dev.h:270
Definition: spifilib_dev.h:119
uint8_t extId[8]
Definition: spifilib_dev.h:288
Definition: spifilib_dev.h:124
SPIFI_DEVFX_T
Enumeration of device specific functions.
Definition: spifilib_dev.h:163
void(* devGetReadCmdFx)(const struct SPIFI_HANDLE *, uint8_t, uint32_t *, uint32_t *)
Definition: spifilib_dev.h:243
Definition: spifilib_dev.h:125
Definition: spifilib_dev.h:60
Definition: spifilib_dev.h:167
Definition: spifilib_dev.h:62
SPIFI_ERR_T(* lockCmd)(const struct SPIFI_HANDLE *, SPIFI_PCMD_LOCK_UNLOCK_T, uint32_t)
Definition: spifilib_dev.h:253
uint8_t initDeInitFxId
Definition: spifilib_dev.h:309
Context for enumerating devices.
Definition: spifilib_dev.h:352
uint32_t(* devGetStatusFx)(const struct SPIFI_HANDLE *)
Definition: spifilib_dev.h:237
Definition: spifilib_dev.h:146
void(* pPrvDevGetID)(uint32_t baseAddr, struct SPIFI_DEVICE_ID *pID)
Definition: spifilib_dev.h:217
uint16_t subBlks
Definition: spifilib_dev.h:300
struct SPIFI_INFODATA SPIFI_INFODATA_T
Common data applicable to all devices.
struct SPIFI_DEV_ENUMERATOR SPIFI_DEV_ENUMERATOR_T
Context for enumerating devices.
LPCSPIFILIB device handle, used with all device and info functions.
Definition: spifilib_dev.h:321
Definition: spifilib_dev.h:170
struct SPIFI_FAM_NODE SPIFI_FAM_NODE_T
LPCSPIFILIB family data.
void(* devGetWriteCmdFx)(const struct SPIFI_HANDLE *, uint32_t *)
Definition: spifilib_dev.h:245
SPIFI_ERR_T(* pageProgram)(const struct SPIFI_HANDLE *, uint32_t, const uint32_t *, uint32_t)
Definition: spifilib_dev.h:261
uint32_t prvContextSize
Definition: spifilib_dev.h:215
struct SPIFI_DEVICE_ID SPIFI_DEVICE_ID_T
Device identification data.
uint8_t extCount
Definition: spifilib_dev.h:287
void(* devSetStatusFx)(const struct SPIFI_HANDLE *, uint32_t)
Definition: spifilib_dev.h:239
SPIFI_ERR_T(* pPrvDevSetup)(struct SPIFI_HANDLE *pHandle, uint32_t spifiCtrlAddr, uint32_t baseAddr)
Definition: spifilib_dev.h:219
uint8_t maxHSReadRate
Definition: spifilib_dev.h:306
struct SPIFI_DEV_NODE * pNext
Definition: spifilib_dev.h:229
Definition: spifilib_dev.h:165
Definition: spifilib_dev.h:179
Definition: spifilib_dev.h:59
uint32_t blockSize
Definition: spifilib_dev.h:336
uint8_t maxReadRate
Definition: spifilib_dev.h:305
uint32_t maxReadSize
Definition: spifilib_dev.h:303
Definition: spifilib_dev.h:177
Definition: spifilib_dev.h:164
uint8_t getWriteCmdFxId
Definition: spifilib_dev.h:315
uint32_t(* getStatus)(const struct SPIFI_HANDLE *, uint8_t)
Definition: spifilib_dev.h:268
Device identification data.
Definition: spifilib_dev.h:285
devGetStatusFx devGetStatus
Definition: spifilib_dev.h:275
Definition: spifilib_dev.h:180
Definition: spifilib_dev.h:171
Register device data.
Definition: spifilib_dev.h:294
uint16_t subBlkSize
Definition: spifilib_dev.h:301
Definition: spifilib_dev.h:64
Definition: spifilib_dev.h:65
SPIFI_FAM_NODE_T * spifi_REG_FAMILY_CommonCommandSet(void)
Family registration function.
Definition: spifilib_fam_standard_cmd.c:1220
SPIFI_ERR_T
Possible error codes that can be returned from functions.
Definition: spifilib_dev.h:57
uint8_t mfgId[3]
Definition: spifilib_dev.h:286
Definition: spifilib_dev.h:116
struct SPIFI_FAM_DESC SPIFI_FAM_DESC_T
LPCSPIFILIB family descriptor, used to describe devices to non-device specific functions.
const struct SPIFI_FAM_DESC * pDesc
Definition: spifilib_dev.h:202
const struct SPIFI_FAM_FX * pFamFx
Definition: spifilib_dev.h:322
struct SPIFI_DEVICE_DATA SPIFI_DEVICE_DATA_T
Register device data.
Definition: spifilib_dev.h:184
Definition: spifilib_dev.h:109
Definition: spifilib_dev.h:68
void(* devClearStatusFx)(const struct SPIFI_HANDLE *)
Definition: spifilib_dev.h:235
void * pDevContext
Definition: spifilib_dev.h:326
Register device data node.
Definition: spifilib_dev.h:226
SPIFI_ERR_T(* eraseBlock)(const struct SPIFI_HANDLE *, uint32_t)
Definition: spifilib_dev.h:257
const char * pDevName
Definition: spifilib_dev.h:295
devSetOptsFx devSetOpts
Definition: spifilib_dev.h:277
uint32_t numBlocks
Definition: spifilib_dev.h:335
SPIFI_ERR_T(* read)(const struct SPIFI_HANDLE *, uint32_t, uint32_t *, uint32_t)
Definition: spifilib_dev.h:263
SPIFI_FAM_NODE_T * pFamily
Definition: spifilib_dev.h:353
Definition: spifilib_dev.h:182
uint8_t maxClkRate
Definition: spifilib_dev.h:304
Definition: spifilib_dev.h:69
devSetStatusFx devSetStatus
Definition: spifilib_dev.h:276
Definition: spifilib_dev.h:113
uint32_t subBlockSize
Definition: spifilib_dev.h:338
Definition: spifilib_dev.h:121
Definition: spifilib_dev.h:114
Definition: spifilib_dev.h:175
struct SPIFI_INFODATA * pInfoData
Definition: spifilib_dev.h:324
SPIFI_ERR_T(* deviceInitDeInitFx)(const struct SPIFI_HANDLE *, uint32_t)
Definition: spifilib_dev.h:233
SPIFI_INFO_ID_T
Possible info lookup requests.
Definition: spifilib_dev.h:108
Definition: spifilib_dev.h:70
struct SPIFI_DEV_NODE SPIFI_DEV_NODE_T
Register device data node.
Definition: spifilib_dev.h:111
SPIFI_PCMD_LOCK_UNLOCK_T
Possible device specific lock / un-lock commands.
Definition: spifilib_dev.h:142
SPIFI_DEVICE_ID_T id
Definition: spifilib_dev.h:296
struct SPIFI_FAM_FX SPIFI_FAM_FX_T
Device specific function pointers.
Common data applicable to all devices.
Definition: spifilib_dev.h:332
uint8_t maxProgramRate
Definition: spifilib_dev.h:307
SPIFI_ERR_T(* devSetOptsFx)(const struct SPIFI_HANDLE *, uint32_t, uint32_t)
Definition: spifilib_dev.h:241
struct SPIFI_FAM_NODE * pNext
Definition: spifilib_dev.h:204
Definition: spifilib_dev.h:66
Definition: spifilib_dev.h:156
uint32_t numSubBlocks
Definition: spifilib_dev.h:337
uint32_t baseAddr
Definition: spifilib_dev.h:334
LPCSPIFILIB family descriptor, used to describe devices to non-device specific functions.
Definition: spifilib_dev.h:211
uint32_t maxReadSize
Definition: spifilib_dev.h:340
Definition: spifilib_dev.h:173
const struct SPIFI_DEVICE_DATA * pDeviceData
Definition: spifilib_dev.h:341
uint32_t spifiCtrlAddr
Definition: spifilib_dev.h:333
uint8_t clearStatusFxId
Definition: spifilib_dev.h:310
uint8_t getStatusFxId
Definition: spifilib_dev.h:311
SPIFI_ERR_T lastErr
Definition: spifilib_dev.h:345
Definition: spifilib_dev.h:143
Definition: spifilib_dev.h:145
Definition: spifilib_dev.h:154
Definition: spifilib_dev.h:117
Definition: spifilib_dev.h:110
uint8_t getReadCmdFxId
Definition: spifilib_dev.h:314
Definition: spifilib_dev.h:122
uint32_t pageSize
Definition: spifilib_dev.h:339
Definition: spifilib_dev.h:123
const char * pDevName
Definition: spifilib_dev.h:344
uint8_t setOptionsFxId
Definition: spifilib_dev.h:313
LPCSPIFILIB family data.
Definition: spifilib_dev.h:201
uint32_t blkSize
Definition: spifilib_dev.h:299
Definition: spifilib_dev.h:61
Definition: spifilib_dev.h:176
uint8_t maxHSProgramRate
Definition: spifilib_dev.h:308
uint32_t caps
Definition: spifilib_dev.h:297