#ifndef		_AT45DB_H_
#define		_AT45DB_H_
/*H*****************************************************************************
* NAME:         at45db.h
*******************************************************************************/

//*****************************************************************************
/*_____ M A C R O S __________________________________________________________*/

//端口定义
#define AT45DB_CS_EN   GPIO_ResetBits(GPIOA, GPIO_Pin_4);GPIO_SetBits(GPIOA, GPIO_Pin_3);
#define AT45DB_CS_DIS GPIO_SetBits(GPIOA, GPIO_Pin_4);

//******************************************************************************
// 
#define FLASH_APP_ADDR		0x08008000  	//第一个应用程序起始地址(存放在FLASH)

#define RomUpDataAddr_Old   0
#define RomUpDataAddr_New   1024


#define FuniGlobal F_uniGlobal.u

//******************************************************************************
// AT45DB_DATA_MAP
#define	checkLen_1	1	  	///如果数据组带有校验,增加1byte

//存储器完好标致
///全局缓冲中的值
#define	buf_ATDB45_Flag	FuniGlobal.ATDB45_Flag
///结构体定义
#define	ATDB45_Flag_FADR		  (0)
#define	ATDB45_Flag_LEN		    (sizeof(buf_ATDB45_Flag) + checkLen_1)
#define	ATDB45_Flag_Group		  1 //组数

///全局缓冲中的值
#define	buf_Frame	FuniGlobal.Frame
///结构体定义
#define	Frame_FADR		   (ATDB45_Flag_FADR +  ATDB45_Flag_Group)
#define	Frame_LEN		     sizeof(buf_Frame) + checkLen_1
#define	Frame_Group		   2048 //组数

///全局缓冲中的值
#define	buf_PREXDATA	    FuniGlobal.PREXDATA
///结构体定义
#define	PREXDATA_FADR		     (Frame_FADR +  Frame_Group)
#define	PREXDATA_LEN		     sizeof(buf_PREXDATA) + checkLen_1
#define	PREXDATA_Group		   2000 //组数

///全局缓冲中的值
#define	buf_DeviceFrame	    FuniGlobal.Frame
///结构体定义
#define	DeviceFrame_FADR		   (PREXDATA_FADR +  PREXDATA_Group)
#define	DeviceFrame_LEN		     sizeof(buf_DeviceFrame) + checkLen_1
#define	DeviceFrame_Group		   800*5 //组数

typedef struct
{
  union
	{
		u8                    Global[530]; 		                //全局最大个数
		u8                    ATDB45_Flag;
		u8                    Frame[512];
		PREXDATA_Type         PREXDATA[5];
	 }u;
  u8  CheckAdd;
}F_uniGlobal_Typedef;   //存储器读写缓存共用体

typedef enum
{
	CA_ATDB45_Flag,
	CA_Frame,
	CA_PREXDATA,
	CA_DeviceFrame,
	
	AT45DBItemEnd,
}AT45DBItem;

//********************************************************************************
typedef	struct
{
	u8* pInitData;//初始化指针
	u8* upData;		//共用体数据缓存区指针
	u8* pData;    //pGun数据指针
	u32 firstAdr;	//第一地址		
	u16  len;			//长度		
	u16 Group;
	u8  Tpye;	//类型			
}AT45DBDataIndex;

u8	AT45DBItemWrite(AT45DBItem Type, u16 Group);
u8	AT45DBItemRead(AT45DBItem Type, u16 Group);
void AT45DB_Data_Init(void);
void AT45DB_Init(void);
#endif
