找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1933|回复: 0
收起左侧

求助39SF040的读写怎么也不通

[复制链接]
ID:114127 发表于 2016-4-14 08:39 | 显示全部楼层 |阅读模式
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]  ;}





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表