1 #ifndef __SWM341_SFC_H__ 2 #define __SWM341_SFC_H__ 3 4 5 typedef struct { 6 uint8_t ClkDiv; //SPI_SCLK是系统时钟的几分频,取值:SFC_CLKDIV_1、SFC_CLKDIV_2、SFC_CLKDIV_4、SFC_CLKDIV_8 7 uint8_t Cmd_Read; //读取SPI Flash用的指令码 8 uint8_t Width_Read; //读取SPI Flash时数据线位数,取值SFC_RDWIDTH_1、SFC_RDWIDTH_2、SFC_RDWIDTH_4 9 uint8_t Cmd_PageProgram; //页编程SPI Flash用的指令码 10 uint8_t Width_PageProgram; //页编程SPI Flash时数据线位数,取值SFC_PPWIDTH_1、SFC_PPWIDTH_4 11 } SFC_InitStructure; 12 13 14 #define SFC_CLKDIV_1 0 15 #define SFC_CLKDIV_2 1 16 #define SFC_CLKDIV_4 2 17 #define SFC_CLKDIV_8 3 18 19 #define SFC_RDWIDTH_1 0 20 #define SFC_RDWIDTH_2 1 21 #define SFC_RDWIDTH_4 2 22 23 #define SFC_PPWIDTH_1 0 24 #define SFC_PPWIDTH_4 1 25 26 27 #define SFC_CMD_READ_JEDEC 0x9F 28 #define SFC_CMD_ERASE_CHIP 0x60 29 #define SFC_CMD_WRITE_ENABLE 0x06 30 #define SFC_CMD_PAGE_PROGRAM 0x02 31 #define SFC_CMD_ERASE_SECTOR 0x20 32 #define SFC_CMD_ERASE_BLOCK32KB 0x52 33 #define SFC_CMD_ERASE_BLOCK64KB 0xD8 //W25Q32 34 #define SFC_CMD_READ_STATUS_REG1 0x05 35 #define SFC_CMD_READ_STATUS_REG2 0x35 36 #define SFC_CMD_READ_STATUS_REG3 0x15 37 #define SFC_CMD_WRITE_STATUS_REG1 0x01 38 #define SFC_CMD_WRITE_STATUS_REG2 0x31 39 #define SFC_CMD_WRITE_STATUS_REG3 0x11 40 41 42 #define SFC_STATUS_REG_BUSY_Pos 0 43 #define SFC_STATUS_REG_QUAD_Pos 9 44 45 46 void SFC_Init(SFC_InitStructure * initStruct); 47 uint32_t SFC_ReadJEDEC(void); 48 void SFC_Erase(uint32_t addr, uint8_t wait); 49 void SFC_EraseEx(uint32_t addr, uint8_t cmd, uint8_t wait); 50 void SFC_Write(uint32_t addr, uint32_t buff[], uint32_t cnt); 51 void SFC_GPIOWrite(uint32_t addr, uint32_t buff[], uint32_t cnt); 52 void SFC_Read(uint32_t addr, uint32_t buff[], uint32_t cnt); 53 54 55 uint8_t SFC_ReadStatusReg(uint8_t cmd); 56 void SFC_WriteStatusReg(uint8_t cmd, uint16_t reg); 57 void SFC_QuadSwitch(uint8_t on); 58 uint8_t SFC_QuadState(void); 59 uint8_t SFC_FlashBusy(void); 60 61 62 #endif //__SWM341_SFC_H__ 63