2025-04-11 09:40:32 +08:00

70 lines
2.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __FLASHEX_H__
#define __FLASHEX_H__
#include <stdint.h>
#include <stdbool.h>
#define PAGE_SIZE 256
#define SECTOR_SIZE 4096
#define W25X_BUSY 0
#define W25X_NotBUSY 1
#define Dummy_Byte1 0xFF
/*********************************************
W25X operation instruction list, the MCU can perform the following operations
on the W25X by sending the following commands to the W25X.
*********************************************/
#define W25X_WriteEnable 0x06 //Write Enable
#define W25X_WriteEnableVSR 0x50 //Write Enable for Volatile Status Register
#define W25X_WriteDisable 0x04 //Write Disable
#define W25X_ReadStatusReg1 0x05 //Read Status Register1:S7~S0
#define W25X_ReadStatusReg2 0x35 //Read Status Register2:S15~S8
#define W25X_WriteStatusReg 0x01 //Write Status Register2:BYTE1:S7~S0 BYTE2S15~S8
#define W25X_PageProgram 0x02 //PageProgram:BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0 BYTE4:D7~D0
#if 0
#define W25X_PageErase 0x81 //Page Erase:256 BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0
#endif
#define W25X_SectorErase 0x20 //Sector Erase:4K BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0
#define W25X_BlockErase32K 0x52 //Block Erase:32K BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0
#define W25X_BlockErase64K 0xD8 //Block Erase:64K BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0
#define W25X_ChipErase 0xC7
#define W25X_EraseSuspend 0x75
#define W25X_EraseResume 0x7A
#define W25X_PowerDown 0xB9
#define W25X_ContinuousReadMode 0xFF
#define W25X_ReadData 0x03 //Read Data:BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0 BYTE4:D7~D0
#define W25X_FastReadData 0x0B //Fast Read Data:BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0 BYTE4:dummy BYTE5:D7~D0
#define W25X_FastReadDual 0x3B //Fast Read Dual:BYTE1:A23~A16 BYTE2:A15~A8 BYTE3:A7~A0 BYTE4:dummy BYTE5:D7~D0
#define W25X_ReleasePowerDown 0xAB
#define W25X_DeviceID 0xAB
#define W25X_ManufactDeviceID 0x90
#define W25X_JedecDeviceID 0x9F
typedef struct
{
uint16_t id;
uint32_t size;
} FlashInfoT;
int32_t spiFlashInit(void);
bool spiFlashExist(void);
void spiFlashRead(uint32_t u32ReadAddr, uint8_t *pu8Buffer, uint32_t u16NumByteToRead);
void spiFlashWritePage(uint32_t u32WriteAddr, uint8_t *pu8Buffer, uint16_t u16NumByteToWrite);
#if 0
void spiFlashErasePage(uint32_t u32EraseAddr);
#endif
void spiFlashEraseSector(uint32_t u32EraseAddr);
void spiFlashEraseBlock(uint32_t u32EraseAddr, uint8_t u8Mode);
void spiFlashEraseChip(void);
uint16_t spiFlashReadMdId(void);
FlashInfoT *spiFlashInfoGet(void);
#endif