#ifndef     __25QXX_H__
#define     __25QXX_H__

#define SPIF    0x80        //SPI传输完成标志。写入1清0。
#define WCOL    0x40        //SPI写冲突标志。写入1清0。


//W25Q256JVEIQ  256Mbit存储器结构组织
#define ID	0XEF19
#define Blocks   	512
#define Sectors  	8192
#define Pages		131072L
#define bytes		33554432L


sbit    W25QXX_CS = P2 ^ 2;   //Flash写保护
sbit    W25QXX_WP = P4 ^ 1;   //Flash写保护
sbit    W25QXX_HOLD = P4 ^ 4;   //Flash写保护

extern u8 W25QXX_UID[];
extern u8 W25QXX_Read_buf[];
extern u8 W25QXX_Write_buf[];

extern void W25QXX_config(void);
extern void W25QXX_4byte_Mode(void); 
extern void W25QXX_Wait_Busy(void); 
extern void W25QXX_Reset(void);

extern u16  W25QXX_ReadID(void);
extern void W25QXX_ReadUID(void);

extern void W25QXX_Enable(void);
extern void W25QXX_Disable(void);
extern void W25QXX_Write_Enable(void);
extern void W25QXX_WriteSR_Enable(void);
extern void W25QXX_Write_Disable(void); 

extern u8 	W25QXX_ReadSR1(void); 
extern u8 	W25QXX_ReadSR2(void); 
extern u8 	W25QXX_ReadSR3(void);
extern void W25QXX_WriteSR1(u8 reg_value);
extern void W25QXX_WriteSR2(u8 reg_value);
extern void W25QXX_WriteSR3(u8 reg_value);
  
extern void W25QXX_Read_data(u8* pBuffer,u32 ReadAddr,u16 Lenth); 
extern void W25QXX_Write_Word(u8* pBuffer, u32 WriteAddr, u16 Lenth);
extern void W25QXX_Write_WrapPage(u8* pBuffer,u32 WriteAddr,u16 Lenth) ;

extern u16  W25QXX_PageRead_OneWord(u32 PageAddr,u8 Position); 
extern void W25QXX_PageRead_to_Buffer(u8* pBuffer,u32 PageAddr,u16 Length); 
//extern void W25QXX_PageWrite_from_Buffer(u8* pBuffer,u32 PageAddr,u16 Length); 
extern void W25QXX_PageWrite_from_Buffer(u8* pBuffer,u32 PageAddr,u8 Position,u16 Length);

extern void W25QXX_Sector_Erase(u32 Address);
extern void W25QXX_someSector_Erase(u32 Address,u32 Write_data_NUM);   
extern void W25QXX_Chip_Erase(void); 
extern void	W25QXX_Block_Erase(u32 Address);
extern u32	W25QXX_Check_Index(void);


#endif