OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4300|回复: 2

请问MT29F4G08改为MT29F1G08 除了读写的地址修改外,不知道还要修改什么参数

[复制链接]

15

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2017-3-17
在线时间
25 小时
发表于 2017-5-24 11:19:43 | 显示全部楼层 |阅读模式
1金钱
由于产品预算,从4G改为1G. 在STM32F429开发板子的基础上,把4G NAND FLASH改为1G NAND FLASH..
如果沿用原子的nand flash驱动,除了修改发送地址为4个byte外.
如:
[mw_shl_code=c,true]    if(nand_dev.id==MT29F16G08ABABA)    //NAND为MT29F16G08ABABA
    {
        nand_dev.page_totalsize=4320;          //nand一个page的总大小(包括spare区)     
        nand_dev.page_mainsize=4096;           //nand一个page的有效数据区大小   
        nand_dev.page_sparesize=224;        //nand一个page的spare区大小
        nand_dev.block_pagenum=128;                //nand一个block所包含的page数目
        nand_dev.plane_blocknum=2048;        //nand一个plane所包含的block数目
        nand_dev.block_totalnum=4096;          //nand的总block数目  
    }
    else if(nand_dev.id==MT29F4G08ABADA)//NAND为MT29F4G08ABADA
    {
        nand_dev.page_totalsize=2112;        //nand一个page的总大小(包括spare区)
        nand_dev.page_mainsize=2048;         //nand一个page的有效数据区大小
        nand_dev.page_sparesize=64;                //nand一个page的spare区大小
        nand_dev.block_pagenum=64;                //nand一个block所包含的page数目
        nand_dev.plane_blocknum=2048;        //nand一个plane所包含的block数目
        nand_dev.block_totalnum=4096;         //nand的总block数目
    } else if(nand_dev.id==MT29F1G08ABADA)
    {
        nand_dev.page_totalsize=2048+64;        //nand一个page的总大小(包括spare区)
        nand_dev.page_mainsize=2048;         //nand一个page的有效数据区大小
        nand_dev.page_sparesize=64;                //nand一个page的spare区大小
        nand_dev.block_pagenum=64;                //nand一个block所包含的page数目
        nand_dev.plane_blocknum=1024;        //nand一个plane所包含的block数目
        nand_dev.block_totalnum=1024;         //nand的总block数目
   
    }[/mw_shl_code]

[mw_shl_code=c,true]    if(nand_dev.id!=MT29F1G08ABADA)
    {
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
    }
    else {
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
        //*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
    }[/mw_shl_code]

除了上面这样修改外, 下面那一段如何.感觉跟官方提供的例程不太一样.
下面这段代码该如何修改
[mw_shl_code=c,true]u8 NAND_EraseBlock(u32 BlockNum)
{
        if(nand_dev.id==MT29F16G08ABABA)BlockNum<<=7;          //将块地址转换为页地址
    else if(nand_dev.id==MT29F4G08ABADA)BlockNum<<=6;
    else if(nand_dev.id==MT29F1G08ABADA)BlockNum<<=6;   //这里应该是多少好呢????????????????????????
    *(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_ERASE0;
    //发送块地址
    *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)BlockNum;
    *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(BlockNum>>8);
    *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(BlockNum>>16);
    *(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_ERASE1;
        if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR;//失败
    return 0;        //成功   
} [/mw_shl_code]
11.png

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2017-3-17
在线时间
25 小时
 楼主| 发表于 2017-5-24 11:19:44 | 显示全部楼层
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-10-1
在线时间
26 小时
发表于 2018-2-27 11:33:06 | 显示全部楼层

求分享
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 13:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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