免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2320 | 回复: 3

nanflash 驱动读写擦除 问题? [复制链接]

论坛徽章:
0
发表于 2014-09-01 17:01 |显示全部楼层
用的芯片是三星K9F8G08X0M
1 Block = 64 Pages
(256K + 8K) Bytes
1 Page = (4K + 12Bytes
1 Block = (4K + 12B x 64 Pages
= (256K + 8K) Bytes
1 Device = (4K + 12B x 64 Pages x 4,096 Blocks
= 8,448 Mbits



1st Cycle     A0 A1 A2 A3 A4 A5 A6 A7             Column Address
2nd Cycle   A8 A9 A10 A11 A12 *L *L *L         Column Address

3rd Cycle     A13 A14 A15 A16 A17 A18 A19 A20     Row Address
4th Cycle    A21 A22 A23 A24 A25 A26 A27 A28      Row Address
5th Cycle      A29 A30 *L *L *L *L *L *L                   Row Address

我自己的写函数往nand中写数据,读出来不正确?请高手指点

论坛徽章:
0
发表于 2014-09-01 17:04 |显示全部楼层
static void  bs_nand_status(struct bs_nand_status *nandp)
{
    BS_NAND_CMD = 0x70;
        nandp->status = BS_NAND_DATA & (1<<6);//0 busy , 1 ready
        nandp->pass_fail = BS_NAND_DATA & (1<<0);//0 pass ,1 fail
}
static void bs_nand_send_addr(unsigned int addr)
{
  unsigned int col_addr = addr & 0xfff;
  unsigned int row_addr = (addr >> 12) & 0x3ffff;
  BS_NAND_ADDR = col_addr & 0xff;
  BS_NAND_ADDR = (col_addr >> & 0xf;
  BS_NAND_ADDR = row_addr & 0xff;
  BS_NAND_ADDR = (row_addr >> & 0xff;
  BS_NAND_ADDR = (row_addr >> 16) & 0x3;
}

static void bs_nand_send_block_addr(unsigned int addr)
{
    unsigned int row_addr = (addr >> 12) & 0x3ffff;
          BS_NAND_ADDR = row_addr & 0xff;
          BS_NAND_ADDR = (row_addr >> & 0xff;
          BS_NAND_ADDR = (row_addr >> 16) & 0x3;
}

void bs_nand_read(unsigned char *buff,unsigned int nand,unsigned int size)
{
     unsigned int nand_addr = nand;
         unsigned int i;
         for( ; nand_addr < nand + size ; nand_addr += 204{
                                 BS_NAND_CMD = 0x00;
                bs_nand_send_addr(nand_addr);
                                 BS_NAND_CMD = 0x30;
              for(i = 0 ; i < 2048 ; i++)
                           *(buff++) = BS_NAND_DATA;
         }
}

int bs_nand_write(unsigned char *buff,unsigned int nand,unsigned int size)
{
            unsigned int i;
                unsigned int nand_addr = nand;
                struct bs_nand_status nand_st;
                for(;nand_addr < nand + size; nand_addr += 4096){
                      //  BS_NAND_CMD = 0x0;
                        BS_NAND_CMD = 0x80;
                                bs_nand_send_addr(nand_addr);
                                for(i=0;i<2048;i++){
                                        BS_NAND_DATA = *(buff++);
                                }
                        BS_NAND_CMD = 0x10;
                                while(1){
                        bs_nand_status(&nand_st);
                                        if(!nand_st.status)
                                                        continue;
                                    if(nand_st.pass_fail)
                                                        return -1;
                                        break;
                            }

                }
return 0;
}

int bs_nand_erase(unsigned int nand,unsigned int size)
{

        unsigned int nand_addr = nand;
        struct bs_nand_status nand_st;
    for( ; nand_addr < nand + size ; nand_addr += 64*4096){
                   BS_NAND_CMD = 0x60;
           bs_nand_send_block_addr(nand_addr);         
                   BS_NAND_CMD = 0xd0;
                   while(1){
                        bs_nand_status(&nand_st);
                                        if(!nand_st.status)
                                                        continue;
                                    if(nand_st.pass_fail)
                                                return -1;
                                        break;
                   }
        }
return 0;
}

这是我写的源码 求指导

论坛徽章:
0
发表于 2014-09-15 09:51 |显示全部楼层
地址发送不对

论坛徽章:
0
发表于 2014-12-16 16:46 |显示全部楼层
地址应该是怎么样的?

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP