OpenEdv-开源电子网

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

NAND+fatfs+ucos-II读写文件异常

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-12-18
在线时间
3 小时
发表于 2017-12-18 20:59:26 | 显示全部楼层 |阅读模式
3金钱
问题描述:参考原子哥F7阿波罗硬件设计,采用512MB的NAND作为存储,nand驱动、FTL、fatfs、ucos都是参照原子哥例程,目前偶尔出现读写文件异常,返回错误都是disk_err,请原子哥给点思路,谢谢~
另外有几个疑问:
1)F7的nand最大支持256MB的nand,原子哥为啥设计512M的?
2)F7本身自带ECC计算功能,原子哥是自己用软件实现,处于何种考虑?

最佳答案

查看完整内容[请看2#楼]

1,F7支持的NAND容量远不止256MB,别理解错了。NAND的地址是可以分多次发送的。 2,我们例程用的就是硬件ECC,没有用软件的。好好看代码。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-12-18 20:59:27 | 显示全部楼层
1,F7支持的NAND容量远不止256MB,别理解错了。NAND的地址是可以分多次发送的。
2,我们例程用的就是硬件ECC,没有用软件的。好好看代码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-12-18
在线时间
3 小时
 楼主| 发表于 2017-12-19 10:05:41 | 显示全部楼层
本帖最后由 NARI007 于 2017-12-19 10:09 编辑
正点原子 发表于 2017-12-18 20:59
1,F7支持的NAND容量远不止256MB,别理解错了。NAND的地址是可以分多次发送的。
2,我们例程用的就是硬件E ...

首先,谢谢原子哥回复。
关于第一个问题,F7支持的NAND容量,这个数据来源于F7的参考手册,不过论坛好像附图有点问题,可以参考文档RM0410第332页关于FMC的存储bank映射中给出NAND只支持256M;关于第二个问题,本人参考是例程实验42, FATFS实验,其中关于NAND的初始化代码如下:
//初始化NAND FLASH
u8 NAND_Init(void)
{
    FMC_NAND_PCC_TimingTypeDef ComSpaceTiming,AttSpaceTiming;
     
    NAND_MPU_Config();  
    NAND_Handler.Instance=FMC_Bank3;
    NAND_Handler.Init.NandBank=FMC_NAND_BANK3;                          //NAND挂在BANK3上
    NAND_Handler.Init.Waitfeature=FMC_NAND_PCC_WAIT_FEATURE_DISABLE;    //关闭等待特性
    NAND_Handler.Init.MemoryDataWidth=FMC_NAND_PCC_MEM_BUS_WIDTH_8;     //8位数据宽度
    NAND_Handler.Init.EccComputation=FMC_NAND_ECC_DISABLE;              //禁止ECC
    NAND_Handler.Init.ECCPageSize=FMC_NAND_ECC_PAGE_SIZE_512BYTE;       //ECC页大小为512字节
    NAND_Handler.Init.TCLRSetupTime=10;                                  //设置TCLR(tCLR=CLE到RE的延时)=(TCLR+TSET+2)*THCLK,THCLK=1/180M=4.6ns
    NAND_Handler.Init.TARSetupTime=10;                                   //设置TAR(tAR=ALE到RE的延时)=(TAR+TSET+1)*THCLK,THCLK=1/180M=4.6n。   
   
    ComSpaceTiming.SetupTime=10;         //建立时间
    ComSpaceTiming.WaitSetupTime=10;    //等待时间
    ComSpaceTiming.HoldSetupTime=10;    //保持时间
    ComSpaceTiming.HiZSetupTime=10;     //高阻态时间
   
    AttSpaceTiming.SetupTime=10;         //建立时间
    AttSpaceTiming.WaitSetupTime=10;    //等待时间
    AttSpaceTiming.HoldSetupTime=10;    //保持时间
    AttSpaceTiming.HiZSetupTime=10;     //高阻态时间


    HAL_NAND_Init(&NAND_Handler,&ComSpaceTiming,&AttSpaceTiming);
    NAND_Reset();                               //复位NAND
    delay_ms(100);
    nand_dev.id=NAND_ReadID();                //读取ID
    printf("NAND ID:%#x\r\n",nand_dev.id);
        NAND_ModeSet(4);                                //设置为MODE4,高速模式


红色标记处关闭了硬件ECC
以上两个问题,若属于我理解问题,请原子哥海涵,不吝赐教。
最后也是最重要的问题,代码按照原子哥的例程编写,读写文件偶尔会出现disk_err,并且不同的板子,不同渠道的NAND表现都一样,还请原子哥给点思路,谢谢






FMC分布

FMC分布

F7 FMC分布

F7 FMC分布

原子哥NAND驱动

原子哥NAND驱动
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-19 14:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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