OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 381|回复: 2

NAND FLASH挂载FATFS文件系统失败,返回错误13,格式化也是失败

[复制链接]

  离线 

3

主题

8

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-8-24
在线时间
7 小时
发表于 2018-1-23 18:47:48 | 显示全部楼层 |阅读模式
正点原子公众号
自己做的STM32F429IGT6板,选择了MT29F8G08ABABA作为NAND FLASH芯片,挂载在STM32F429IGT6的BANK3上。我根据芯片手册重写了正点原子的NAND文件,成功完成NAND初始化,读取到了正确的ID。FATFS文件系统手动移植官网0.13版本的,已经成功挂载了W25Q256和SD卡,并成功在SD卡中读出了文件。现在有如下几个问题:
一、在NAND文件内,对NAND的初始化,在定义NAND_HandleTypeDef类型结构体NAND_Handler的时候,其中的NAND_Handler.Init.ECCPageSize=FMC_NAND_ECC_PAGE_SIZE_512BYTE;这里,定义ECC页的大小,是根据什么来定义的?是根据实际NAND一个Page的main区大小来定义还是根据其他的什么?


                Nand_Device.Page_TotalSize = 4320;                               
                Nand_Device.Page_MainSize = 4096;                               
                Nand_Device.Page_SpareSize = 224;                               
                Nand_Device.PageNum_inOneBlock = 128;               
                Nand_Device.BlockNum_inOnePlane = 1024;       
                Nand_Device.BlockTotalNumber = 2048;                       

以上为根据芯片手册定义的NAND信息结构体

二、在0.13版本的FATFS文件中,格式化函数多了两个参数
FRESULT f_mkfs (
        const TCHAR* path,        /* Logical drive number */
        BYTE opt,                        /* Format option */
        DWORD au,                        /* Size of allocation unit (cluster) [byte] */
        void* work,                        /* Pointer to working buffer (null: use heap memory) */
        UINT len                        /* Size of working buffer [byte] */
)

最后的两个参数是操作内存所需要的数据缓存空间和缓存空间大小嘛?我挂载W25Q256用的格式化函数result = f_mkfs("1:",1,4096,FATFS_DataBuff,FF_MAX_SS);是成功格式化的。

三、NAND部分函数除了根据不同芯片改写了芯片信息的结构体,以及ECC计算页大小不明白对应什么之外,其他都根据正点原子的代码几乎是重写。软件中间层FTL文件一一对应地复制了正点原子的对应文件代码,在FATFS文件系统的diskio文件内,FTL部分一点都没改。LUT表正常创建,但是总是在调用挂载NAND和格式化NAND的函数之后,一定会进入ECC更正函数,也就是NAND_ECC_Correction();内,计算出来的eccchk根据debug显示是0。
在串口助手上打印出来的信息为:
err hd,rd:0x0,0xFFFFFFFF
eccnum,eccstart:1,0
PageNum,ColNum:0,0

后来尝试了单独调用NAND文件内的读写函数,写入27个字节,读出27个字节通过串口打印,没有任何错误。在这之后,没有进行擦除,再次尝试挂载和格式化,串口打印信息为:
err hd,rd:0xf0cc,0xFFFFFFFF
eccnum,eccstart:1,0
PageNum,ColNum:0,0
还是显示2bit以上的错误,无法更正。现在我不太明白为什么。而且在擦除NAND的块的函数中,因为一个块有128个页,所以BlockNum<<=7;将块地址转化为页地址
想请问大家有什么可以尝试解决的办法,附件是相关的代码,主函数和工程没有包含其中。谢谢

STM32F429IGT6-ROM.zip

2.2 MB, 下载次数: 39

相关代码

回复

使用道具 举报

  离线 

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-7-5
在线时间
36 小时
发表于 2018-2-10 19:46:39 | 显示全部楼层
回复 支持 反对

使用道具 举报

  离线 

30

主题

299

帖子

0

精华

高级会员

Rank: 4

积分
731
金钱
731
注册时间
2017-8-7
在线时间
104 小时
发表于 2018-3-19 16:05:55 | 显示全部楼层
顶起,最近也需要用到这个,可怜的我第一次用,还要用到文件管理系统,慢慢消化吧
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-5-21 07:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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