⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flsh24.h

📁 典型的flash串行读写
💻 H
字号:

void ini_ic(void);
void in_sck(void);
void ini_stop(void);
void send_0_45d021(void);
void send_1_45d021(void);
void Write_Byte_45d021(unsigned char b);
unsigned char Read_Byte_45d021(void);
unsigned char ready();
void write_buffer_45d021(unsigned char *buff,int n,unsigned char *addr,unsigned char mode);//写缓冲
void write_buffer_to_memory(unsigned char *addr,unsigned char com);
void save_main(unsigned int bufaddr,unsigned char *buf,int length,unsigned int flashaddr);
void read_memory_to_buffer(unsigned char *addr,unsigned char mode);
void memory_to_buffer(unsigned int pa,unsigned char mode);//从存储器读到缓冲
void read_buffer_45d021(unsigned char *buffer_45d021,unsigned char n,unsigned char *addr,unsigned char mode);//从缓冲读出
void read_main(unsigned int flashaddr,unsigned int bufaddr,unsigned char length,unsigned char *buf);//ROM的地址,RAM的地址,读取的长度



void ini_ic(void)
{
   sck=0;
   cs=0;
}


void in_sck(void)
{
   sck=0;
   sck=1;
   sck=0;

}

void ini_stop(void)
{
   cs=1;
   sck=0;
}


void send_0_45d021(void)
{
   si = 0;
   sck =1;
   sck =0;
   si=1;
}


void send_1_45d021(void)
{
   si=1;
   sck=1;
   sck=0;
}


void Write_Byte_45d021(unsigned char b)
{
unsigned char data r;
for(r=0;r<8;r++)
{
if ((b<<r)&0x80)
{
send_1_45d021();
}
else
{
send_0_45d021();
}
}
}


unsigned char Read_Byte_45d021(void)
{
	unsigned char data b;
	unsigned char  r;
	bit s;
	b = 0;
	sck=0;
	for(r=0;r<8;r++)
	{
	so=1;
	sck=1;
	s=so;
        s=~s;
	sck=0;
	if(s==1)              //new 45DB041 S == 0,OLD 45D041 S == 1
	{
	b=b<<1;
	b=b|0x01;
	}
	else
	b=b<<1;              //b=b&0xfe;//7.3
	}
	so=1;
	return b;
}

unsigned char ready()
{
unsigned char data flag;
unsigned char data flag2;
ini_ic();
Write_Byte_45d021(0x57);
in_sck();
flag=Read_Byte_45d021();
ini_stop();
flag2=flag&0x80;
if(flag2==0x80)  return 0;
else return 1;
}

void write_buffer_45d021(unsigned char *buff,int n,unsigned char *addr,unsigned char mode)//写缓冲

{
unsigned char  temp[2];
int data i;
if(mode==1)
temp[0]=0x84;
else
temp[0]=0x87;
ini_ic();
Write_Byte_45d021(temp[0]);
Write_Byte_45d021(0x00);//1BYTE none
Write_Byte_45d021(addr[0]);
Write_Byte_45d021(addr[1]);
for(i=0;i<n;i++)
{
Write_Byte_45d021(buff[i]);
}
ini_stop();
}


void write_buffer_to_memory(unsigned char *addr,unsigned char com)
{
unsigned char  temp[1];
if(com==1)
temp[0]=0x83;
else
temp[0]=0x86;
ini_ic();
Write_Byte_45d021(temp[0]);
Write_Byte_45d021(addr[0]);
Write_Byte_45d021(addr[1]);
Write_Byte_45d021(0x00);
ini_stop();
}

void save_main(unsigned int bufaddr,unsigned char *buf,int length,unsigned int flashaddr)

{
   unsigned char  pag[2];
   unsigned int   address;
   unsigned char  readyflag;
	address = bufaddr;
	pag[1]= (unsigned char)address;
	pag[0]= (unsigned char)(address>>8);
	write_buffer_45d021(buf,length,pag,1);
   do {
   readyflag=ready();
   }while(readyflag==1);
   delay(50);
	pag[0]=(unsigned char)(flashaddr>>7);
	pag[1]=(unsigned char)(flashaddr<<1);
	write_buffer_to_memory(pag,1);
	do {
	readyflag=ready();
	}while(readyflag==1);
}

void read_memory_to_buffer(unsigned char *addr,unsigned char mode)
{
unsigned char  temp[1];
if(mode==1)
temp[0]=0x53;
else
temp[0]=0x55;
ini_ic();
Write_Byte_45d021(temp[0]);
Write_Byte_45d021(addr[0]);
Write_Byte_45d021(addr[1]);
Write_Byte_45d021(0x00);
ini_stop();
}

void memory_to_buffer(unsigned int pa,unsigned char mode)//从存储器读到缓冲
{
unsigned char idata pag[2];
pag[1]= (unsigned char)(pa<<1);
pag[0]= (unsigned char)(pa>>7);
read_memory_to_buffer(pag,mode);
}

void read_buffer_45d021(unsigned char *buffer_45d021,unsigned char n,unsigned char *addr,unsigned char mode)//从缓冲读出
{
unsigned char idata temp[1];
unsigned char idata i;
if(mode==1)
temp[0]=0x54;
else
temp[0]=0x56;
ini_ic();
Write_Byte_45d021(temp[0]);

Write_Byte_45d021(0x00);//跳过空

Write_Byte_45d021(addr[0]);
Write_Byte_45d021(addr[1]);
Write_Byte_45d021(0x00);
in_sck();
for(i=0;i<n;i++)
{
buffer_45d021[i]=Read_Byte_45d021();
}
ini_stop();
}

void read_main(unsigned int flashaddr,unsigned int bufaddr,unsigned char length,unsigned char *buf)				//ROM档,RAM的地址,读取的长度
{
   unsigned char  adre[2];
   unsigned int  idata address;
   unsigned char  readyflag;
	memory_to_buffer(flashaddr,1);	//address
	do {
	readyflag=ready();
	}while(readyflag==1);
	address=bufaddr;
	adre[1]= (unsigned char)address;
	adre[0]= (unsigned char)(address>>8);
	read_buffer_45d021(buf,length,adre,1);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -