📄 flsh24.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 + -