#if 0
#define Rom_csH		//P1_1 = 1
#define Rom_csL 	//P1_1 = 0
#define MOSIH 		//P1_2 = 1
#define MOSIL 		//P1_2 = 0
#define Rom_sckH 	//P1_3 = 1
#define Rom_sckL	//P1_3 = 0

#define MISO		//P1_4
#endif

void zk_init(void)
{
  Rom_csH;
  MOSIH;
  Rom_sckH;
}

/*******************************************************************************/
// Send data sub-pro (STM8,STM32˫)   SPI͵ַʱ㷨               /
/*******************************************************************************/

void Send_Byte(unsigned char out)
{	
	unsigned char i=0;

	for(i=0;i<8;i++)
	{
	  Rom_sckL;  //ֿоƬʱõ
	  if(((out<<i)&0x80)==0)
		  MOSIL;   
	  else
		  MOSIH;
	  Rom_sckH;
  }
}
 
/*******************************************************************************/
// Get data sub-pro (STM8,STM32˫)    SPIյݵ㷨               /
/*******************************************************************************/
unsigned char Get_Byte(void)         
{
	unsigned char i;
	unsigned char read_dat;

	Rom_sckH;
	for(i=0;i<8;i++)
	{
		Rom_sckL;
		read_dat=read_dat<<1;
		if(MISO)				
			read_dat|=0x01;
		else
			read_dat&=0xfe;
		Rom_sckH;
	}
	return(read_dat);
}
/*******************************************************************************/
//                    Send address sub-pro (STM8,STM3251)                                     /
/*******************************************************************************/
void SPI_Address(unsigned char AddH,unsigned char AddM,unsigned char AddL) 
{
	Send_Byte(AddH);
	Send_Byte(AddM);
	Send_Byte(AddL);
}
/*******************************************************************************/
//                    Get N bytes sub-pro  (STM8,STM3251)                                    //
/*******************************************************************************/
//ͻԼʵ֣addressַȡlenֽڵݲ뵽pBuff鵱
unsigned char r_dat_bat(unsigned long address,unsigned long DataLen,unsigned char *pBuff)
{
	unsigned long i;
  unsigned char addrHigh;
  unsigned char addrMid;
  unsigned char addrLow;
  addrHigh=address>>16;
  addrMid=address>>8;
  addrLow=(unsigned char)address;
  
	Rom_csL;          //ƬѡѡֿоƬ
	Send_Byte(0x03);	//ͨȡ0X03,Ȼ͵ַ߰λaddrHighаλaddrMidͰλaddrLow
	SPI_Address(addrHigh,addrMid,addrLow);	
	for(i=0;i<DataLen;i++)
	*(pBuff+i)=Get_Byte();
	Rom_csH;
	return 0;
}

//ͻԼʵ֣addressַȡһֽڵݲظ
unsigned char r_dat(u32 address){
	unsigned char buff;
	unsigned char addrHigh;
	unsigned char addrMid;
	unsigned char addrLow;
	addrHigh=address>>16;
	addrMid=address>>8;
	addrLow=(unsigned char)address;
	
	Rom_csL;
	Send_Byte(0x03);
	SPI_Address(addrHigh,addrMid,addrLow);
	buff = Get_Byte();
	Rom_csH;
	return buff;
}

/******************************************************
ͻԼʵ, ļڲҪøúƥоƬID
˵ļͷļǷҪ, ûоͲҪʵ
******************************************************/
unsigned char CheckID(unsigned char CMD, unsigned long address,
	unsigned long byte_long,unsigned char *p_arr)
{
	unsigned long j;
	Rom_csL;
	Send_Byte(CMD);
	Send_Byte((unsigned char)((address)>>16)); 
	Send_Byte((unsigned char)((address)>>8));   
	Send_Byte((unsigned char)address); 
	for(j=0;j<byte_long;j++)
	{
			p_arr[j]=Get_Byte();
	}
	Rom_csH;
	return 1;
}

//ע֤r_dat_bat()
//Ҫ֤r_dat_bat()ԸݲͬоƬͺŶȡ0xc0/0xb0/0xa0/0x2c0ַ16λݣοṩݽжԱȡûҪݣ
//FAEҪӦͺֿоƬõַݣȻԱȶǷȷǸֿͺŵ0xc0/0xb0/0xa0/0x2c0ַ16ֽԼӦ
//ͺŵĵַ͵ַݵĲο
GT5DL14P1Yc0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT5DL14S2Yc0h: FC 02 02 FC 00 00 01 02 02 01 00 00 00 04 FE 00
GT5DL16M2Yc0h: 21 72 21 73 21 74 21 75 21 76 21 77 21 78 21 79
GT5DL16S1Wc0h: 00 00 00 00 00 00 0c 60 0c 60 00 00 00 00 00 00
GT5DL24A1Y80c0h: 00 00 E0 30 18 18 FE 18 18 10 E0 00 00 00 00 00
GT5DL24A2Wc0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT5DL28K2Wb0h: CE 00 7B 00 00 00 00 03 00 00 C0 00 C0 00 C0 00
GT5DL32A3W: c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT5HL24A2W: 2c0h: A8 AB 00 00 A8 AF 00 00 A8 B3 00 00 A8 B5 00 00
GT5HL32S3W:  2c0h: A8 AB 00 00 A8 AF 00 00 A8 B3 00 00 A8 B5 00 00
GT5HL20K2W: c0h: A8 A4 A8 A2 00 00 00 00 00 00 00 00 00 00 00 00
GT5HL16S2W: 2c0h:A8 B6 00 00 A8 B7 00 00 A8 B8 00 00 00 00 00 00
GT5SDL24A40: c0h: 00 05 00 00 06 00 11 05 00 00 06 00 22 05 00 00
GT5SL24K3W40: c0h: 68 B0 01 02 78 B0 01 02 88 B0 01 03 A0 B0 01 02
GT5SL24K4W: c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT5SLAD2E1A: c0h: 63 15 00 00 06 00 81 15 00 00 06 00 9F 15 00 00
GT5SLAD3BFA: c0h: 63 15 00 00 06 00 81 15 00 00 06 00 9E 15 00 00
GT5SLCD2E1A: c0h: F7 04 00 00 06 00 08 05 00 00 06 00 19 05 00 00
GT5SLCD2S2A: c0h: 63 15 00 00 06 00 81 15 00 00 06 00 9F 15 00 00
GT5SLCD2S4A: c0h: 68 B0 01 02 78 B0 01 02 88 B0 01 03 A0 B0 01 02
GT5SUAD2E: c0h: 7C 49 01 02 8C 49 01 02 9C 49 01 03 B4 49 01 02
GT5SUAD3BFA: c0h: 63 15 00 00 06 00 81 15 00 00 06 00 9F 15 00 00
GT5SUCD2E1A: c0h: E7 04 00 00 06 00 08 05 00 00 06 00 19 05 00 00
XT5YL14U1Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT5YL24A1Y520: c0h: 00 00 E0 30 18 18 FE 18 18 10 E0 00 00 00 00 00
GT24L24A2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT20L16J1Y: b0h: 00 00 00 00 00 00 00 03 03 00 00 00 00 00 00 00
GT20L16P1Y: c0h: 00 00 00 00 00 00 00 00 00 00 16 0E 00 00 00 00
GT20L16S1Y: c0h: 00 00 00 00 18 18 00 00 00 18 18 00 00 00 00 00
GT20L24F6Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT21L16S2W: c0h: 00 00 00 00 00 00 0C 60 0C 60 00 00 00 00 00 00
GT21L16S2Y: c0h: 00 00 00 00 18 18 00 00 00 18 18 00 00 00 00 00
GT21L16T1W: c0h: 00 00 00 00 00 00 0C 60 0C 60 00 00 00 00 00 00
GT21L24S1W: c0h: 10 40 00 10 40 00 10 40 00 08 80 00 07 00 00 00
GT22L16A1Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT22L16A2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT22L16K1Y40: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT22L16M1Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT22L16U1Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT22L16V2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT22L24S3W: c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT22U16A2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT23L16U2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT24L16A2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT24L16K1Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT24L16M1Y20: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT24L24A2W: c0h: 00 00 00 E0 10 08 08 08 10 E0 00 00 00 00 00 00
GT24L24A2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT24L32M4W80: c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT24U24A2Y: c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT30L16M2Y: c0h: 00 40 30 1C 17 12 90 70 38 10 00 00 00 00 00 01
GT30L16U2W: c0h: 18 00 04 00 0A 00 31 80 C0 60 00 00 7E C0 01 80
GT30L24A2W: c0h: 0C IC 10 10 10 10 10 1F OF 00 00 00 00 0A 80 C0
GT30L24A3W: c0h: 18 C0 00 18 C0 00 18 C0 00 0F 80 00 07 00 00 00
GT30L24M1W: c0h: 10 40 00 10 40 00 10 40 00 08 80 00 07 00 00 00
GT30L24M1Z: a0h: 40 10 00 40 10 00 40 10 00 80 08 00 00 07 00 00
GT30L24T3Yc0h: 00 40 30 1C 17 12 90 70 38 10 00 00 00 00 00 01
GT30L32A1W80d0h: 0c 00 00 00 03 00 00 00 01 CO 00 00 00 E0 00 00
GT30L32M4W80c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT30L32S4Wc0h: 08 00 0C 00 18 00 10 80 3F CO 21 80 41 00 02 00
GT30L32S4Yc0h: 00 40 30 1C 17 12 90 70 38 10 00 00 00 00 00 01
GT31L16M1Y80c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT31L16S2W80c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT31L24M1W16c0h: 10 40 00 10 40 00 10 40 00 08 80 00 07 00 00 00
GT31L24M3W40c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT32L24A180c0h: 10 40 00 10 40 00 10 40 00 08 80 00 07 00 00 00
GT32L24F0210c0h: 36 49 49 49 36 00 00 00 06 49 49 29 1E 00 00 00
GT32L24M1Y80c0h: 00 00 07 0F 18 30 30 30 18 0F 07 00 00 00 00 00
GT32L24M0140c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT32L32M4W40c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT32L32M0180c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT32L32S0140c0h: 70 88 88 70 88 88 70 00 70 88 88 78 08 10 60 00
GT60L16M2K4c0h: 00 00 00 00 00 00 00 00 00 18 18 18 30 00 00 00
GT60M2c0h: 68 B0 01 02 78 B0 01 02 88 B0 01 03 A0 B0 01 02
GT61L24M3K4c0h: 00 00 00 00 00 00 00 00 00 18 18 18 30 00 00 00
XT21L12S1Y12c0h: c0 02 C0 01 00 00 00 00 00 00 20 00 20 00 20 00
XT21L12S1Y40c0h: c0 02 C0 01 00 00 00 00 00 00 20 00 20 00 20 00
XT21L20S2W602c0h: 00 00 00 00 00 00 00 00 00 00 00 30 30 10 20 00
XT30L24M1Wc0h: 10 40 00 10 40 00 10 40 00 08 80 00 07 00 00 00

