OpenEdv-开源电子网

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

8nandflash位改16位问题,写入一定次数后写入失败

[复制链接]

2

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2018-6-22
在线时间
25 小时
发表于 2019-8-23 16:35:53 | 显示全部楼层 |阅读模式
3金钱
正点原子fatfs实验,修改为16位的nandflash,型号MT29F4G16ABBD;修改了NAND_Init(void)函数,
1.添加后8位数据线初始化
2.FMC_Bank2_3->PCR3 bit4置1(16位模式)

3.添加对应flashID等信息;

结果是16位flash在写入百次左右后会出现返回3的情况,写入失败;

请问:
1. nand_dev结构体初始化的时候,page_totalsize,page_mainsize,page_sparesize等参数的大小单位是Byte还是Words?
2.是否还有其他地方需要修改,否则写入百次之后为什么会出现写入失败的情况;(单步调试是u32 FTL_FindUnusedBlock(u32 sblock,u8 flag))找不到未使用的块。
附件:nandflash.c nandflash.h注:换回8位flash后一切正常;

修改的代码:
/********************************************************************************************************
#if BIT16
//GPIOD8,9,10
        GPIO_Set(GPIOD,(0X7<<8),GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);                //PG9 AF OUT
        GPIO_AF_Set(GPIOD,8,12);        //PD15,AF12
        GPIO_AF_Set(GPIOD,9,12);        //PD15,AF12
        GPIO_AF_Set(GPIOD,10,12);        //PD15,AF12
//GPIOE11,12,13,14,15
        GPIO_Set(GPIOE,(0X1F<<11),GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);                //PG9 AF OUT
        GPIO_AF_Set(GPIOE,11,12);        //PD15,AF12
        GPIO_AF_Set(GPIOE,12,12);        //PD15,AF12
        GPIO_AF_Set(GPIOE,13,12);        //PD15,AF12
        GPIO_AF_Set(GPIOE,14,12);        //PD15,AF12
        GPIO_AF_Set(GPIOE,15,12);        //PD15,AF12

                tempreg|=1<<4;                                //数据线宽度为8位(16BIT)
#endif //BIT16
       
        tempreg=0<<1;                                //关闭等待特性
        tempreg|=1<<3;                                //存储器类型为NAND FLASH
//        tempreg|=0<<4;                                //数据线宽度为8位
        tempreg|=0<<6;                                //禁止ECC

********************************************************************************************************/
/********************************************************************************************************  }else if(nand_dev.id==OTHER4G)        //4GB//NAND为MT29F4G16ABADA
    {
        nand_dev.page_totalsize=2112/2;        //nand一个page的总大小(包括spare区)
        nand_dev.page_mainsize=2048/2;         //nand一个page的有效数据区大小
        nand_dev.page_sparesize=64/2;                //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数目
//        nand_dev.page_totalsize=1056;        //nand一个page的总大小(包括spare区)
//        nand_dev.page_mainsize=1024;         //nand一个page的有效数据区大小
//        nand_dev.page_sparesize=32;                //nand一个page的spare区大小
//        nand_dev.block_pagenum=64;                //nand一个block所包含的page数目
//        nand_dev.plane_blocknum=1024;        //nand一个plane所包含的block数目
//        nand_dev.block_totalnum=2048;         //nand的总block数目
    }else return 1;        //错误,返回 OTHER4G
********************************************************************************************************/
测试代码:
u32 test_nand(void)
{
        u32 i;
        u32 ret;
        while(1)
        {                                   
                LED0=!LED0;
                for(i = 0;i < sizeof(txbuf);i ++)
                {
                        txbuf[i] = 0x99 + i;
                }
                ret=FTL_WriteSectors(txbuf,testSectorNo,512,4);//写入扇区
                if(ret)//读取失败
                        while(1){;};
                ret=FTL_ReadSectors(rxbuf,testSectorNo,512,4);//读取扇区
                if(ret)//读取失败
                        while(1){;};
                if(Mymemcmp(txbuf,rxbuf,512))
                        while(1){;};
                testTimes ++;
        }
}



NAND.zip

8.66 KB, 下载次数: 5

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-8-24 02:02:17 | 显示全部楼层
回复

使用道具 举报

2

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2018-6-22
在线时间
25 小时
 楼主| 发表于 2019-8-27 14:18:45 | 显示全部楼层
没人。。。。。
回复

使用道具 举报

34

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
857
金钱
857
注册时间
2018-9-16
在线时间
240 小时
发表于 2019-8-27 16:25:02 | 显示全部楼层
我也用过16位的,读写都正常啊
回复

使用道具 举报

2

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2018-6-22
在线时间
25 小时
 楼主| 发表于 2019-8-28 10:04:30 | 显示全部楼层
plue 发表于 2019-8-27 16:25
我也用过16位的,读写都正常啊

是只改了我上面说的那几点吗?
回复

使用道具 举报

2

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2018-6-22
在线时间
25 小时
 楼主| 发表于 2019-8-28 10:23:11 | 显示全部楼层

请问一下nandflash实验,  当flash为16位时。
nand_dev.page_totalsize=1056;        //nand一个page的总大小(包括spare区)
nand_dev.page_mainsize=1024;         //nand一个page的有效数据区大小
nand_dev.page_sparesize=64;                //nand一个page的spare区大小

这些参数的单位是Byte吗?还是WORD?
回复

使用道具 举报

34

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
857
金钱
857
注册时间
2018-9-16
在线时间
240 小时
发表于 2019-8-28 11:12:26 | 显示全部楼层
icerain 发表于 2019-8-28 10:23
请问一下nandflash实验,  当flash为16位时。
nand_dev.page_totalsize=1056;        //nand一个page的总大小( ...

16位的是words,一个word=2Byte
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-16 06:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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