axi185
驱动牛犊
驱动牛犊
  • 注册日期2005-02-18
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1339回复:5

请教三星FLASH K9F2808的相关操作问题!

楼主#
更多 发布于:2005-05-06 21:36
刚开始接触到大容量FLASH , 遇到一些问题, 请教各位,感激不尽!!!
想用来做一个U盘, 但总是读写不对, 好不容易调好了读ID的程序, 但不知道为什么过了一天竟然读出来的不对了?是不是我做了擦除操作把ID号破坏了?还有GND ,/WP 2个脚在相关操作时怎么接?
 我的察除程序总是返回0x03, 不知道为什么
 擦除是按块操作的吧,那每次送入的地址怎么确定呢?比如在这个程序中我想擦除第2块, 送入地址0x0002对不对?
 (DATA为向IO口输出)  
    Flash_CLE  =  1;
    DATA=0x60;                      //擦除准备;
    
    Flash_CLE  =  0;
    Flash_ALE  =  1;
    
    DATA=0x32;        //读入地址;擦除第2块
    DATA=0x00;
    
    Flash_ALE  =  0;
    Flash_CLE  =  1;
    
    DATA=0xd0;                      //擦除flash;
    Flash_CLE  =  0;
    for(i=0;i<500;i++);      //等待
    
    while(!Flash_R_B);
 
    Flash_CLE  =  1;
    DATA=0x70;                 //读flash状态;
    Flash_CLE  =  0;
    for(i=0;i<500;i++);
    status=DATA;

wgtic
驱动牛犊
驱动牛犊
  • 注册日期2005-04-10
  • 最后登录2005-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-07 01:31
我在做Mp3,用的是k9F56,板子刚做出来,希望可以交流一下。
axi185
驱动牛犊
驱动牛犊
  • 注册日期2005-02-18
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-07 18:45
知道的前辈们帮忙解答一下啊!
p_y_h
驱动牛犊
驱动牛犊
  • 注册日期2004-04-27
  • 最后登录2006-04-27
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-08 09:31
ID你是察除不掉的,除非FLASH CHIP坏了。

程序中的地址发错了,第二个BLOCK,2808应该是0X20,0X00吧,DATA SHEET里解释的很清楚。
axi185
驱动牛犊
驱动牛犊
  • 注册日期2005-02-18
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-09 21:12
谢谢楼上的兄弟指点,  擦除已经搞定了, 不过不是很稳定, 可能与单片机的速度不是很匹配, 我用的C8251F020,速度快
但现在写一页(program),返回状态正确, 但是我接着把这一页读出来, 数据完全不对头, 不知道是什么原因?请高手帮忙看一看!谢谢!!!
Program:
    Flash_CLE  =  1;
    Flash_WE   =  0;
    COMMAND    =  0x80;                      //写准备;
    Flash_WE   =  1;
    Flash_CLE  =  0;

    Flash_ALE  =  1;
    
    Flash_WE   =  0;
    ADDRESS    =  0x00;                    //读入地址;
    Flash_WE   =  1;

    Flash_WE   =  0;
    ADDRESS    =  0x20;                   //读入地址;
    Flash_WE   =  1;
    //for(i=0;i<10;i++);
    Flash_WE   =  0;
    ADDRESS    =  0x00;                    //读入地址;
    Flash_WE   =  1;

    Flash_ALE  =  0;

    for(i=0;i<100;i++)                    //等待
    for(j=0;j<1000;j++);

    for(i=0;i<528;i++)
    {
      Flash_WE   =  0;
      for(j=0;j<100;j++);                //等待
      DATA       =  buff;
      Flash_WE   =  1;
      for(j=0;j<100;j++);                //等待
     }


    Flash_CLE  =  1;
    Flash_WE   =  0;
    COMMAND    =  0x10;                      //写flash;
    Flash_WE   =  1;
    Flash_CLE  =  0;

    for(i=0;i<100;i++)                     //等待
    for(j=0;j<1000;j++);  

    while(!Flash_R_B);
 
    Flash_CLE  =  1;
    Flash_WE   =  0;
    COMMAND    =  0x70;                 //读flash状态;
    Flash_WE   =  1;
    Flash_CLE  =  0;

    
    
    P3MDOUT = 0x00;               //设置P3为输入
    P3 = 0xFF;
  
  
    Flash_RE   =  0;
    status=DATA;
    Flash_RE   =  1;





Read:

    P3MDOUT = 0xFF;

    Flash_CLE  =  1;
    Flash_WE   =  0;
    COMMAND    =  0x00;                      //读
    Flash_WE   =  1;
    Flash_CLE  =  0;

    Flash_ALE  =  1;
    
    Flash_WE   =  0;
    ADDRESS    =  0x00;                //读入地址;
    Flash_WE   =  1;

    Flash_WE   =  0;
    ADDRESS    =  0x20;              //读入地址;
    Flash_WE   =  1;
    Flash_WE   =  0;
    ADDRESS    =  0x00;               //读入地址;
    Flash_WE   =  1;

    Flash_ALE  =  0;

     for(i=0;i<10000;i++);          //等待
    
    while(!Flash_R_B);

    P3MDOUT = 0x00;
    P3 = 0xFF;
    
    for(i=0;i<100;i++);                //等待

    for(i=0;i<528;i++)
    {
      Flash_RE   =  0;
      for(j=0;j<100;j++);            //等待
      Rbuff   =  DATA;
      Flash_RE   =  1;
      for(j=0;j<100;j++);            //等待

     }


    

mhpren
驱动牛犊
驱动牛犊
  • 注册日期2005-07-13
  • 最后登录2010-07-28
  • 粉丝0
  • 关注0
  • 积分237分
  • 威望45点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-08-20 20:22
楼主把读ID代码发出来看看吧,谢谢!!!
我用89S52写的代码觉得没有什么错误,但是老师读出来为0x00,请高手赐教!!
下面是我读写ID的代码:
    MCU_D12CS = 1;
    SRAMCE = 1;

    CLE = 0;
    FlashCE = 1;
    WR = 1;
    ALE = 0;
    RD = 1;

    CLE = 1;
    FlashCE = 0;
    WR = 0;
    P0 = 0x90;
    WR = 1;
    CLE = 0;

    ALE = 1;
//    _nop_();
    WR = 0;
    P0 = 0x00;
//    _nop_();
    WR = 1;
    ALE = 0;

    _nop_();
    _nop_();
    _nop_();
    _nop_();
//    P0 = 0xff;
//    _nop_();
//    _nop_();

 //  P1 = 0xff;
//    WRITERB;

    RD = 0;    
    P1 = 0xff;
    FlashID[0] = P0;
    RD = 1;
    _nop_();
    RD = 0;
    P0 = 0xff;
    FlashID[1] = P0;
    RD = 1;
    _nop_();
    RD = 0;
    P0 = 0xff;
    FlashID[2] = P0;
    RD = 1;
    _nop_();
    RD = 0;
    P0 = 0xff;
    FlashID[3] = P0;
    RD = 1;
游客

返回顶部