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