void delay_10us(unsigned int us)
{
while(us--)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
void delay_Nms(unsigned int ms)
{
unsigned int i;
while(ms--)
{
i=252;
while(i--);
} }
void protect() //解除保护
{
// select_segment(0);/*必须写到第0段*/
P4=0X00;
XBYTE[0x5555]=0xaa;
delay_10us(2);
XBYTE[0x2aaa]=0x55;
delay_10us(2);
XBYTE[0x5555]=0xa0;
delay_10us(2);
}
/*************39SF020扇区分布****************
地址从00000-3FFFF
每个扇区大小是:4Kbytes 哪么:
0扇区:0 0000-0 0FFF 1扇区:0 1000-0 1FFF
2扇区:0 2000-0 2FFF 3扇区:0 3000-0 3FFF
4扇区:0 4000-0 4FFF 5扇区:0 5000-0 5FFF
........
62扇区:3 E000-3 EFFF 63扇区:3 F000-3 FFFF
********************************************/
void SectorErase(unsigned char H_addr,unsigned int SectorAddr)//扇区擦除
{
//select_segment(H_addr); /*设置高位*/
CE=0;
XBYTE[0x5555]=0xaa;
delay_10us(2);
XBYTE[0x2aaa]=0x55;
delay_10us(2);
XBYTE[0x5555]=0x80;
delay_10us(2);
XBYTE[0x5555]=0xAA;
delay_10us(2);
XBYTE[0x2AAA]=0x55;
delay_10us(2);
XBYTE[SectorAddr]=0x30;
delay_10us(2);
CE=1;
delay_Nms(30);
}
void ChipErase()//整片擦除
{
// select_segment(0);/*必须写到第0段*/
// CE=0;
CE=0;
//RAM3=0;
XBYTE[0x5555]=0xaa;
delay_10us(4);
XBYTE[0x2aaa]=0x55;
delay_10us(4);
XBYTE[0x5555]=0x80;
delay_10us(4);
XBYTE[0x5555]=0xAA;
delay_10us(4);
XBYTE[0x2AAA]=0x55;
delay_10us(4);
XBYTE[0x5555]=0x10;
delay_10us(4);
CE=1;
delay_Nms(100);
}
unsigned char Read39SF02abyte(unsigned char H_addr,unsigned int L_addr)//读数据
{
unsigned char i;
//unsigned char i;
CE=0;
// select_segment(H_addr&0x03); /*s_sector 是256的整数倍*/
_nop_();_nop_();_nop_();_nop_();_nop_();
i=XBYTE[L_addr];
CE=1;
// RAM3=1;
return i;
}
void Write39SF02abyte(unsigned char H_addr,unsigned int L_addr,unsigned char W_Data) //写数据
{
CE=0;
protect(); //解除保护
// select_segment(H_addr&0x03); /*s_sector 是256的整数倍*/
XBYTE[L_addr]=W_Data; //高位
delay_10us(2);
CE=1;
// RAM3=1;
}
main
{
ChipErase();
Write39SF02abyte(00,0X1001,0X55) ;//写数据
Write39SF02abyte(00,0X1002,0X55); //写数据
Write39SF02abyte(00,0X1003,0X55);//写数据
Write39SF02abyte(00,0X1004,0XAA) ;//写数据
Write39SF02abyte(00,0X1005,0XAA); //写数据
HHH= Read39SF02abyte(00,0X1001);//读数据
HHH= Read39SF02abyte(00,0X1002);//读数据
HHH= Read39SF02abyte(00,0X1003);//读数据
HHH= Read39SF02abyte(00,0X1004);//读数据
HHH= Read39SF02abyte(00,0X1005);//读数据
HHH =XBYTE[0X1001] ;}
|