100 #define CMD_READ_JEDEC_ID 0x9F
101 #define CMD_READ_DEVICE_ID 0xAB
109 #define CMD_READ_STATUS_REG_1 0x05
110 #define CMD_READ_STATUS_REG_2 0x35
111 #define CMD_READ_STATUS_REG_3 0x15
112 #define CMD_WRITE_STATUS_REG_1 0x01
113 #define CMD_WRITE_STATUS_REG_2 0x31
114 #define CMD_WRITE_STATUS_REG_3 0x11
122 #define CMD_PAGE_PROGRAM 0x02
123 #define CMD_QUAD_PAGE_PROGRAM 0x32
124 #define CMD_WRITE_ENABLE 0x06
125 #define CMD_WRITE_DISABLE 0x04
133 #define CMD_READ_DATA 0x03
134 #define CMD_FAST_READ 0x0B
135 #define CMD_DUAL_OUTPUT_READ 0x3B
136 #define CMD_QUAD_OUTPUT_READ 0x6B
144 #define CMD_RELEASE_DEEP_POWER_DOWN 0xAB
145 #define CMD_ENABLE_RESET 0x66
146 #define CMD_RESET_DEVICE 0x99
147 #define CMD_GLOBAL_LOCK 0x7E
148 #define CMD_GLOBAL_UNLOCK 0x98
149 #define CMD_ENABLE_QPI 0x38
158 #define CMD_ENTER_4B 0xB7
159 #define CMD_EXIT_4B 0xE9
160 #define CMD_EXIT_4B_ISSI 0x29
161 #define CMD_DUAL_OUTPUT_READ_4B 0x3C
162 #define CMD_QUAD_OUTPUT_READ_4B 0x6C
163 #define CMD_READ_4B 0x13
164 #define CMD_PROGRAM_4B 0x12
165 #define CMD_SECTOR_ERASE 0x20
166 #define CMD_ERASE_4K_4B 0x21
167 #define CMD_ERASE_64K_4B 0xDC
285 #define spiFlash_register(table) \
286 spiFlash_registerFlash((table), sizeof(table) / sizeof((table)[0]))
spiFlash_status_t
SPI Flash transfer mode configuration.
@ SPI_FLASH_OK
Successful Operation.
@ SPI_FLASH_ERR
Unknown JEDEC ID, Electrical failure (0x00/0xFF).
@ SPI_FLASH_SKIP
Skip the function.
u8 spiFlash_write_single(spiFlash_instance_t *flash, u32 flashAddress, u8 *src, u32 len)
Write N byte to Flash using standard write mode via single Data Line.
void spiFlash_writeStatusReg(spiFlash_instance_t *flash, u8 data)
Write Status Register.
void spiFlash_eraseSector(spiFlash_instance_t *flash, u32 flashAddress)
Erases a sector of the SPI flash given an address.
void spiFlash_f2m_dual(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...
void spiFlash_enableQPI(spiFlash_instance_t *flash)
Set Write Enable Latch and send CMD 0x38 to enable QPI Mode.
spiFlash_status_t spiFlash_probe(spiFlash_instance_t *flash)
Main wrapper function to initialize the SPI Flash.
void spiFlash_unlockGlobal(spiFlash_instance_t *flash)
Globally unlocks the SPI flash.
void spiFlash_applyConfig(spiFlash_instance_t *flash)
Apply stored SPI Flash configuration to hardware.
spiFlash_status_t spiFlash_verify(spiFlash_instance_t *flash)
Verify spiFlash.
spiFlash_status_t spiFlash_waitBusy(spiFlash_instance_t *flash)
Wait for spiFlash to be free.
u8 spiFlash_readId(spiFlash_instance_t *flash)
Select and Read Device ID from spiFlash.
void spiFlash_read_single(spiFlash_instance_t *flash, u32 flashAddress, u8 *buffer, u32 len)
Read N byte from Flash using standard read mode via single Data Line.
u8 spiFlash_readStatusReg(spiFlash_instance_t *flash)
Read Status Register.
void spiFlash_f2m_quad(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_applyQuirks(spiFlash_instance_t *flash)
Handle those spiFlash that have unique register/way.
u8 spiFlash_exit4ByteAddr(spiFlash_instance_t *flash)
Exit 4-byte addressing.
void spiFlash_enableWrite(spiFlash_instance_t *flash)
Set Write Enable Latch (WEL) to 1.
u32 spiFlash_readJedecId(spiFlash_instance_t *flash)
Select and read JEDEC ID from spiFlash.
const spiFlash_info_t * spiFlash_lookup(u32 detected_id)
Identify SPI Flash by looking up User Flash Table and known flash table.
void spiFlash_lockGlobal(spiFlash_instance_t *flash)
Globally locks the SPI flash.
void spiFlash_enableQuadMode(spiFlash_instance_t *flash)
Set Write Enable Latch and set Quad Enable bit to enable Quad Mode.
void spiFlash_f2m_single(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...
void spiFlash_registerFlash(const spiFlash_info_t *table, size_t count)
Register Custom Flash to the driver.
void spiFlash_wake(spiFlash_instance_t *flash)
Select spi and wake up SPI Flash.
void spiFlash_initController(spiFlash_instance_t *flash)
Initialize SPI setting.
SPI driver API definitions.
SPI Flash Device Database and Capability Flags.
SPI instance. Holds the software registers and hardware pointer.
SPI Flash Device Descriptor.
SPI Flash instance structure.
u32 detected_id
JEDEC_ID = Manu_id, mem_type, capacity.
u8 cmd_exit_4byte
CMD for exit 4 byte addressing.
u8 mask_qe
CMD for Quad Enable Bit.
u8 cmd_wr_status
CMD for Write Status.
const spiFlash_info_t * info
Flash Descriptor.
u8 cmd_rd_status
CMD for Read Status.
spi_instance_t * inst
Pointer to shared SPI Master.