Sapphire SoC DS Sapphire SoC UG Sapphire HP SoC DS Sapphire HP SoC UG RISC-V Embedded IDE UG Board Support Package
Loading...
Searching...
No Matches
spiFlash.h
Go to the documentation of this file.
1
2// Copyright (C) 2013-2026 Efinix Inc. All rights reserved.
3// Full license header bsp/efinix/EfxSapphireSocRV64/include/LICENSE.MD
5
6#ifndef SPI_FLASH_H
7#define SPI_FLASH_H
8
19
20#include <string.h>
21#include "spi/spi.h"
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
37
38/* ========================================================================== */
39/* SUB-GROUP : REGISTER DEFINITIONS */
40/* ========================================================================== */
41
48
54 #define CMD_READ_JEDEC_ID 0x9F
55 #define CMD_READ_DEVICE_ID 0xAB
57
63 #define CMD_READ_STATUS_REG_1 0x05
64 #define CMD_READ_STATUS_REG_2 0x35
65 #define CMD_READ_STATUS_REG_3 0x15
66 #define CMD_WRITE_STATUS_REG_1 0x01
67 #define CMD_WRITE_STATUS_REG_2 0x31
68 #define CMD_WRITE_STATUS_REG_3 0x11
70
76 #define CMD_PAGE_PROGRAM 0x02
77 #define CMD_QUAD_PAGE_PROGRAM 0x32
78 #define CMD_WRITE_ENABLE 0x06
79 #define CMD_WRITE_DISABLE 0x04
81
87 #define CMD_READ_DATA 0x03
88 #define CMD_FAST_READ 0x0B
89 #define CMD_DUAL_OUTPUT_READ 0x3B
90 #define CMD_QUAD_OUTPUT_READ 0x6B
92
98 #define CMD_RELEASE_DEEP_POWER_DOWN 0xAB
99 #define CMD_ENABLE_RESET 0x66
100 #define CMD_RESET_DEVICE 0x99
101 #define CMD_GLOBAL_LOCK 0x7E
102 #define CMD_GLOBAL_UNLOCK 0x98
103 #define CMD_ENABLE_QUAD_GD 0x38
105
112 #define CMD_ENTER_4B 0xB7
113 #define CMD_EXIT_4B 0xE9
114 #define CMD_EXIT_4B_ISSI 0x29
115 #define CMD_DUAL_OUTPUT_READ_4B 0x3C
116 #define CMD_QUAD_OUTPUT_READ_4B 0x6C
117 #define CMD_READ_4B 0x13
118 #define CMD_PROGRAM_4B 0x12
119 #define CMD_SECTOR_ERASE 0x20
120 #define CMD_ERASE_4K_4B 0x21
121 #define CMD_ERASE_64K_4B 0xDC
123
128 #define QE_BIT6 0x40
129 #define QE_BIT1 0x02
130 #define WEL_BIT 0x02
132 // End of SPI_FLASH_Macros group
134
135
136/* ========================================================================== */
137/* SUB-GROUP : Data Types */
138/* ========================================================================== */
139
158
159 // End of SPI_FLASH_ENUM group
161
162
163/* ========================================================================== */
164/* SUB-GROUP : DATA STRUCTS */
165/* ========================================================================== */
197 // End of SPI_FLASH_Types group
199
200/* ========================================================================== */
201/* SUB-GROUP: FUNCTIONS */
202/* ========================================================================== */
203
210
222
230
246
248
259
266
280
291
298
308 u8 spiFlash_write(spiFlash_instance_t *flash, u32 flashAddress, u8 *src, u32 len);
309
319 u8 spiFlash_write_quad(spiFlash_instance_t *flash, u32 flashAddress, u8 *src, u32 len);
320
328 void spiFlash_read(spiFlash_instance_t *flash, u32 flashAddress, u8 *buffer, u32 len);
329
337 void spiFlash_read_quad(spiFlash_instance_t *flash, u32 flashAddress, u8 *buffer, u32 len);
338
347 void spiFlash_f2m(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size);
348
358 void spiFlash_dual_f2m(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size);
359
369 void spiFlash_quad_f2m(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size);
370
371
373
384
391
397
403
409
415
421 void spiFlash_sectorErase(spiFlash_instance_t *flash, u32 flashAddress);
423 // End of SPI_FLASHFunc
425
426/* ========================================================================== */
427/* SUB-GROUP: Internal FUNCTIONS */
428/* ========================================================================== */
434
435 static void spiFlash_applyQuirks(spiFlash_instance_t *flash);
436
443 static void spiFlash_wake_(spiFlash_instance_t *flash);
444
456 static const spiFlash_info_t * identifyFlash(u32 detected_id, const spiFlash_info_t *table);
457
463 static u8 spiFlash_read_id_(spiFlash_instance_t *flash);
469 static u32 spiFlash_jedec_id_(spiFlash_instance_t *flash);
470
475 static void spiFlash_f2m_(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size);
476 static void spiFlash_dual_f2m_(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size);
477 static void spiFlash_quad_f2m_(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size);
478
479
480#ifdef __cplusplus
481}
482#endif
483 // End of MAIN SPI_FLASH Group
485
486#endif // SPI_FLASH_H
spiFlash_status_t
SPI Flash transfer mode configuration.
Definition spiFlash.h:153
@ SPI_FLASH_OK
Successful Operation *‍/.
Definition spiFlash.h:154
@ SPI_FLASH_ERR
Unknown JEDEC ID, Electrical failure (0x00/0xFF) *‍/.
Definition spiFlash.h:155
@ SPI_FLASH_SKIP
Skip the function *‍/.
Definition spiFlash.h:156
void spiFlash_quad_f2m(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size)
This function read data from FlashAddress and copy to memoryAddress of specific size with quad data l...
void spiFlash_writeStatusReg(spiFlash_instance_t *flash, u8 data)
Write Status Register.
Definition spiFlash.c:339
void spiFlash_read_quad(spiFlash_instance_t *flash, u32 flashAddress, u8 *buffer, u32 len)
Read N byte from Flash using quad read mode.
Definition spiFlash.c:294
void spiFlash_writeEnable(spiFlash_instance_t *flash)
Set Write Enable Latch.
Definition spiFlash.c:405
spiFlash_status_t spiFlash_verify(spiFlash_instance_t *flash, const spiFlash_info_t *user_flash)
Verify spiFlash.
Definition spiFlash.c:136
void spiFlash_sectorErase(spiFlash_instance_t *flash, u32 flashAddress)
Erases a sector of the SPI flash given an address.
Definition spiFlash.c:468
u32 spiFlash_jedec_id(spiFlash_instance_t *flash)
Select and read JEDEC ID from spiFlash.
Definition spiFlash.c:181
void spiFlash_dual_f2m(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size)
This function read data from FlashAddress and copy to memoryAddress of specific size with dual data l...
u8 spiFlash_read_id(spiFlash_instance_t *flash)
Select and Read Device ID from spiFlash.
Definition spiFlash.c:172
void spiFlash_read(spiFlash_instance_t *flash, u32 flashAddress, u8 *buffer, u32 len)
Read N byte from Flash using standard read mode.
Definition spiFlash.c:279
void spiFlash_enable_quad_access(spiFlash_instance_t *flash)
Set Write Enable Latch and set Quad Enable bit to enable Quad SPI.
Definition spiFlash.c:375
spiFlash_status_t spiFlash_waitBusy(spiFlash_instance_t *flash)
Wait for spiFlash to be free.
Definition spiFlash.c:449
u8 spiFlash_write_quad(spiFlash_instance_t *flash, u32 flashAddress, u8 *src, u32 len)
Write N byte to Flash using quad write mode.
Definition spiFlash.c:258
u8 spiFlash_readStatusReg(spiFlash_instance_t *flash)
Read Status Register.
Definition spiFlash.c:320
void spiFlash_globalUnlock(spiFlash_instance_t *flash)
Globally unlocks the SPI flash.
Definition spiFlash.c:440
u8 spiFlash_write(spiFlash_instance_t *flash, u32 flashAddress, u8 *src, u32 len)
Write N byte to Flash using standard write mode.
Definition spiFlash.c:236
u8 spiFlash_exit4ByteAddr(spiFlash_instance_t *flash)
Exit 4-byte addressing.
Definition spiFlash.c:413
void spiFlash_f2m(spiFlash_instance_t *flash, u32 flashAddress, uintptr_t memoryAddress, u32 size)
This function read data from FlashAddress and copy to memoryAddress of specific size with single data...
Definition spiFlash.c:349
void spiFlash_init_controller(spiFlash_instance_t *flash)
Initialize SPI setting.
Definition spiFlash.c:24
void spiFlash_globalLock(spiFlash_instance_t *flash)
Globally locks the SPI flash.
Definition spiFlash.c:431
spiFlash_status_t spiFlash_probe(spiFlash_instance_t *flash, const spiFlash_info_t *user_flash)
The main wrapper for initialize SPI Flash.
Definition spiFlash.c:44
void spiFlash_wake(spiFlash_instance_t *flash)
Select spi and wake up SPI Flash.
Definition spiFlash.c:76
SPI driver API definitions.
SPI Flash Device Database and Capability Flags.
SPI instance. Holds the software registers and hardware pointer.
Definition spi.h:212
SPI Flash Device Descriptor.
SPI Flash instance structure.
Definition spiFlash.h:184
u8 cs
Chip select *‍/.
Definition spiFlash.h:188
u32 detected_id
JEDEC_ID = Manu_id, mem_type, capacity *‍/.
Definition spiFlash.h:187
u8 cmd_exit_4byte
CMD for exit 4 byte addressing *‍/.
Definition spiFlash.h:193
u8 mask_qe
CMD for Quad Enable Bit *‍/.
Definition spiFlash.h:194
u8 cmd_wr_status
CMD for Write Status *‍/.
Definition spiFlash.h:192
const spiFlash_info_t * info
Flash Descriptor *‍/.
Definition spiFlash.h:186
u8 cmd_rd_status
CMD for Read Status *‍/.
Definition spiFlash.h:191
spi_instance_t * inst
Pointer to shared SPI Master *‍/.
Definition spiFlash.h:185
uint8_t u8
Definition type.h:26
uint32_t u32
Definition type.h:22